Security Scan @v2: schlägt auf snapforge bei pull_request-Event fehl, workflow_dispatch auf identischem Commit grün #7

Closed
opened 2026-06-12 07:32:09 +02:00 by vr6syncro · 1 comment
Owner

Befund (2026-06-12)

Der zentrale Security-Scan (vr6syncro/ci-workflows/.forgejo/workflows/security.yml@v2, Thin-Caller in snapforge) schlägt auf jedem snapforge-PR fehl, ist aber auf demselben Commit per workflow_dispatch grün:

Run Event SHA Status
snapforge 457 pull_request (PR #82) 800447a ❌ failure (1m15s)
snapforge 460 pull_request (PR #84) a9d6e96 ❌ failure (2m21s)
snapforge 462 pull_request (PR #84) 7dc2a8d ❌ failure (3m2s)
snapforge 464 workflow_dispatch 7dc2a8d ✅ success (2m53s)
snapforge 465 workflow_dispatch 7dc2a8d ✅ success (1m10s)
  • Push-/Schedule-Runs auf main sind ebenfalls grün (z.B. Run 459, täglicher Cron).
  • PR #82 ändert nur web/JS + proxy.php, PR #84 nur Go — beide ohne Dependency-Änderungen; identisches Fail-Muster ⇒ kein Repo-Inhalt-Problem.
  • ZeitOMeter-PRs (gleicher Thin-Caller-Stack) liefen am 2026-06-11/12 grün.

⇒ Kein Sicherheitsbefund, sondern ein pull_request-Event-spezifisches Problem im zentralen Workflow — Verdacht: PR-Token-Permissions (issues:write/PR-Kommentar bei auto_close/notify), Checkout der Diff-Basis o.ä.

Diagnose-Hürde

Forgejo 15.0.2 gibt Logs abgeschlossener Jobs nicht heraus (bekannter Quirk, „attempt 0: resource does not exist"). Live-Mitschnitt via ci-logreader hat beim Dispatch-Run nur die Statuszeile geliefert (Run war grün, daher unergiebig). Zum Log-Fang eines ROTEN Laufs: nächsten snapforge-PR-Push abpassen und forgejo-logs.sh vr6syncro snapforge <run> 0 im Loop laufen lassen.

Auswirkung

Snapforge-PR-Pipelines zeigen dauerhaft ❌ obwohl CI (Build/Test) grün ist — Merge-Gates/Übersicht verlieren Aussagekraft.

Aufgefallen bei TASK-0015 (snapforge PRs #82/#84); Merges wurden nach Dispatch-Gegenprobe auf identischem Commit nicht blockiert.

## Befund (2026-06-12) Der zentrale Security-Scan (`vr6syncro/ci-workflows/.forgejo/workflows/security.yml@v2`, Thin-Caller in snapforge) schlägt auf **jedem snapforge-PR** fehl, ist aber auf **demselben Commit** per `workflow_dispatch` grün: | Run | Event | SHA | Status | |---|---|---|---| | snapforge [457](https://forgejo.diefamiliekramer.de/vr6syncro/snapforge/actions/runs/457) | pull_request (PR #82) | 800447a | ❌ failure (1m15s) | | snapforge [460](https://forgejo.diefamiliekramer.de/vr6syncro/snapforge/actions/runs/460) | pull_request (PR #84) | a9d6e96 | ❌ failure (2m21s) | | snapforge [462](https://forgejo.diefamiliekramer.de/vr6syncro/snapforge/actions/runs/462) | pull_request (PR #84) | 7dc2a8d | ❌ failure (3m2s) | | snapforge [464](https://forgejo.diefamiliekramer.de/vr6syncro/snapforge/actions/runs/464) | **workflow_dispatch** | **7dc2a8d** | ✅ success (2m53s) | | snapforge [465](https://forgejo.diefamiliekramer.de/vr6syncro/snapforge/actions/runs/465) | **workflow_dispatch** | **7dc2a8d** | ✅ success (1m10s) | - Push-/Schedule-Runs auf main sind ebenfalls grün (z.B. Run 459, täglicher Cron). - PR #82 ändert **nur** web/JS + proxy.php, PR #84 nur Go — beide ohne Dependency-Änderungen; identisches Fail-Muster ⇒ kein Repo-Inhalt-Problem. - ZeitOMeter-PRs (gleicher Thin-Caller-Stack) liefen am 2026-06-11/12 grün. ⇒ Kein Sicherheitsbefund, sondern ein **pull_request-Event-spezifisches Problem im zentralen Workflow** — Verdacht: PR-Token-Permissions (issues:write/PR-Kommentar bei `auto_close`/`notify`), Checkout der Diff-Basis o.ä. ## Diagnose-Hürde Forgejo 15.0.2 gibt Logs abgeschlossener Jobs nicht heraus (bekannter Quirk, „attempt 0: resource does not exist"). Live-Mitschnitt via ci-logreader hat beim Dispatch-Run nur die Statuszeile geliefert (Run war grün, daher unergiebig). Zum Log-Fang eines ROTEN Laufs: nächsten snapforge-PR-Push abpassen und `forgejo-logs.sh vr6syncro snapforge <run> 0` im Loop laufen lassen. ## Auswirkung Snapforge-PR-Pipelines zeigen dauerhaft ❌ obwohl CI (Build/Test) grün ist — Merge-Gates/Übersicht verlieren Aussagekraft. _Aufgefallen bei TASK-0015 (snapforge PRs #82/#84); Merges wurden nach Dispatch-Gegenprobe auf identischem Commit nicht blockiert._
Author
Owner

Korrektur — Befund war falsch zugeordnet, Security Scan ist unschuldig

Nach Workflow-Filter-Abgleich über die Actions-Seite (?workflow=security.yml vs ?workflow=ci.yml):

  • security.yml: Runs 461, 463, 464, 465, 469, 471 — alle grün, auch auf pull_request-Events. Meine Tabelle oben hatte die Run-Paare falsch zugeordnet.
  • ci.yml (build-Job): Runs 457, 460, 462, 468 (main-Push!), 470 — alle rot.

Echte Root Cause: snapforge internal/audit TestPrune_MaxAge nutzte hartkodierte Datums-Dateinamen (2026-05-13.log als 30d-Cutoff-Überlebender). Am 2026-06-12 ist die Fixture über den Cutoff gealtert → go test -race ./... im build-Job rot auf jedem Run, unabhängig vom PR-Inhalt. Lokal auf pristine origin/main reproduziert (removed = 3, want 2).

Fix: snapforge PR #86 — Fixtures relativ zu time.Now().

Am zentralen Security-Workflow ist nichts zu tun → Issue wird geschlossen. Sorry für den Fehlalarm; Lehre: Forgejo zeigt in der Run-Liste den Commit-Titel statt des Workflow-Namens — Zuordnung immer über den ?workflow=-Filter prüfen.

## Korrektur — Befund war falsch zugeordnet, Security Scan ist unschuldig Nach Workflow-Filter-Abgleich über die Actions-Seite (`?workflow=security.yml` vs `?workflow=ci.yml`): - **security.yml**: Runs 461, 463, 464, 465, 469, 471 — **alle grün**, auch auf pull_request-Events. Meine Tabelle oben hatte die Run-Paare falsch zugeordnet. - **ci.yml (build-Job)**: Runs 457, 460, 462, **468 (main-Push!)**, 470 — **alle rot**. **Echte Root Cause:** snapforge `internal/audit TestPrune_MaxAge` nutzte hartkodierte Datums-Dateinamen (`2026-05-13.log` als 30d-Cutoff-Überlebender). Am **2026-06-12** ist die Fixture über den Cutoff gealtert → `go test -race ./...` im build-Job rot auf jedem Run, unabhängig vom PR-Inhalt. Lokal auf pristine `origin/main` reproduziert (`removed = 3, want 2`). **Fix:** snapforge [PR #86](https://forgejo.diefamiliekramer.de/vr6syncro/snapforge/pulls/86) — Fixtures relativ zu `time.Now()`. Am zentralen Security-Workflow ist nichts zu tun → Issue wird geschlossen. Sorry für den Fehlalarm; Lehre: Forgejo zeigt in der Run-Liste den Commit-Titel statt des Workflow-Namens — Zuordnung immer über den `?workflow=`-Filter prüfen.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
vr6syncro/ci-workflows#7
No description provided.