Files
msolarczekandClaude Opus 5 c8e6f30a27
CI / build-and-check (push) Canceled after 0s
CI / audit (push) Canceled after 0s
CI / sbom (push) Canceled after 0s
Basis: Certvia dev@a48c5fb als Fundament für Craftvia
Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation
und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 11:05:39 +02:00

117 lines
4.0 KiB
YAML

# CI-Pipeline (Gitea Actions — GitHub-Actions-kompatibel).
#
# WICHTIG: Braucht einen aktivierten Gitea-Actions-Runner (git.certvia.de ->
# Settings -> Actions -> Runners). Ohne registrierten Runner wird dieser Workflow
# NICHT ausgeführt (er schlägt nicht fehl, er läuft schlicht nicht an).
# Inhaltlich identisch zu .github/workflows/ci.yml (Spiegel für Nicht-Gitea-Remotes).
name: CI
on:
push:
branches: ["main", "dev", "dev-*"]
pull_request:
branches: ["main", "dev", "dev-*"]
jobs:
build-and-check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Node 22 einrichten
uses: actions/setup-node@v4
with:
node-version: "22.14.0"
# npm 11 pinnen: Das committete Lockfile wurde mit npm 11 erzeugt; node 22.14
# bringt npm 10.9.2 mit, das next@16.2.12 -> @swc/helpers anders auflöst und
# `npm ci` sonst mit "out of sync" abbricht (siehe Dockerfile).
- name: npm 11 pinnen
run: npm i -g npm@11.19.0
- name: Abhängigkeiten installieren (Lockfile bindend)
run: npm ci --include=optional --no-audit --no-fund
- name: Prisma Client generieren
# Platzhalter-URL nur fürs Laden von prisma.config.ts — keine echte DB-Verbindung.
env:
DATABASE_URL: "postgresql://build:build@localhost:5432/build?schema=public"
run: npx prisma generate
- name: Typprüfung (tsc --noEmit)
run: npx tsc --noEmit
- name: Lint
run: npm run lint
- name: Build
env:
DATABASE_URL: "postgresql://build:build@localhost:5432/build?schema=public"
run: npm run build
audit:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Node 22 einrichten
uses: actions/setup-node@v4
with:
node-version: "22.14.0"
- name: npm 11 pinnen
run: npm i -g npm@11.19.0
- name: Abhängigkeiten installieren
run: npm ci --include=optional --no-audit --no-fund
# HARTES Gate: nur Produktions-Abhängigkeiten, ab "high" bricht der Build.
# Bewusst --omit=dev, weil die bekannten High-Findings (F-12) in der
# Build-/Lint-Toolchain (devDependencies) liegen und die Auslieferung nicht
# gefährden. Der Produktionsbaum ist aktuell frei von high/critical -> grün.
- name: npm audit (Gate, prod-only, high+)
run: npm audit --omit=dev --audit-level=high
# INFORMATIV: voller Lauf inkl. devDependencies. Bricht den Build NICHT
# (continue-on-error), macht die dev-only-Befunde aber im Log sichtbar.
- name: npm audit (informativ, voller Baum)
continue-on-error: true
run: npm audit --audit-level=high
sbom:
# Optionaler Schritt: erzeugt eine Software Bill of Materials (CycloneDX) und
# legt sie als Build-Artefakt ab. Für Supply-Chain-Nachvollziehbarkeit (F-11).
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Node 22 einrichten
uses: actions/setup-node@v4
with:
node-version: "22.14.0"
- name: npm 11 pinnen
run: npm i -g npm@11.19.0
- name: Abhängigkeiten installieren
run: npm ci --include=optional --no-audit --no-fund
# Hinweis: `npm sbom` validiert den installierten Baum streng. Solange das
# Lockfile die @swc/helpers-Inkonsistenz trägt (siehe Dockerfile / Folgeänderung
# der Dependency-Lane), bricht der Schritt mit ESBOMPROBLEMS ab — daher
# continue-on-error. Alternative ohne npm-Baum-Validierung: Syft gegen das
# gebaute Image (siehe docs/DEPLOY-PROD-CONTABO.md, Abschnitt SBOM).
- name: SBOM erzeugen (CycloneDX)
continue-on-error: true
run: npm sbom --sbom-format cyclonedx --omit dev > sbom.cyclonedx.json
- name: SBOM als Artefakt ablegen
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: sbom-cyclonedx
path: sbom.cyclonedx.json