Git-Repository für bestehenden archivdms-Code initialisiert, Branch-/Commit-Konvention (feature/<ticket>-<slug>-Branches, Ticket-Prefix in Commit-Nachricht) etabliert.
123 lines
3.8 KiB
YAML
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
|