Distribution
This page explains how plugins get from main to a server. Plugins use the Aniyomi-style two-branch model:
mainholds the C# plugin source projects.repoholds built DLLs and a machine-readable index, all auto-generated.
The build and publish workflow
build_push.yml runs on pushes to main that touch src/Schuly.Plugin.*/** or the workflow itself, and on manual dispatch. A change only in src/Shared/ doesn't trigger it.
It has three jobs:
- discover finds each
src/<folder>/Schuly.Plugin.*.csprojand emits a build matrix. A new plugin folder with a csproj needs no workflow change. - build runs
dotnet publish -c Releasefor each plugin, then stages:dll/<AssemblyName>-v<Version>.dll: the plugin assembly.dll/<AssemblyName>-v<Version>-deps.zip: its third-party dependencies, such as Kiota or AngleSharp. The zip leaves outMicrosoft.AspNetCore.*,Microsoft.Extensions.*,Microsoft.EntityFrameworkCore.*,Npgsql.*,Mediator.*, andSchuly.Plugin.Abstractions.dll, which the server provides. A plugin with no dependencies gets a marker-only zip, so the index schema stays uniform.- A metadata JSON for the plugin with
name,pkg,dll,deps,version,contract,description, andauthors.contractis the MAJOR.MINOR ofSchuly.Plugin.Abstractionsthe plugin resolved.name,version,description, andauthorscome from the csproj throughdotnet msbuild -getProperty.
- publish merges the JSON files into
index.json, sorted by name, and a minifiedindex.min.json. It then replacesdll/and both index files on therepobranch and commits. The branch holds only the builds from the latest run.
AssemblyName, Version, Description, and Authors come from each plugin's csproj, so keep them current.
Install a plugin
Servers download plugins from the repo branch automatically. Operators list the plugins they want in plugins.yml. See Plugin management. index.min.json is the catalog servers read to find plugins and versions.
