From 9247314e9a921790294af65c11554ab754543722 Mon Sep 17 00:00:00 2001 From: Lukas Geiger Date: Thu, 1 Oct 2026 14:52:43 +0200 Subject: [PATCH 1/2] ci: verify Flutter and cover source smoke runtime inputs --- .github/workflows/source-platform-smoke.yml | 14 ++++++ .github/workflows/tests.yml | 30 +++++++++++ README.md | 3 ++ docs/CI-CONTRACT.md | 56 +++++++++++++++++++++ 4 files changed, 103 insertions(+) create mode 100644 docs/CI-CONTRACT.md diff --git a/.github/workflows/source-platform-smoke.yml b/.github/workflows/source-platform-smoke.yml index 2796456..0ad91c7 100644 --- a/.github/workflows/source-platform-smoke.yml +++ b/.github/workflows/source-platform-smoke.yml @@ -4,13 +4,27 @@ on: push: paths: - 'main.py' + - 'translator.py' - 'requirements.txt' + - 'pyproject.toml' + - 'locales/**' + - 'assets/**' + - '*.ico' + - '*.png' - 'tests/source_platform_smoke.py' + - '.github/workflows/source-platform-smoke.yml' pull_request: paths: - 'main.py' + - 'translator.py' - 'requirements.txt' + - 'pyproject.toml' + - 'locales/**' + - 'assets/**' + - '*.ico' + - '*.png' - 'tests/source_platform_smoke.py' + - '.github/workflows/source-platform-smoke.yml' workflow_dispatch: permissions: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4f00d44..77bc454 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -70,3 +70,33 @@ jobs: PYTHONIOENCODING: utf-8 run: | python main.py --self-test + + flutter: + name: Flutter analyze and test + runs-on: ubuntu-latest + timeout-minutes: 20 + defaults: + run: + working-directory: flutter_port + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Flutter + uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2 + with: + channel: stable + flutter-version: '3.44.0' + cache: true + + - name: Show SDK versions + run: flutter --version + + - name: Resolve locked dependencies + run: flutter pub get --enforce-lockfile + + - name: Analyze Flutter source + run: flutter analyze --no-pub + + - name: Run Flutter tests + run: flutter test --no-pub diff --git a/README.md b/README.md index f2aea11..73609f8 100644 --- a/README.md +++ b/README.md @@ -276,6 +276,9 @@ CleanMarkdown is part of the [`doc-bricks`](https://github.com/doc-bricks) docum ## Development & Test Suite +The [CI contract](docs/CI-CONTRACT.md) lists the desktop, web-contract, +Flutter and source-smoke checks, their commands and acceptance limits. + ```powershell python -m pip install -r requirements.txt pytest ruff python -m py_compile main.py translator.py diff --git a/docs/CI-CONTRACT.md b/docs/CI-CONTRACT.md new file mode 100644 index 0000000..b46926e --- /dev/null +++ b/docs/CI-CONTRACT.md @@ -0,0 +1,56 @@ +# CleanMarkdown: CI-Vertrag + +Die aktiven Prüfwege sind Desktop-Python, Web-Vertragstests und Flutter. Der +aktuelle Web-Companion ist eine statische Vanilla-JavaScript-Anwendung ohne +`package.json` oder npm-Testsuite. Frühere Aufgabenangaben zu `npm test` und +66 Web-Tests beschreiben einen früheren Stand. + +## Desktop und Web + +`.github/workflows/tests.yml` führt auf Windows und Linux mit Python +3.10–3.13 Lint, Syntaxprüfung und die gesamte Pytest-Suite aus. Auf Windows +kommt der native Selbsttest hinzu. + +Die acht Web-Vertragstests in `tests/test_web_companion.py` sind Bestandteil +dieser Suite. Sie prüfen Assets, Manifest, Service-Worker-Inventar, +Ressourcenreferenzen, Session-Felder, Bedienelemente, Sprachschlüssel und +Desktop-Bereinigungsregeln. Sie führen die Web-Anwendung nicht in einem +Browser aus. Lokal lassen sie sich vom Repository-Stamm starten: + +```text +python -m pytest tests/test_web_companion.py +``` + +## Flutter + +Ein separater Ubuntu-Job im selben Workflow läuft bei Push auf `main` und +Pull Requests gegen `main`. Er verwendet Flutter 3.44.0 mit Dart 3.12, +passend zur vorhandenen SDK-Anforderung `^3.12.0`. Die Setup-Action ist auf +einen konkreten Commit gepinnt. Die Paketversionen bleiben durch das +vorhandene `pubspec.lock` gebunden; Abweichungen stoppen die Auflösung. + +Alle Befehle laufen in `flutter_port`: + +```text +flutter --version +flutter pub get --enforce-lockfile +flutter analyze --no-pub +flutter test --no-pub +``` + +Analyse- und Testfehler führen zum Fehlschlag des Jobs. Diese Prüfung ist +kein APK-/IPA-Build und ersetzt keine Android-/iOS-Geräteabnahme. + +## Source-Smoke + +`.github/workflows/source-platform-smoke.yml` führt den eigenständigen +Python-Source-Smoke auf Linux und macOS aus. Änderungen an `main.py`, +`translator.py`, `requirements.txt`, `pyproject.toml`, den Sprachdateien, +Assets, Root-Icons, dem Smoke-Programm und dem Smoke-Workflow lösen die +Prüfung aus. Die Settings-Prüfungen verwenden isolierte Anwendungsprofile. + +Die Workflow-Syntax kann mit `actionlint` geprüft werden. Erfolgreiche +Syntaxprüfung ersetzt keinen tatsächlichen GitHub-Lauf der einzelnen Jobs. + +SDK- und Action-Vertrag: [Flutter 3.44](https://flutter.dev/blog/whats-new-in-flutter-3-44), +[flutter-action](https://github.com/subosito/flutter-action). From f633c1ffb80ed701d0315fc028cc86de22233cdd Mon Sep 17 00:00:00 2001 From: Lukas Geiger Date: Thu, 1 Oct 2026 14:59:27 +0200 Subject: [PATCH 2/2] ci: match Flutter SDK to existing locked dependency versions --- .github/workflows/tests.yml | 2 +- docs/CI-CONTRACT.md | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 77bc454..9a7d137 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -86,7 +86,7 @@ jobs: uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2 with: channel: stable - flutter-version: '3.44.0' + flutter-version: '3.47.5' cache: true - name: Show SDK versions diff --git a/docs/CI-CONTRACT.md b/docs/CI-CONTRACT.md index b46926e..dec1237 100644 --- a/docs/CI-CONTRACT.md +++ b/docs/CI-CONTRACT.md @@ -24,8 +24,11 @@ python -m pytest tests/test_web_companion.py ## Flutter Ein separater Ubuntu-Job im selben Workflow läuft bei Push auf `main` und -Pull Requests gegen `main`. Er verwendet Flutter 3.44.0 mit Dart 3.12, -passend zur vorhandenen SDK-Anforderung `^3.12.0`. Die Setup-Action ist auf +Pull Requests gegen `main`. Er verwendet Flutter 3.47.5 mit Dart 3.13.4, +passend zum vorhandenen Lockfile und zur SDK-Anforderung `^3.12.0`. +Die SDK-Minimalgrenze allein reicht nicht: Flutter 3.44.0 verlangt fünf +andere Paketversionen und wird vom vorhandenen Lockfile abgewiesen. +Die Setup-Action ist auf einen konkreten Commit gepinnt. Die Paketversionen bleiben durch das vorhandene `pubspec.lock` gebunden; Abweichungen stoppen die Auflösung. @@ -52,5 +55,5 @@ Prüfung aus. Die Settings-Prüfungen verwenden isolierte Anwendungsprofile. Die Workflow-Syntax kann mit `actionlint` geprüft werden. Erfolgreiche Syntaxprüfung ersetzt keinen tatsächlichen GitHub-Lauf der einzelnen Jobs. -SDK- und Action-Vertrag: [Flutter 3.44](https://flutter.dev/blog/whats-new-in-flutter-3-44), +SDK- und Action-Vertrag: [offizielles Flutter-Release-Manifest](https://storage.googleapis.com/flutter_infra_release/releases/releases_linux.json), [flutter-action](https://github.com/subosito/flutter-action).