- docker-compose.yml: explizite Build-Targets (runner/migrate) — Ursache für "npx not found" bei garage-provision war das Default-Target (letzte Stage = Garage-Image ohne Node); worker startet npm run worker:mail; Defaults craftvia - Coolify-Compose: incident-inbound-worker und sync-policy-templates entfernt, Rollen-/Bucket-/Image-Namen auf craftvia - Dockerfile: seed/ und docs/wizard-uebergabe entfernt, messages/ im Runner - npm: Name craftvia, Scripts test (scripts/run-tests.ts) und gate, ISMS-Pakete entfernt (handlebars, marked, sanitize-html, @xyflow/react, @dagrejs/dagre, html-to-image, imapflow, mailparser, exceljs, @dnd-kit/core) - .env-Beispiele, launch.json (craftvia-dev), CI-Kommentare umbenannt Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
114 lines
3.7 KiB
YAML
114 lines
3.7 KiB
YAML
# CI-Pipeline — Spiegel von .gitea/workflows/ci.yml (identischer Job-Inhalt).
|
|
# Primäres Remote ist Gitea (Gitea); 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
|