ci(scans): voorgebakken scan-image i.p.v. per-PR scanner-downloads #1150
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1150
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/scans-prebaked-image"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat
De
scans-poort (secrets + SAST, per PR) haalde bij élke pull request drie beveiligingsscanners van het net — gitleaks + trufflehog als release-tarball, semgrep uit een verse pip-venv. Gemeten ~3 minuten per run waarvan amper 19 seconden scannen (#778), plus drie kansen per run op een netstoring die niets met de repo te maken heeft. Precies het per-run-installatiewerk dat de Linux-poorten sinds #1141 al voorbakken;scans.ymlbleef er bewust buiten ("een aparte, iets delicatere stap voor een volgende keer"). Dit is die volgende keer.De scanners zitten nu voorgebakken in een eigen image
ocideck-scans:<pins>; de per-run-installatie én het net vervallen.Waarom dit mag terwijl scanners cachen bewust werd geweigerd
CHECKS.md noteerde het bezwaar tegen een
actions/cacheop de scanner-binaries: een restore verving een sha256-geverifieerde download van een beveiligingsscanner door een artefact van een eerdere run, zónder de hercontrole diecheck-toolchainde Flutter-toolchain wél geeft — "groen" zou stil iets anders kunnen gaan betekenen. Een image neemt dat op twee punten weg, en pas dán is het verdedigbaar:scans.Dockerfile).scans.ymlkrijgt de ontbrekende hercontrole terug: een eerste poortstap "Ingebakken scanner-versies == de pins" toetst fail-closed dat het image draagt wat de pins zeggen — het equivalent vancheck-toolchain. Een achtergebleven of verkeerd getagd image valt daar om vóór er iets gescand is.Vorm
ocideck-scans), niet toegevoegd aanocideck-ci— zo herbouwt het niet bij elke Flutter-bump en sleept het geen Flutter/cmake/gtk mee. Tag ís de drie pins:gl<gitleaks>-th<trufflehog>-sg<semgrep>..github/pinned-ci-versions.json(ci-image-scans.ymlleest ze metjq), niet als tweede kopie in de workflow. De*_VERSION-pins blijven inscans.ymlals verwachte waarde, duspinned_versions_manifest_testklopt onveranderd — het manifest hoeft niet te wijzigen.Eenmalige uitrolstap (alleen jij kunt dit)
Na merge vuurt
ci-image-scans.ymlen publiceert het image mitsCI_IMAGE_TOKEN/CI_IMAGE_USERzijn ingericht (zelfde als het Flutter-image). Zet het gepubliceerde package daarna op publiek, anders kanscans.ymlhet niet anoniem pullen. Tot dat moment kan eenscans-run rood staan — dat blokkeert niet (de vereiste check isstatic-gate), maar zet het package snel publiek. Wil je het waterdicht: merge eerst commit 1 (produceer-image), controleer de publicatie + zet publiek, land dan commit 2.Getoetst
grep -F:gitleaks version→8.30.1,trufflehog --version→trufflehog 3.95.9(stderr),semgrep --version→1.171.0.make ci-image-scans-publish(dry-run) levert het taggl8.30.1-th3.95.9-sg1.171.0, gelijk aan de literal inscans.yml.pinned_versions_manifest_test-invarianten met de hand nagelopen: geen*_VERSION:-regel lekte de nieuwe workflow in; de drie pins staan inscans.yml; manifest byte-onveranderd.De download/sha256/venv-stappen in de Dockerfile zijn een getrouwe port van de commando's die vandaag groen in
scans.ymldraaien; een echte amd64-buildx-build onder QEMU is niet gedraaid.