Files
werkbaum/.github/workflows/pages.yml
T
mhoennigandClaude Opus 4.8 b7bf9182ea ci/pages: Latest-Build-Hinweis (Symbol + Tooltip) hinter dem Titel
Der Pages-Deploy ist der frischeste Entwicklungsstand und kann Fehler
enthalten; die stabile Instanz laeuft woanders. Damit nur diese
Veroeffentlichung markiert ist, injiziert der Workflow nach demselben Muster
wie Version/LICENSE — also NUR auf der Site-Kopie — hinter dem Titel (Anker
</h1>, im Bundle eindeutig) ein kleines Symbol mit zweisprachigem Tooltip
(<span class="build-badge">🚧</span>). Quelle bleibt unberuehrt: ein schlichter
`npm run build` erzeugt die Datei ohne Hinweis. Als Deploy-Metainfo bewusst
nicht im I18N-Objekt (D14). D16 fortgeschrieben.

Verifiziert gegen das echte dist-Bundle: Badge genau 1x, Version 1.0.x +
Commit-Link unveraendert, frontend/index.html traegt 0 Badges.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 05:43:39 +02:00

111 lines
4.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
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.
- name: Node einrichten
uses: actions/setup-node@v4
with:
node-version: 20
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/<sha>). „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}"
# Latest-Build-Hinweis (Symbol + Tooltip) hinter dem Titel: kennzeichnet
# NUR diese Pages-Veröffentlichung als Entwicklungsstand. Wird bewusst
# erst hier auf der Site-Kopie injiziert (wie Version/LICENSE), damit die
# Quelle und jede andere Instanz (schlichter `npm run build`) ihn nicht
# tragen. Literale UTF-8-Zeichen (kein `#`/`&`, sonst kollidiert der
# sed-Delimiter); Anker `</h1>` ist im Bundle eindeutig.
BADGE='<span class="build-badge" role="img" aria-label="Latest build may be buggy" title="Aktueller Entwicklungsstand (latest build) kann noch Fehler enthalten · Latest development build may still be buggy" style="margin-left:.45em;font-size:.58em;vertical-align:middle;cursor:help;user-select:none;text-decoration:none">🚧</span>'
mkdir -p site
sed -e 's#\.\./LICENSE#LICENSE#g' \
-e "s#</h1>#${BADGE}</h1>#" \
-e "s#\(<a class=\"ver\" href=\"\)[^\"]*#\1${COMMIT_URL}#" \
-e "s#\(<a class=\"ver\"[^>]*>\)[0-9.]\+</a>#\1${BUILD_VERSION}</a>#" \
frontend/dist/index.html > site/index.html
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