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..9a7d137 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.47.5' + 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..dec1237 --- /dev/null +++ b/docs/CI-CONTRACT.md @@ -0,0 +1,59 @@ +# 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.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. + +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: [offizielles Flutter-Release-Manifest](https://storage.googleapis.com/flutter_infra_release/releases/releases_linux.json), +[flutter-action](https://github.com/subosito/flutter-action).