# CI-Pipeline (Gitea Actions — GitHub-Actions-kompatibel). # # WICHTIG: Braucht einen aktivierten Gitea-Actions-Runner (Gitea -> # 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