Files
AfiS-Aktensystem/.github/workflows/ci.yml
T
Harlekin 6c32ba1a6a Tests schreiben nicht mehr in die Entwicklungsdatenbank
Die Testläufe hatten dort 70 erfundene Rollen, 112 Nutzer und 40 Akten
hinterlassen. Die Rollenverwaltung zeigte deshalb "Gast" siebzehnmal, echte
Rollen doppelt und in willkürlicher Reihenfolge.

Aufräumen allein reicht nicht: CaseEntry, CaseEntryVersion und AuditLog lassen
sich nach harter Regel 2 nicht löschen. Was ein Test dort anlegt, bleibt für
immer stehen — in Phase 2 hätte das die Fallliste unbrauchbar gemacht.

Tests laufen deshalb gegen <datenbank>_test auf demselben Server. pnpm test legt
sie an, migriert und seedet sie vorher. Über TEST_DATABASE_URL lässt sich ein
anderes Ziel setzen.

Dazu die Abschnitte der Rollenverwaltung in der Reihenfolge, in der die
Abteilung ihre Rollen aufzählt: Ränge, Zugehörigkeit, Zugang. Innerhalb eines
Abschnitts entscheidet die Position auf dem Discord-Server, oben die höchste.
Damit steht die Hierarchie an einer Stelle, die ohnehin gepflegt wird.
2026-09-01 21:11:40 +02:00

110 lines
3.0 KiB
YAML

name: Prüfung
on:
push:
branches: [main]
pull_request:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
pruefen:
name: Lint, Typen, Tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_DB: afis
POSTGRES_USER: afis
POSTGRES_PASSWORD: afis
ports: ['5432:5432']
options: >-
--health-cmd "pg_isready -U afis -d afis"
--health-interval 10s --health-timeout 5s --health-retries 5
env:
DATABASE_URL: postgresql://afis:afis@localhost:5432/afis
DIRECT_DATABASE_URL: postgresql://afis:afis@localhost:5432/afis
APP_URL: http://127.0.0.1:3100
AUTH_SECRET: nur-fuer-die-pruefung-mindestens-32-zeichen-lang
DISCORD_CLIENT_ID: pruefung
DISCORD_CLIENT_SECRET: pruefung
DISCORD_BOT_TOKEN: pruefung
DISCORD_GUILD_ID: '0'
NEXT_TELEMETRY_DISABLED: '1'
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- run: pnpm install --frozen-lockfile
# Erzeugt den Prisma-Client nach packages/db/src/generated und übersetzt
# @afis/db. Muss vor lint, typecheck und test laufen.
- name: Datenbankpaket bauen
run: pnpm --filter @afis/db run build
- name: Datenbank aufbauen
run: pnpm db:deploy
- run: pnpm db:seed
- run: pnpm lint
- run: pnpm typecheck
# Die Regeltests laufen gegen eine echte Postgres-Instanz, aber gegen
# eine eigene Datenbank: siehe docs/13-entscheidungen.md.
- run: pnpm test
- name: Playwright-Browser
run: pnpm --filter @afis/web exec playwright install --with-deps chromium
# Baut die Anwendung und prüft sie über den Standalone-Server, also genau
# so, wie der Container sie startet.
- run: pnpm test:e2e
- uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report
path: web/playwright-report/
retention-days: 7
# Budget aus docs/09-performance-und-ux.md: erste Route unter 120 kB
# JavaScript nach Kompression.
- name: Bündelgröße prüfen
run: pnpm --filter @afis/web exec node ../scripts/check-bundle-budget.mjs
images:
name: Images bauen
runs-on: ubuntu-latest
needs: pruefen
if: github.event_name == 'pull_request'
strategy:
fail-fast: false
matrix:
dienst: [web, worker, pdf]
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
# Auf Pull Requests nur bauen, nicht schieben. Das Schieben macht
# .github/workflows/images.yml auf main.
- uses: docker/build-push-action@v6
with:
context: .
file: docker/${{ matrix.dienst }}.Dockerfile
push: false
cache-from: type=gha,scope=${{ matrix.dienst }}
cache-to: type=gha,mode=max,scope=${{ matrix.dienst }}