From 1f8af7b9a90a8ba241cd05ee148f534121e015ab Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Mon, 31 Aug 2026 16:52:34 +0200 Subject: =?UTF-8?q?Die=20Pr=C3=BCfung=20l=C3=A4uft=20fortan=20bei=20jedem?= =?UTF-8?q?=20Push=20von=20selbst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gebaut und geprüft wurde bislang von Hand: „./mvnw verify“ und, seltener, „./mvnw -Pwasm package“ nebst „reuse lint“. Ein Bruch fiel damit erst dem auf, der zufällig baute — und gerade der Wasm-Bau, der eine andere Java-Fassung voraussetzt als der gewöhnliche, wird am seltensten angefaßt. Der neue Arbeitsablauf .github/workflows/ci.yml fährt bei jedem Push nach master und bei jedem Pull Request drei Läufe nebeneinander: Bau und sämtliche Tests auf einem Temurin-JDK 25 (Spotless und Enforcer laufen mit, weil sie an die Phase „verify“ hängen), die Herstellung der Browserfassung auf Oracle GraalVM — die Community Edition trägt Web Image nicht — samt deploy/webpaket.sh, und die Lizenzauszeichnung nach REUSE. Binaryen wird dem Wasm-Lauf vorab eingerichtet, damit wasm-opt tatsächlich läuft und die 25-MiB-Grenze an dem gemessen wird, was ausgeliefert würde. Das Webpaket und die ausführbare Archivdatei bleiben als Artefakte abrufbar, die Testberichte nur im Fehlerfall. Nachzuladen ist nichts: Der Beispielkorpus liegt im Repository und ist allein von „git archive“ ausgenommen. § 17 des Handbuchs erhält hierzu die Absätze 4 und 5; das Fassungsverzeichnis führt den Tag fort. Geprüft: „./mvnw --batch-mode verify“ geht auf (58 s); der Wasm-Befehl des Laufes ergibt örtlich „target/web ist auslieferbar“ (wasm-opt: 19 845 039 -> 17 392 218 Bytes); „reuse lint“ weist 224 von 224 Dateien als vollständig ausgezeichnet aus. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019asn2GWjyjGotivHpYchfi Change-Id: Ib9a7f676859529cc7c1253234ce7cc0175267b51 --- .github/workflows/ci.yml | 109 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 .github/workflows/ci.yml (limited to '.github') diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..369f3e9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,109 @@ +# SPDX-FileCopyrightText: 2026 Matthias Andreas Benkard +# SPDX-License-Identifier: AGPL-3.0-or-later + +# Selbsttätige Prüfung nach README § 17. Drei Läufe nebeneinander: +# +# 1. „pruefung“ — ./mvnw verify: Kompilat, sämtliche Tests (Akzeptanz- und +# Korpuslauf eingeschlossen), Spotless und Enforcer. +# 2. „browserfassung“ — der Wasm-Bau nach § 14 Abs. 5. Er braucht Oracle GraalVM, +# nicht die Community Edition: Web Image ist nur dort enthalten. +# 3. „lizenzauszeichnung“ — reuse lint nach § 16. +# +# Der Beispielkorpus (src/test/resources/sampledata) liegt im Repository; das +# gewöhnliche checkout genügt, nachzuladen ist nichts. + +name: CI + +on: + push: + branches: [master] + pull_request: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + + pruefung: + name: Bau und Prüfung (JDK 25) + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Java einrichten + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '25' + cache: maven + + - name: mvnw verify + run: ./mvnw --batch-mode --no-transfer-progress verify + + - name: Ausführbare Archivdatei aufbewahren + uses: actions/upload-artifact@v4 + with: + name: aendggner-jar + path: | + target/aendggner-*.jar + target/libs/ + retention-days: 14 + + # Nur im Fehlerfall: sonst wäre bei jedem grünen Lauf ein Bericht abzulegen, + # den niemand ansieht. + - name: Testberichte im Fehlerfall aufbewahren + if: failure() + uses: actions/upload-artifact@v4 + with: + name: surefire-berichte + path: target/surefire-reports/ + retention-days: 14 + + browserfassung: + name: Browserfassung (GraalVM Web Image) + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + # Binaryen liefert wasm-opt. Fehlt es, bleibt das Modul unnachoptimiert + # (webpaket.sh warnt nur), und die Prüfung gegen die 25-MiB-Grenze von + # Cloudflare Workers misst nicht das, was ausgeliefert würde. + - name: Binaryen einrichten + run: | + sudo apt-get update + sudo apt-get install -y binaryen + + - name: Oracle GraalVM einrichten + uses: graalvm/setup-graalvm@v1 + with: + distribution: graalvm + java-version: '25' + cache: maven + + # Die Tests laufen im Job „pruefung“; hier geht es um den Übersetzungsweg + # (native-image --tool:svm-wasm) und um deploy/webpaket.sh. + - name: mvnw -Pwasm package + run: ./mvnw --batch-mode --no-transfer-progress -Pwasm package -DskipTests + + - name: Webpaket aufbewahren + uses: actions/upload-artifact@v4 + with: + name: aendggner-web + path: target/web/ + retention-days: 14 + + lizenzauszeichnung: + name: Lizenzauszeichnung (REUSE) + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: fsfe/reuse-action@v5 -- cgit v1.2.1