Files
MABEA/.gitea/workflows/ci.yml
T
patrickandClaude Sonnet 5 fca9ee8fd8
CI / backend-tests (push) Successful in 1m54s
CI / frontend-build (push) Successful in 17s
fix(ci): CI-Testdatenbank-Encoding + 3 echte Session-/Logikfehler behoben
Root Cause der "CI rot"-Meldung gefunden und behoben:
- CI legte Testdatenbank ohne explizites ENCODING an, erbte SQL_ASCII vom
  Runner-Postgres-Template. Umlaute in JSONB (Historie-Einträge) brachen mit
  UntranslatableCharacterError - betraf auch die Produktions-DB (separat
  gemeldet, nicht Teil dieses Commits). CI legt jetzt explizit UTF8 an.

Drei echte Bugs beim Verifizieren gegen eine isolierte Testdatenbank gefunden:
- objekte.py PATCH /objekte/{id}: Selbstbezug-Check verließ sich auf den
  DB-CHECK-Constraint statt vorab zu prüfen - ein Flush-Fehlschlag hinterlässt
  die Session im Zustand DEACTIVE, jeder folgende Request in derselben Session
  crasht mit PendingRollbackError (401 statt 404 im Test). Jetzt expliziter
  Vorab-Check.
- geraet_instanz.py: gleiches Muster bei doppelter Seriennummer - jetzt
  expliziter Vorab-Check statt UNIQUE-Constraint-Exception.
- test_lagerbewegung.py: Testbug, las objekt.standort_id NACH dem POST (durch
  geteilte Session bereits auf den neuen Wert mutiert) statt vorher.

Nebenbei (Auftrag Priorität 4): "Mindermenge genehmigen"-Button direkt im
Nachfüll-Dialog der Kontroll-Erfassung (nur für materialverantwortlicher/
leitungsverantwortlicher/administration), nutzt den bereits bestehenden
POST /fehlbestaende/{id}/mindermenge Endpunkt.

Priorität 2 (Fahrzeug-Feldnamen-Mismatch) und Priorität 3 (nur Zugfahrzeuge
wählbar) waren bereits in früheren Commits erledigt (38b8ce1, 54fc296) -
Auftragsbeschreibung war auf altem Stand.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-05 17:57:14 +02:00

76 lines
2.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
# Explizit ENCODING UTF8 TEMPLATE template0: der Runner-Host-Cluster hat
# SQL_ASCII als Default-Encoding (via template1), CREATE DATABASE ohne
# explizite Angabe erbt das - jeder Test mit Umlauten in JSONB-Feldern
# (z.B. Historie-Einträge) schlug dadurch mit UntranslatableCharacterError
# fehl (Fund 2026-09-05, betraf auch die Produktions-DB).
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} ENCODING 'UTF8' TEMPLATE template0;\""
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