Distribution
Plugins folgen dem Aniyomi-Stil-Zwei-Branch-Modell:
main- die C#-Plugin-Quellprojekte.repo- gebaute DLLs plus ein maschinenlesbarer Index, alles automatisch generiert.
Der Build-/Publish-Workflow
.github/workflows/build_push.yml läuft bei Pushes auf main, die src/Schuly.Plugin.*/** (oder den Workflow selbst) betreffen, sowie bei manuellem Auslösen. Er besteht aus drei Jobs:
- discover - globbt
src/**/Schuly.Plugin.*.csprojund erzeugt eine Build-Matrix. Ein neuer Plugin-Ordner mit einer csproj wird ohne Workflow-Änderung erkannt. - build (pro Plugin) -
dotnet publish -c Release, danach werden bereitgestellt:dll/<AssemblyName>-v<Version>.dll- die Plugin-Assembly, eigenständig ausgeliefert, damit Betreiber sie unabhängig pinnen/austauschen können.dll/<AssemblyName>-v<Version>-deps.zip- ihre Drittanbieter-Abhängigkeiten. Vom Host bereitgestellte Assemblies werden entfernt (ASP.NET Core, EF Core, Npgsql, Mediator und die Schuly-Host-Assemblies einschliesslichSchuly.Plugin.Abstractions); nur echte Drittanbieter-NuGet-Abhängigkeiten (Kiota, AngleSharp, …) werden gebündelt. Ein Plugin ohne solche erhält ein reines Marker-Zip, damit das Index-Schema einheitlich bleibt.- eine Metadaten-JSON pro Plugin (
name,pkg,dll,deps,version,description,authors), aus der csproj gelesen überdotnet msbuild -getProperty.
- publish - führt die JSONs der einzelnen Plugins zu einer
index.json(sortiert nach Name) und einer minifiziertenindex.min.jsonzusammen, kopiert die DLLs + Dependency-Zips und committet alles in denrepo-Branch.
AssemblyName, Version, Description und Authors stammen also direkt aus der PropertyGroup der jeweiligen .csproj - halte sie aktuell.
Installation (für Betreiber)
Vorgebaute Artefakte werden von raw.githubusercontent.com/schulydev/SchulyPlugins/repo ausgeliefert. Lade sie in den /app/plugins/-Ordner des Backends herunter:
BASE=https://raw.githubusercontent.com/schulydev/SchulyPlugins/repo
NAME=Schuly.Plugin.Schulware
VERSION=2.4.2
# 1. Plugin-DLL
curl -L "$BASE/dll/$NAME-v$VERSION.dll" -o /app/plugins/$NAME.dll
# 2. Ihre Drittanbieter-Abhängigkeiten
curl -L "$BASE/dll/$NAME-v$VERSION-deps.zip" -o /tmp/deps.zip
unzip -o /tmp/deps.zip -d /app/plugins/
# 3. Die Schuly.Plugin.<Name>.yml des Plugins in das plugins-config/ des Backends legenDas Backend stellt Framework- und Host-geteilte Assemblies bereits bereit, daher müssen nur die Plugin-DLL und ihre gebündelten Drittanbieter-Abhängigkeiten in plugins/ landen. index.min.json ist der Katalog, den Clients lesen, um verfügbare Plugins und Versionen zu entdecken.
