Files
craftvia/.github/workflows/ci.yml
T
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

114 lines
3.7 KiB
YAML

# CI-Pipeline — Spiegel von .gitea/workflows/ci.yml (identischer Job-Inhalt).
# Primäres Remote ist Gitea (git.certvia.de); diese Datei greift nur, falls das
# Repo (auch) auf einem GitHub-Actions-Remote gespiegelt wird.
#
# WICHTIG: Braucht einen aktivierten Actions-Runner. Ohne Runner läuft der
# Workflow nicht an (kein Fehlschlag, nur kein Lauf).
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
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.
- 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).
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