diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..32aca7a --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,78 @@ +name: Deploy to GitHub Pages + +# Veröffentlicht den Frontend-Editor als statische Seite auf GitHub Pages. +# Einmalige Voraussetzung: Repo-Settings → Pages → Source = "GitHub Actions" +# (Repo muss dafür öffentlich sein). Siehe README.md, Abschnitt „Deployment". + +on: + push: + branches: [main] + workflow_dispatch: + +# Nur Leserechte auf den Code, plus die für die Pages-Deployment-Actions +# nötigen Sonderrechte: pages (Deployment schreiben) und id-token (OIDC-Token, +# das actions/deploy-pages zur Authentifizierung braucht). +permissions: + contents: read + pages: write + id-token: write + +# Läuft immer nur ein Deployment gleichzeitig; neue Pushes warten, laufende +# werden nicht abgebrochen (cancel-in-progress: false), damit ein Deploy nicht +# mittendrin unterbrochen wird. +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + # Platzhalter für spätere Vitest-Läufe (Tests existieren noch nicht, + # siehe docs/TASKS.md, Phase 1). Bei Aktivierung: Node einrichten und + # Tests ausführen — schlägt der Testlauf fehl, wird nicht deployt. + # - name: Node einrichten + # uses: actions/setup-node@v4 + # with: + # node-version: 20 + # cache: npm + # - name: Abhängigkeiten installieren + # run: npm ci + # - name: Tests + # run: npm test + + # Site-Ordner zusammenstellen: index.html an die Wurzel-URL, dazu die + # vom Editor referenzierten Dateien (Favicon aus docs/brand/, LICENSE für + # den MIT-Link im Footer). Die Editor-Quelle bleibt unverändert — die + # ../-Pfade werden nur auf der Kopie im Site-Ordner geradegezogen, weil + # sie von der Wurzel-URL aus sonst über die Site hinauszeigen würden. + - name: Site zusammenstellen + run: | + mkdir -p site/docs/brand + sed -e 's#\.\./docs/brand/#docs/brand/#g' \ + -e 's#\.\./LICENSE#LICENSE#g' \ + frontend/index.html > site/index.html + cp docs/brand/* site/docs/brand/ + cp LICENSE site/LICENSE + + - name: Pages-Konfiguration + uses: actions/configure-pages@v5 + + - name: Artefakt hochladen + uses: actions/upload-pages-artifact@v3 + with: + path: site + + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Auf GitHub Pages deployen + id: deployment + uses: actions/deploy-pages@v4 diff --git a/README.md b/README.md index 5cb0118..a032693 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,23 @@ Elemente einblenden. - `docs/design/` — Design-Herleitung der Marke - `CLAUDE.md` — Projektkontext für Claude Code +## Deployment + +Der Editor wird per GitHub Actions als statische Seite auf **GitHub Pages** +veröffentlicht (Workflow: `.github/workflows/pages.yml`). Ausgelöst bei jedem +Push auf `main` sowie manuell (`workflow_dispatch`). + +Der Workflow stellt einen Site-Ordner zusammen: `frontend/index.html` liegt als +`index.html` an der Wurzel-URL, dazu die vom Editor referenzierten Dateien +(`docs/brand/` fürs Favicon, `LICENSE` für den MIT-Link im Footer). Die +`../`-Pfade der Editor-Quelle werden dabei nur auf der Kopie geradegezogen — die +Quelldatei bleibt unverändert. `backend/` und die übrigen `docs/` werden nicht +veröffentlicht. + +**Einmalige Einrichtung:** In den Repo-Settings unter **Pages** als **Source** +„GitHub Actions" wählen. Das Repo muss dafür **öffentlich** sein (GitHub Pages +via Actions ist für private Repos nur mit kostenpflichtigem Plan verfügbar). + ## Lizenz MIT — siehe [LICENSE](LICENSE). © 2026 Michael Hönnig. diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 3d8d40e..05fabe3 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -102,3 +102,23 @@ durchgezogene Hauptlinie optisch mit „all of“ konkurrieren. Grau tritt zurü die gestrichelte Führung bleibt eindeutig. D12/BRAND — „durchgezogen = und, gestrichelt = oder“ — gilt für das **Markenzeichen** unverändert (Logo behält Petrol); im **Diagramm** trägt allein der Linienstil die Gate-Codierung. + +## D16 — Deployment über GitHub Pages via Actions-Workflow +Der Editor ist eine einzelne statische Datei (D11) — GitHub Pages genügt, kein +eigener Server nötig. Veröffentlicht wird über den offiziellen Actions-Weg +(`actions/upload-pages-artifact` + `actions/deploy-pages`, `permissions: +pages/​id-token`, `concurrency: pages`) statt über den `gh-pages`-Branch: kein +Zusatz­branch, OIDC statt Deploy-Key, Trigger bei Push auf `main` und manuell. +Der Test-Step (Vitest, Phase 1) ist als Platzhalter auskommentiert vorbereitet. + +**Pfad-Entscheidung:** `frontend/index.html` referenziert Favicon und +MIT-Lizenz relativ mit `../` (`../docs/brand/favicon.svg`, `../LICENSE`) — von +der Wurzel-URL aus zeigten diese über die Site hinaus. Statt die Quelldatei zu +ändern (D14/CLAUDE: „Editor nicht refaktorieren“) zieht der Workflow die +`../`-Pfade **nur auf der Site-Kopie** gerade (`sed`) und legt die referenzierten +Dateien passend ab: `index.html` an die Wurzel, `docs/brand/` und `LICENSE` +daneben. So bleibt die Quelle unverändert (lokal weiter per `file://` und +Dev-Server nutzbar), und veröffentlicht wird nur das Nötige — `backend/` und die +übrigen `docs/` bleiben außen vor. + +(Nummerierung: D15 war bereits für den kompakten Modus vergeben, daher D16.) diff --git a/docs/TASKS.md b/docs/TASKS.md index b56135f..f2560e0 100644 --- a/docs/TASKS.md +++ b/docs/TASKS.md @@ -19,6 +19,10 @@ Abhaken beim Erledigen; neue Aufgaben unten anfügen. - [ ] Druck-Stylesheet (Diagramm ohne Editor-Panel). - [ ] Fehlertolerantes Parsen weiter ausbauen (unbekannte Statuszeichen melden). +## Deployment +- [x] GitHub-Pages-Workflow angelegt (`.github/workflows/pages.yml`, + siehe docs/DECISIONS.md D16). + ## Phase 3 — Integrationen (siehe docs/ROADMAP.md) - [ ] Backend-Gerüst per Spring Initializr in `backend/` anlegen (Kotlin, Gradle Kotlin DSL, JDK 21; Konventionen: backend/CLAUDE.md).