Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .github/workflows/source-platform-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
30 changes: 30 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
59 changes: 59 additions & 0 deletions docs/CI-CONTRACT.md
Original file line number Diff line number Diff line change
@@ -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).
Loading