1 Setup
vr6syncro edited this page 2026-07-06 20:52:37 +02:00

Setup

Einbindung als thin caller

In jedem Repo .forgejo/workflows/security.yml durch die Vorlage aus examples/security-caller.yml ersetzen. Pro Repo werden nur die with:-Werte angepasst.

name: Security Scan

on:
  schedule:
    - cron: "23 4 * * 1"   # woechentliches Safety-Net (Mo 04:23)
  push:
    branches: [main, master]
  pull_request:
  workflow_dispatch:

permissions:
  contents: read
  issues: write

jobs:
  security:
    uses: vr6syncro/ci-workflows/.forgejo/workflows/security.yml@main
    secrets: inherit
    with:
      severity: "HIGH,CRITICAL"
      auto_close: true
      notify_min_sev: "HIGH"
      notify_targets: "matrix,telegram"

Fuer das Hardened-Profil stattdessen security-hardened.yml referenzieren und bei Bedarf sast: true setzen.

Inputs

security.yml / security-hardened.yml

Input Default Zweck
severity HIGH,CRITICAL Trivy-Severities
auto_close true false = Issues nie auto-schliessen (NestRelay-Variante)
notify_min_sev HIGH HIGH | CRITICAL — Notify-Schwelle
notify_targets matrix,telegram Komma-Liste: matrix, telegram (oder einer / leer)
sast false nur Hardened: Bandit/ShellCheck/cppcheck aktivieren

promotion-gate.yml

Input Default Zweck
min_license_bytes 100 Mindestgroesse fuer LICENSE
min_doc_bytes 200 Mindestgroesse fuer README/SECURITY/CONTRIBUTING

Secrets / Vars

Via secrets: inherit (org/user-level vererbt):

  • GITHUB_TOKEN (automatisch bereitgestellt)
  • TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID
  • MATRIX_BOT_TOKEN, MATRIX_ROOM_ID
  • Variable MATRIX_HOMESERVER

Fehlt ein Kanal, wird er still uebersprungen. Secret-Werte gehoeren nie ins Repo.

Voraussetzungen

  • Forgejo >= 15 + Runner > 12.5 (reusable workflow expansion). Flotte: Forgejo 15.0.2 + Runner 12.10.2 (Stand 2026-05-31).
  • Trivy wird zur Laufzeit beschafft (apt-signed-Repo mit Retries, dann gepinntes, checksum-verifiziertes Release-Binary als Fallback). OSV-Scanner/Hadolint kommen als Binaries von GitHub Releases (nur Download, keine Action).

Self-CI

.forgejo/workflows/ci.yml laeuft bei jedem push/pull_request gegen main und validiert vor jedem @main-Rollout: YAML-Parse aller Workflows, yamllint (relaxed), die Report-jq-Regressionen (non-CVE-Vuln, committetes Secret, Clean-Scan = 0) sowie das workflow_call-Parse-Gate (kein verbotener secrets:-Block).

Versionierung / Pinning

  • @main = immer aktuellste Logik (gewollt fuer einen Security-Scanner).
  • Fuer reproduzierbare Builds einen Tag pinnen, z.B. @v2.