SD-2: Build- und Deploy-Infrastruktur für lokale Entwicklung #4
Loading…
Reference in a new issue
No description provided.
Delete branch "issue/2/build-und-deploy-infrastruktur-fuer-lokale"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #2
Änderungen
package.jsonmit npm-Workspaceplugins/*(nichtprofiles/*— derenpackage.jsonist Elgato-Profil-Metadata, keine npm-Manifeste, siehe README-Abschnitt "Why plugins and profiles are packed differently")scripts/pack-plugin.mjs— validiertmanifest.json(inkl. leerer Strings), prüft dassCodePathgebaut wurde, zippt*.sdPlugin/nachplugins/dist/<name>.streamDeckPluginscripts/pack-profile.mjs— zipptProfiles/nachprofiles/dist/<name>.streamDeckProfilescripts/lib/zip-dir.mjs— geteilte Zip-Logik (inkl. Error-Handler auf dem Write-Stream)plugins/placeholder-plugin/— minimales Plugin (Rollup + TypeScript) zur Ende-zu-Ende-Verifikation des Build-Pfads.forgejo/workflows/test.yml—npm ci && npm test && npm run build --workspacesauf Push/PR.forgejo/workflows/release.yml— Tag-Triggerplugin-<name>@<version>/profile-<name>@<version>, baut ausschließlich das referenzierte Artefakt und veröffentlicht es als Forgejo-Release-Asset (benötigt Repo-SecretRELEASE_TOKEN, siehe README).gitignore-Pattern*.sdPlugin/bin/griff nicht für verschachtelte Pfade (plugins/<name>/<uuid>.sdPlugin/bin/) — auf**/*.sdPlugin/bin/korrigiertGetestete Akzeptanzkriterien
npm run build -w plugins/<name>erzeugt ein gültiges*.sdPlugin-Verzeichnisnpm run pack:profile -- profiles/<name>erzeugt ein importierbares.streamDeckProfileim ignoriertenprofiles/dist/.forgejo/workflows/release.ymlbaut pro Tag ausschließlich das referenzierte Paketpack-plugin.mjsbricht bei fehlenden/leeren Pflichtfeldern oder fehlendemCodePathmit Exit-Code 1 und verständlicher Meldung ab, ohne Artefakt zu erzeugenTests
node --test tests/*.mjs(Node-Built-in-Test-Runner): 4 Tests fürpack-profile.mjs/pack-plugin.mjs(Happy Path + Fehlerfälle), TDD-Zyklus RED→GREEN durchlaufen. Zusätzlich manuell Ende-zu-Ende gegenprofiles/default-profileund das Platzhalter-Plugin verifiziert (frischernpm ci-Lauf, Artefakte sind valide ZIPs).Version
Entfällt — Monorepo mit unabhängiger Pro-Paket-Versionierung über Git-Tags (
plugin-<name>@<version>/profile-<name>@<version>); ein repo-weites Root-Versionsfeld hätte keine Konsumenten und keine Bedeutung.Code-Review
Durchgeführt: Architektur-Review (Timo), Security-Review (Nils, keine Findings), Code-Review in drei Dimensionen (Korrektheit/Vereinfachung/Effizienz). Alle validen Befunde behoben: fehlende Existenzprüfung des Plugin-Verzeichnisses, unbehandelter Write-Stream-Error, leere Pflichtfelder wurden akzeptiert, fehlende CodePath-Prüfung vor dem Packen, duplizierte Zip-/Test-Helper-Logik extrahiert,
process-Shadowing im Test-Helper behoben, CI-Workflows umactions/setup-node(gepinnt) ergänzt, Tag-Werte in Shell-Kommandos überenv:statt direkter${{ }}-Interpolation gehärtet.Bekannte, bewusst nicht behobene Punkte (Begründung im PR-Review dokumentiert):
plugins/dist/liegt formal innerhalb der Workspace-Globplugins/*(unproblematisch, da keinpackage.jsondarin); geteilte Rollup-/tsconfig-Presets für künftige weitere Plugins wären bei aktuell nur einem Plugin verfrühte Abstraktion.