# FDN-07: CI-Pipeline & Testharness # # WICHTIG: Dieser Workflow ist Gitea-Actions-Syntax (kompatibel zu GitHub # Actions). Er wird erst aktiv, sobald dieses Repository zu einer Gitea- # Instanz mit aktivierten Actions gepusht wird und dort ein Runner # registriert ist. Aktuell (Stand FDN-07) existiert noch KEIN Gitea-Remote # fuer archivdms - das Repo ist nur lokal mit `git init` angelegt. Bis zum # Push/Runner-Setup laeuft diese Datei nicht, sie liegt bewusst schon bereit. # # Jobs: # - backend-lint-test: go vet, go test ./... -cover gegen eine frische # Postgres-Testdatenbank (Service-Container, pro # Lauf neu erzeugt) # - frontend-lint-test-build: npm ci, ESLint (next lint), tsc --noEmit, # next build (Artefakt-Reproduzierbarkeit ueber # Makefile-Target build-web) # # Roter Test/Lint bricht den jeweiligen Job ab (kein `continue-on-error`) # und blockiert damit laut Branch-Protection-Regel (separat in Gitea zu # konfigurieren: "Require status checks to pass before merging") den Merge. name: CI on: push: pull_request: env: GO_VERSION: "1.26" NODE_VERSION: "22" jobs: backend-lint-test: name: Backend (go vet, go test -cover) runs-on: ubuntu-latest services: postgres: image: postgres:16 env: POSTGRES_USER: archivdms_test POSTGRES_PASSWORD: archivdms_test POSTGRES_DB: archivdms_test ports: - 5432:5432 options: >- --health-cmd "pg_isready -U archivdms_test" --health-interval 5s --health-timeout 5s --health-retries 10 env: # Testdatenbank pro Lauf frisch (Service-Container startet leer und # wird am Ende des Jobs verworfen). Verbindungsdaten ausschliesslich # ueber Umgebungsvariablen, keine Zugangsdaten im Code. ARCHIVDMS_TEST_DATABASE_URL: postgres://archivdms_test:archivdms_test@localhost:5432/archivdms_test?sslmode=disable steps: - name: Code auschecken uses: actions/checkout@v4 - name: Go einrichten uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: true - name: go vet run: go vet ./... - name: go test mit Testabdeckung run: go test ./... -cover -coverprofile=coverage.out - name: Testabdeckung ausweisen run: go tool cover -func=coverage.out - name: Build-Artefakt reproduzierbar erzeugen run: make build - name: Backend-Binary als Artefakt hochladen uses: actions/upload-artifact@v4 with: name: archivdms-backend path: bin/archivdms frontend-lint-test-build: name: Frontend (ESLint, tsc, next build) runs-on: ubuntu-latest steps: - name: Code auschecken uses: actions/checkout@v4 - name: Node einrichten uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: npm - name: Abhaengigkeiten installieren # Fallback auf `npm install`, falls package-lock.json fehlt oder # nicht synchron ist (siehe Stolperstein in update.sh) - `npm ci` # bricht in dem Fall hart ab, waehrend `npm install` den Lock # aktualisiert und weiterlaeuft. run: npm ci || npm install - name: ESLint run: npm run lint - name: TypeScript-Typpruefung run: npx tsc --noEmit - name: next build (Artefakt reproduzierbar erzeugen) run: make build-web env: NEXT_PUBLIC_API_URL: http://localhost:8080 - name: Build-Ausgabe als Artefakt hochladen uses: actions/upload-artifact@v4 with: name: archivdms-frontend path: .next/standalone