Public reusable Forgejo Actions workflows for vr6syncro (security scan u.a.). Library-Repo muss public sein — enthaelt KEINE Secrets, nur ${{ secrets.* }}-Referenzen.
Find a file
vr6syncro b01290e65b
All checks were successful
CI (self-validation) / validate (push) Successful in 3s
fix(ci): drop unsupported secrets: from workflow_call (fixes red phantom runs + fleet-wide reusable parse break)
Forgejo/act_runner only supports `inputs`/`outputs` under `workflow_call`,
NOT `secrets`. The secrets-block (added in 0932a7c) made security.yml and
security-hardened.yml unparseable -> preExecutionError
("workflow_call only supports keys inputs and outputs") -> a failed empty
run on EVERY push/PR/create/delete event, and broke the reusable for all
fleet callers pinned to @v2. Secrets flow via `secrets: inherit` from the
caller and are read directly as ${{ secrets.X }} in the steps, so the
declaration block is unnecessary.

- security.yml / security-hardened.yml: remove on.workflow_call.secrets
- security-hardened.yml: distinct workflow name (was dup of security.yml)
- ci.yml: parser-free regression gate that rejects workflow_call.secrets

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 20:01:59 +02:00
.forgejo/workflows fix(ci): drop unsupported secrets: from workflow_call (fixes red phantom runs + fleet-wide reusable parse break) 2026-06-04 20:01:59 +02:00
examples fix(security): notify only on finding-state-change + PR runs report-only (stop Telegram/Matrix spam) 2026-06-01 17:30:00 +02:00
README.md fix(security): notify only on finding-state-change + PR runs report-only (stop Telegram/Matrix spam) 2026-06-01 17:30:00 +02:00

ci-workflows

Zentrale, wiederverwendbare Forgejo-Actions-Workflows fuer die vr6syncro-Flotte.

⚠️ Dieses Repo ist absichtlich public. Forgejo (>= v15) unterstuetzt reusable workflows nur aus public Repos — auch auf der eigenen Instanz. Der Inhalt enthaelt keine Secrets, nur ${{ secrets.* }}-Referenzen, die beim Aufruf via secrets: inherit aus dem aufrufenden (privaten) Repo geerbt werden.

Workflows

.forgejo/workflows/security.yml — Security Scan (reusable)

Trivy-FS (HIGH/CRITICAL) + pip-audit + Node-audit → Forgejo-Issue-Upsert (stabiler Titel, Duplikat-Closer, Auto-Close bei sauberem Scan) + Telegram + Matrix.

Notify nur bei Finding-STATE-Change (kein Chat-Spam)

Der Issue-Marker enthaelt einen Fingerprint des Fund-Zustands: <!-- security-scan:v2 fp=<sha256> -->. Der Fingerprint ist der sha256 ueber die sortiert-eindeutigen Fund-Zeilen (CVE-id:package aus Trivy plus je ein Section-Flag fuer node/pip/osv/misconfig/sast). Pro Lauf:

  • Das Issue wird immer in-place ge-PATCHt (Body bleibt aktuell, inkl. neuem fp).
  • Telegram + Matrix feuern nur, wenn das Issue neu ist oder der gespeicherte fp vom neuen abweicht (Funde geaendert / eskaliert) → CHANGED=1. Ein unveraenderter Fund-Satz aktualisiert das Issue still und pingt den Chat nicht erneut.
  • pull_request-Laeufe sind report-only: kein Issue-Upsert, kein Chat, kein Close — Funde erscheinen nur im Run-Log. (Scan-Gate github.event_name != 'pull_request'.)
  • Auto-Close benachrichtigt einmalig: wenn der Resolve-Schritt >= 1 Issue schliesst, geht eine Security findings resolved"-Nachricht raus; bei nichts Offenem bleibt es still.

push + pull_request decken jede echte Code-Aenderung ab; der Schedule im Caller ist daher von taeglich auf woechentlich (Mo) reduziert (reines Safety-Net).

Die Scan-/Upsert-Logik ist abgeleitet von der canonical security.yml v2.1.0 (orgamaster); der on:/env:-Block wurde durch workflow_call-Inputs ersetzt und die Notify-Seite um das fp-Gating + PR-Report-only ergaenzt.

Inputs (alle optional, Defaults = Kanon):

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)

Secrets / Vars (via secrets: inherit, org/user-level vererbt): GITHUB_TOKEN (auto), TELEGRAM_BOT_TOKEN/_CHAT_ID, MATRIX_BOT_TOKEN/_ROOM_ID, Variable MATRIX_HOMESERVER. Fehlt ein Kanal → er wird still uebersprungen.

Verwendung (thin caller)

In jedem Repo .forgejo/workflows/security.yml durch den Caller aus examples/security-caller.yml ersetzen.

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"

Versionierung / Pinning

  • @main = immer aktuellste Logik (gewollt fuer einen Security-Scanner).
  • Fuer reproduzierbare Builds stattdessen einen Tag pinnen, z.B. @v2.
  • Voraussetzung: Forgejo >= 15 + Runner > 12.5 (reusable workflow expansion). Flotte ist auf Forgejo 15.0.2 + Runner 12.10.2 (Stand 2026-05-31).