L10b Betrieb & Aufräumen: Deploy – craftvia-worker, CI-Testjob, DEPLOY.md, Certvia-Doku archiviert
- docker-compose.coolify(.prebuilt).yml: Service craftvia-worker (Target worker, Chromium, shm_size 1gb, gleiche Härtung), Craftvia-Variablen für app und worker. - Dockerfile: worker-Stage mit HOME=/home/app (Chromium-Profil für non-root); lokaler docker build der Targets runner und worker erfolgreich, PDF-Erzeugung im Image geprüft. - .env.example/.env.prod.example/.env.coolify.example: alle Craftvia-Variablen inkl. RLS, KI-Provider, PDF_CHROMIUM_PATH, OFFLINE_MAX_DAYS, API_RATE_LIMIT_*, AI_GENERATION_RETENTION_DAYS, AI_MONTHLY_TOKEN_LIMIT. - CI (.github, .gitea): Job gate mit Postgres (pgvector) und Redis als Service: migrate deploy, seed, Passwort für craftvia_app, tsc, lint, build, npm run test. - docs/craftvia/DEPLOY.md (aus den Certvia-Deploy-Docs abgeleitet): Architektur, Domains, Secrets, Worker, Migrationen, RLS-Aktivierung, Backup/Restore, KI, Rate Limits, Aufbewahrung, Smoke, Update/Rollback. build-and-push-images.sh baut craftvia-worker. - Certvia-/ISMS-Dokumente aus docs/ nach docs/_certvia-archiv/ (mit README); Verweise in README.md und Skript-Kommentaren angepasst. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+59
-7
@@ -13,8 +13,50 @@ on:
|
||||
branches: ["main", "dev", "dev-*"]
|
||||
|
||||
jobs:
|
||||
build-and-check:
|
||||
# Vollständiges Qualitäts-Gate (= `npm run gate`) gegen echte Infrastruktur:
|
||||
# Postgres 16 mit pgvector + Redis als Service-Container. Garage/S3 wird bewusst
|
||||
# weggelassen: der Storage-Adapter fällt ohne S3_* auf den Stub zurück, S3-abhängige
|
||||
# Prüfungen (test-garage-storage, Byte-Abruf in test-einsatz-sync/test-berichte-pdf)
|
||||
# überspringen sich. Ohne SMTP_HOST überspringt test-mail den echten Versand, ohne
|
||||
# ANTHROPIC_API_KEY/TRANSCRIPTION_API_KEY die Live-KI-Tests. test-berichte-pdf
|
||||
# überspringt sich, wenn im Runner-Image kein Chromium/Chrome startbar ist.
|
||||
gate:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 60
|
||||
services:
|
||||
postgres:
|
||||
image: pgvector/pgvector:0.8.0-pg16
|
||||
env:
|
||||
POSTGRES_USER: craftvia
|
||||
POSTGRES_PASSWORD: craftvia
|
||||
POSTGRES_DB: craftvia
|
||||
options: >-
|
||||
--health-cmd "pg_isready -U craftvia"
|
||||
--health-interval 5s
|
||||
--health-timeout 5s
|
||||
--health-retries 20
|
||||
redis:
|
||||
image: redis:7.4.2-alpine
|
||||
options: >-
|
||||
--health-cmd "redis-cli ping"
|
||||
--health-interval 5s
|
||||
--health-timeout 5s
|
||||
--health-retries 20
|
||||
# Nur CI-Dummywerte (keine echten Secrets). Gitea act_runner führt den Job in einem
|
||||
# Container im selben Netz wie die Services aus → Hostnamen = Service-Namen
|
||||
# (postgres/redis), NICHT localhost. Läuft der Runner im Host-Modus
|
||||
# (Label ubuntu-latest:host), Hosts auf localhost umstellen und ports: ergänzen.
|
||||
env:
|
||||
DATABASE_URL: "postgresql://craftvia:craftvia@postgres:5432/craftvia?schema=public"
|
||||
# RLS-Test (scripts/test-rls-enforcement.ts): RLS_ENFORCED bleibt aus, der Test schaltet
|
||||
# selbst scharf. RLS_TEST_REQUIRED=true macht aus dem Skip einen harten Fehler.
|
||||
RLS_DATABASE_URL: "postgresql://craftvia_app:craftvia_app_ci@postgres:5432/craftvia?schema=public"
|
||||
RLS_TEST_REQUIRED: "true"
|
||||
REDIS_URL: "redis://redis:6379"
|
||||
AUTH_SECRET: "ci-dummy-auth-secret-0000000000000000"
|
||||
AUTH_URL: "http://localhost:3000"
|
||||
APP_BASE_URL: "http://localhost:3000"
|
||||
PASSWORD_PEPPER: "0000000000000000000000000000000000000000000000000000000000000abc"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -34,11 +76,20 @@ jobs:
|
||||
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: Migrationen anwenden
|
||||
run: npx prisma migrate deploy
|
||||
|
||||
- name: Demo-Seed
|
||||
run: npx prisma db seed
|
||||
|
||||
# Die Baseline-Migration legt craftvia_app NOLOGIN an; das Passwort ist ein Betriebs-
|
||||
# Secret und wird nie migriert. Für den RLS-Test hier ein CI-Dummy-Passwort setzen
|
||||
# (über die Prisma-Config-Datasource, damit kein psql-Client im Runner nötig ist).
|
||||
- name: RLS-Rolle craftvia_app mit LOGIN versehen
|
||||
run: echo "ALTER ROLE craftvia_app WITH LOGIN PASSWORD 'craftvia_app_ci';" | npx prisma db execute --stdin
|
||||
|
||||
- name: Typprüfung (tsc --noEmit)
|
||||
run: npx tsc --noEmit
|
||||
|
||||
@@ -46,10 +97,11 @@ jobs:
|
||||
run: npm run lint
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
DATABASE_URL: "postgresql://build:build@localhost:5432/build?schema=public"
|
||||
run: npm run build
|
||||
|
||||
- name: Tests (scripts/test-*.ts)
|
||||
run: npm run test
|
||||
|
||||
audit:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -103,7 +155,7 @@ jobs:
|
||||
# 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).
|
||||
# gebaute Image (siehe docs/_certvia-archiv/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
|
||||
|
||||
Reference in New Issue
Block a user