121 lines
4.4 KiB
YAML
121 lines
4.4 KiB
YAML
# 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
|
||
|
||
on:
|
||
pull_request:
|
||
push:
|
||
branches: [main]
|
||
|
||
env:
|
||
SUPABASE_CLI_VERSION: 3.0.0
|
||
|
||
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:
|
||
runs-on: docker
|
||
container:
|
||
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:
|
||
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 (erzeugt auch gen-l10n)
|
||
run: flutter pub get
|
||
|
||
- name: Code-Generierung
|
||
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
|
||
run: dart format --set-exit-if-changed .
|
||
|
||
- name: Analyse
|
||
run: flutter analyze --fatal-infos
|
||
|
||
- name: Tests
|
||
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
|
||
run: flutter build web --release --dart-define-from-file=env/ci.example.json
|
||
|
||
supabase:
|
||
runs-on: docker
|
||
container:
|
||
image: node:22.12-bookworm
|
||
steps:
|
||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
- name: Migrationen prüfen (ohne laufende DB)
|
||
run: |
|
||
test -d supabase/migrations || { echo "Keine Migrationen – übersprungen"; exit 0; }
|
||
# Bereits gemergte Migrationen dürfen nicht verändert werden
|
||
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
||
git fetch origin "${{ github.base_ref }}" --depth=1
|
||
changed=$(git diff --name-only --diff-filter=M "origin/${{ github.base_ref }}"...HEAD -- supabase/migrations || true)
|
||
if [ -n "$changed" ]; then echo "Geänderte bestehende Migrationen: $changed"; exit 1; fi
|
||
fi
|
||
|
||
# RLS-/pgTAP-Tests: braucht einen Runner mit Docker-Socket (Label "docker-host").
|
||
# Nutzt die eingecheckte supabase/config.toml. Ohne passenden Runner Job bei Bedarf deaktivieren.
|
||
supabase-tests:
|
||
runs-on: docker-host
|
||
steps:
|
||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||
- uses: https://code.forgejo.org/actions/setup-node@v4
|
||
with:
|
||
node-version: 22
|
||
- name: Supabase starten und Datenbanktests ausführen
|
||
run: |
|
||
test -f supabase/config.toml || { echo "supabase/config.toml fehlt"; exit 1; }
|
||
test -d supabase/migrations || { echo "Keine Migrationen – übersprungen"; exit 0; }
|
||
npx --yes supabase@${{ env.SUPABASE_CLI_VERSION }} start -x studio,imgproxy,edge-runtime,logflare,vector
|
||
npx --yes supabase@${{ env.SUPABASE_CLI_VERSION }} test db
|
||
- name: Aufräumen
|
||
if: always()
|
||
run: npx --yes supabase@${{ env.SUPABASE_CLI_VERSION }} stop --no-backup || true
|