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.
110 lines
3.0 KiB
YAML
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 }}
|