name: CI on: push: branches: [main] pull_request: branches: [main] jobs: backend-tests: runs-on: ubuntu-latest # Runner läuft im Host-Modus ohne Docker (Nutzerentscheidung: kein Docker-Zwang, # Prompt 19). Dadurch keine isolierten Service-Container möglich – die Tests # nutzen stattdessen die auf dem Runner-Host bereits laufende System-PostgreSQL # und legen sich dort eine eigene, wegwerfbare Test-Datenbank an. env: TEST_DB_NAME: mabea_ci_test TEST_DB_USER: mabea_ci TEST_DB_PASSWORD: mabea_ci_test DATABASE_URL: postgresql+asyncpg://mabea_ci:mabea_ci_test@localhost:5432/mabea_ci_test JWT_SECRET_KEY: ci-test-secret-key SYSTEMKNOTEN_ID: "1" defaults: run: working-directory: backend steps: - uses: actions/checkout@v4 - name: Test-Datenbank anlegen (idempotent, System-PostgreSQL des Runner-Hosts) run: | su -s /bin/bash postgres -c "psql -tAc \"SELECT 1 FROM pg_roles WHERE rolname='${TEST_DB_USER}'\"" | grep -q 1 || \ su -s /bin/bash postgres -c "psql -c \"CREATE ROLE ${TEST_DB_USER} WITH LOGIN PASSWORD '${TEST_DB_PASSWORD}';\"" su -s /bin/bash postgres -c "psql -c \"DROP DATABASE IF EXISTS ${TEST_DB_NAME};\"" su -s /bin/bash postgres -c "psql -c \"CREATE DATABASE ${TEST_DB_NAME} OWNER ${TEST_DB_USER};\"" su -s /bin/bash postgres -c "psql -d ${TEST_DB_NAME} -c \"CREATE EXTENSION IF NOT EXISTS pgcrypto;\"" - name: Virtualenv + Dependencies installieren run: | python3 -m venv .venv .venv/bin/pip install -q --upgrade pip .venv/bin/pip install -q -e ".[dev]" - name: Migrationen ausführen run: .venv/bin/alembic upgrade head - name: Tests mit Coverage-Gate run: .venv/bin/pytest - name: Test-Datenbank aufräumen if: always() run: su -s /bin/bash postgres -c "psql -c \"DROP DATABASE IF EXISTS ${TEST_DB_NAME};\"" frontend-build: runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - uses: actions/checkout@v4 - name: Dependencies installieren run: npm install - name: Typecheck + Build run: npm run build