Files
archivdms/.gitea/workflows/ci.yml
T
patrick 9a24ea29e1 FDN-01: repository & projektgerüst
Git-Repository für bestehenden archivdms-Code initialisiert, Branch-/Commit-Konvention (feature/<ticket>-<slug>-Branches, Ticket-Prefix in Commit-Nachricht) etabliert.
2026-08-11 21:27:53 +02:00

123 lines
3.8 KiB
YAML

# 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