diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 407a985..f255e6f 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -29,6 +29,23 @@ jobs: runs-on: ubuntu-latest container: php:8.5-cli steps: + # MUSS vor dem Checkout stehen. + # + # actions/checkout ist eine JavaScript-Aktion. act_runner führt solche + # Aktionen mit dem `node` AUS DEM JOB-CONTAINER aus -- anders als die + # gehosteten Runner von GitHub, die ihr eigenes node mitbringen. + # php:8.5-cli enthält weder node noch git, deshalb scheitert der Checkout + # dort mit „exit code 127" (command not found), ohne eine Zeile Ausgabe. + # + # Dieser Schritt ist ein reines Shell-Kommando und braucht kein node, + # läuft also auch im nackten Container. + - name: git und node für den Checkout bereitstellen + run: | + set -eu + apt-get update + apt-get install -y --no-install-recommends git nodejs curl ca-certificates + echo "node $(node --version), $(git --version)" + - uses: actions/checkout@v4 - name: Syntax aller PHP-Dateien prüfen diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md index 87cdb16..6e9e8cc 100644 --- a/docs/DEPLOYMENT.md +++ b/docs/DEPLOYMENT.md @@ -201,6 +201,22 @@ unverändert weiter -- ein automatischer Rückschritt würde dann auf die Der Lauf berichtet stattdessen, was gerade aktiv ist und ob `/api/health` antwortet; zurückgeschaltet wird bei Bedarf von Hand. +### Warum der PHP-Auftrag erst node installiert + +`actions/checkout` ist eine JavaScript-Aktion. act_runner führt solche Aktionen +mit dem `node` **aus dem Job-Container** aus -- anders als die gehosteten Runner +von GitHub, die ihr eigenes node mitbringen. `php:8.5-cli` enthält weder node +noch git, deshalb bricht der Checkout dort mit `exit code 127` ab, ohne eine +Zeile Ausgabe zu erzeugen. + +Der erste Schritt des Auftrags installiert daher `git` und `nodejs` per apt. Er +ist ein reines Shell-Kommando und läuft deshalb auch im nackten Container. Der +Bau-Auftrag braucht das nicht: `node:22-bookworm` bringt beides mit. + +Bookworm liefert node 18, `actions/checkout@v4` deklariert node 20. In der +Praxis läuft das Bündel der Aktion auf node 18 -- sollte es doch einmal klemmen, +node 20 aus dem NodeSource-Paketstand installieren. + ### Schlüssel einrichten Auf dem Arbeitsplatz: