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@v5 with: # Volle Historie: die Micro-Version wird aus der Commit-Anzahl # abgeleitet (Standard wäre ein flacher Klon mit nur einem Commit). fetch-depth: 0 # Node einrichten und den Vite-Build fahren (D19): der Editor liegt jetzt # als ES-Module unter frontend/src/, Vite bündelt sie zu EINER # self-contained frontend/dist/index.html (JS+CSS+Favicon inline). Tests # laufen zuerst — schlägt Vitest fehl, wird nicht deployt. # Hinweis: der Default-`npm run build` trägt den 🚧-„latest build"-Hinweis # hinter dem Titel automatisch in sich (app.js/mountBuildBadge, D16) — der # Pages-Deploy ist bewusst der latest build. Nur `build:prod` ließe ihn weg. - name: Node einrichten uses: actions/setup-node@v5 with: node-version: 24 cache: npm cache-dependency-path: frontend/package-lock.json - name: Abhängigkeiten installieren run: npm ci --prefix frontend - name: Tests run: npm test --prefix frontend - name: Build (Vite) run: npm run build --prefix frontend # Site-Ordner zusammenstellen: die gebaute dist/index.html an die # Wurzel-URL, dazu LICENSE für den MIT-Link im Footer. Das Favicon ist im # Build bereits als data:-URI inline (kein docs/brand-Kopieren mehr nötig). # Im Footer werden gesetzt: # - die Versionsnummer: Major.Minor aus der VERSION-Datei (per # Bump-Commit gepflegt), die Micro-Stelle aus der Anzahl der Commits # seit dem letzten VERSION-Bump — steigt also je Commit und beginnt # nach einem Bump wieder bei 0 (z. B. 1.0.7). # - der Link der Versionsnummer: zeigt exakt auf den deployten Commit # (…/commit/). „Werkbaum" selbst verlinkt weiter die Repo- # Startseite. Braucht die volle Historie (fetch-depth: 0). # Der ../LICENSE-Link ist eine Laufzeit-Verknüpfung (kein Vite-Asset) und # zeigt von der Wurzel-URL aus sonst über die Site hinaus — daher hier auf # der Kopie geradegezogen. - name: Site zusammenstellen run: | MAJORMINOR="$(tr -d '[:space:]' < VERSION)" BASE="$(git log -1 --format=%H -- VERSION)" # letzter Bump-Commit [ -z "$BASE" ] && BASE="$(git rev-list --max-parents=0 HEAD | tail -1)" MICRO="$(git rev-list --count "${BASE}..HEAD")" # Commits seit dem Bump BUILD_VERSION="${MAJORMINOR}.${MICRO}" COMMIT_URL="https://github.com/mhoennig/werkbaum/commit/$(git rev-parse HEAD)" echo "Footer-Version: ${BUILD_VERSION} -> ${COMMIT_URL}" mkdir -p site sed -e 's#\.\./LICENSE#LICENSE#g' \ -e "s#\(]*>\)[0-9.]\+#\1${BUILD_VERSION}#" \ frontend/dist/index.html > site/index.html cp LICENSE site/LICENSE # Agenten-Fassung der Notation (D43) — liegt per Vite-public/ in dist/ cp frontend/dist/llms.md site/llms.md - name: Pages-Konfiguration uses: actions/configure-pages@v6 - name: Artefakt hochladen uses: actions/upload-pages-artifact@v5 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@v5