ci: run Flutter and web build checks from app/
Refs #31 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
e5df79ee0a
commit
77c71c0169
2 changed files with 56 additions and 16 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
# CI für Pull Requests und main – läuft auf einem Forgejo-Runner mit Docker-Label
|
# CI für Pull Requests und main – läuft auf einem Forgejo-Runner mit Docker-Label.
|
||||||
|
# Flutter-Projekt liegt in app/, Supabase in supabase/.
|
||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|
@ -6,11 +7,18 @@ on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
|
env:
|
||||||
|
SUPABASE_CLI_VERSION: 3.0.0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
# Format, Analyse, Tests. Generierte Dateien (*.g.dart, gen-l10n) sind eingecheckt und
|
||||||
|
# werden hier neu erzeugt; ein Diff bedeutet: Generierung im PR vergessen.
|
||||||
flutter:
|
flutter:
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/cirruslabs/flutter:stable # für Releases auf feste Version pinnen
|
image: ghcr.io/cirruslabs/flutter:3.47.9 # = lokale Flutter-Version (Dart 3.13.7); in beiden Jobs gleich halten
|
||||||
|
env:
|
||||||
|
PUB_CACHE: ${{ github.workspace }}/.pub-cache
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: app
|
working-directory: app
|
||||||
|
|
@ -20,23 +28,57 @@ jobs:
|
||||||
- name: Pub-Cache
|
- name: Pub-Cache
|
||||||
uses: https://code.forgejo.org/actions/cache@v4
|
uses: https://code.forgejo.org/actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: /root/.pub-cache
|
path: ${{ github.workspace }}/.pub-cache
|
||||||
key: pub-${{ hashFiles('app/pubspec.lock') }}
|
key: pub-${{ hashFiles('app/pubspec.lock') }}
|
||||||
|
restore-keys: pub-
|
||||||
|
|
||||||
- name: Abhängigkeiten
|
- name: Abhängigkeiten (erzeugt auch gen-l10n)
|
||||||
run: flutter pub get
|
run: flutter pub get
|
||||||
|
|
||||||
- name: Code-Generierung
|
- name: Code-Generierung
|
||||||
run: dart run build_runner build --delete-conflicting-outputs
|
run: dart run build_runner build --delete-conflicting-outputs
|
||||||
|
|
||||||
|
- name: Generierte Dateien aktuell?
|
||||||
|
run: |
|
||||||
|
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||||
|
if ! git diff --exit-code -- . ; then
|
||||||
|
echo "::error::Generierte Dateien sind nicht aktuell. Lokal 'dart run build_runner build --delete-conflicting-outputs' und 'flutter gen-l10n' ausführen und committen."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
untracked=$(git ls-files --others --exclude-standard -- lib test)
|
||||||
|
if [ -n "$untracked" ]; then echo "Nicht eingecheckte generierte Dateien:"; echo "$untracked"; exit 1; fi
|
||||||
|
|
||||||
- name: Format
|
- name: Format
|
||||||
run: dart format --set-exit-if-changed lib test
|
run: dart format --set-exit-if-changed .
|
||||||
|
|
||||||
- name: Analyse
|
- name: Analyse
|
||||||
run: flutter analyze --fatal-infos
|
run: flutter analyze --fatal-infos
|
||||||
|
|
||||||
- name: Tests
|
- name: Tests
|
||||||
run: flutter test --coverage
|
run: flutter test
|
||||||
|
|
||||||
|
# Web-Build parallel zu den Prüfungen; Platzhalterwerte aus app/env/ci.example.json (keine Secrets).
|
||||||
|
web-build:
|
||||||
|
runs-on: docker
|
||||||
|
container:
|
||||||
|
image: ghcr.io/cirruslabs/flutter:3.47.9
|
||||||
|
env:
|
||||||
|
PUB_CACHE: ${{ github.workspace }}/.pub-cache
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: app
|
||||||
|
steps:
|
||||||
|
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Pub-Cache
|
||||||
|
uses: https://code.forgejo.org/actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/.pub-cache
|
||||||
|
key: pub-${{ hashFiles('app/pubspec.lock') }}
|
||||||
|
restore-keys: pub-
|
||||||
|
|
||||||
|
- name: Abhängigkeiten
|
||||||
|
run: flutter pub get
|
||||||
|
|
||||||
- name: Web-Build
|
- name: Web-Build
|
||||||
run: flutter build web --release --dart-define-from-file=env/ci.example.json
|
run: flutter build web --release --dart-define-from-file=env/ci.example.json
|
||||||
|
|
@ -44,9 +86,11 @@ jobs:
|
||||||
supabase:
|
supabase:
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
container:
|
container:
|
||||||
image: node:22-bookworm
|
image: node:22.12-bookworm
|
||||||
steps:
|
steps:
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
- name: Migrationen prüfen (ohne laufende DB)
|
- name: Migrationen prüfen (ohne laufende DB)
|
||||||
run: |
|
run: |
|
||||||
test -d supabase/migrations || { echo "Keine Migrationen – übersprungen"; exit 0; }
|
test -d supabase/migrations || { echo "Keine Migrationen – übersprungen"; exit 0; }
|
||||||
|
|
@ -58,7 +102,7 @@ jobs:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# RLS-/pgTAP-Tests: braucht einen Runner mit Docker-Socket (Label "docker-host").
|
# RLS-/pgTAP-Tests: braucht einen Runner mit Docker-Socket (Label "docker-host").
|
||||||
# Läuft nur, wenn Migrationen existieren. Ohne passenden Runner Job bei Bedarf deaktivieren.
|
# Nutzt die eingecheckte supabase/config.toml. Ohne passenden Runner Job bei Bedarf deaktivieren.
|
||||||
supabase-tests:
|
supabase-tests:
|
||||||
runs-on: docker-host
|
runs-on: docker-host
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -68,9 +112,10 @@ jobs:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
- name: Supabase starten und Datenbanktests ausführen
|
- name: Supabase starten und Datenbanktests ausführen
|
||||||
run: |
|
run: |
|
||||||
|
test -f supabase/config.toml || { echo "supabase/config.toml fehlt"; exit 1; }
|
||||||
test -d supabase/migrations || { echo "Keine Migrationen – übersprungen"; exit 0; }
|
test -d supabase/migrations || { echo "Keine Migrationen – übersprungen"; exit 0; }
|
||||||
npx --yes supabase start -x studio,imgproxy,edge-runtime,logflare,vector
|
npx --yes supabase@${{ env.SUPABASE_CLI_VERSION }} start -x studio,imgproxy,edge-runtime,logflare,vector
|
||||||
npx --yes supabase test db
|
npx --yes supabase@${{ env.SUPABASE_CLI_VERSION }} test db
|
||||||
- name: Aufräumen
|
- name: Aufräumen
|
||||||
if: always()
|
if: always()
|
||||||
run: npx --yes supabase stop --no-backup || true
|
run: npx --yes supabase@${{ env.SUPABASE_CLI_VERSION }} stop --no-backup || true
|
||||||
|
|
|
||||||
5
env/ci.example.json
vendored
5
env/ci.example.json
vendored
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"SUPABASE_URL": "http://localhost:54321",
|
|
||||||
"SUPABASE_ANON_KEY": "public-anon-key-placeholder",
|
|
||||||
"APP_ENV": "ci"
|
|
||||||
}
|
|
||||||
Loading…
Reference in a new issue