ci: breid de dartcv4+apt-caches uit naar de per-PR-poorten (static-gate, scans) #1140

Merged
brenno merged 2 commits from ci/per-pr-gate-cache into main 2026-08-02 20:34:37 +00:00
Owner

Vervolg op #1139. Breidt de per-PR-poortcaches uit naar de twee poorten die bij élke PR draaien — de echte flessenhals vóór een merge, want de trage Linux-runner is er maar één en main-poorten (linux-gate) hoefden er al niet meer op te wachten sinds hun caches.

Wat

static-gate.yml (de zwaarste per-PR-poort). make check-static roept dart run tool/… aan, en élke zo'n aanroep laat de dartcv4-hook op een verse checkout ~1 GB OpenCV compileren — ~20-30 min op deze runner. Twee caches erbij, met dezelfde sleutels als linux-gate zodat één cache beide poorten bedient:

  • apt-build-tools (/var/cache/apt/archives, apt-linux-2404-buildtools-v1) — met node-eerst-splitsing + Keep-Downloaded-Packages;
  • dartcv4 OpenCV-build (.dart_tool/hooks_runner + build/native_assets, dartcv-linux-${{ hashFiles('pubspec.lock') }}).

scans.yml (secret/SAST). Alleen de apt-cache, met een eigen sleutel (apt-linux-2404-scans-v1) omdat de pakketlijst lichter is (geen cmake/gtk). Geen dartcv4-cache — scans bouwt geen Flutter/OpenCV.

Bewust niet (transparant)

De scanner-binaries (gitleaks/trufflehog) en de semgrep-venv worden in scans.yml nog niet gecachet. De venv-pip is de grootste resterende scans-kost, maar het cachen ervan raakt de gepinde-download-en-verificatie-stap van een beveiligingsworkflow — dat is een aparte, iets delicatere PR. Genoteerd in de commit i.p.v. stil gelaten.

Waarborgen

Beide cachestappen op continue-on-error: valt de cache-API weg, dan draait de stap gewoon en blijft de poort de poort. De caches vervangen geen controle — de dartcv4-hook is inhoud-geadresseerd op zijn inputs en herbouwt bij afwijking; de apt-.deb's zijn een vaste lijst op een vast image. Vertrouwensgrens ongewijzigd: de cache wordt door onze eigen jobs op onze eigen runner geschreven (zie de kop van linux-gate.yml).

Raakt geen formaat/opslag/dependency/uitgaand-verkeer/belofte — puur CI-versnelling, dus geen bewaker-ronde nodig. YAML gevalideerd (ruby).

Vervolg op #1139. **Breidt de per-PR-poortcaches uit naar de twee poorten die bij élke PR draaien** — de echte flessenhals vóór een merge, want de trage Linux-runner is er maar één en `main`-poorten (linux-gate) hoefden er al niet meer op te wachten sinds hun caches. ## Wat **`static-gate.yml` (de zwaarste per-PR-poort).** `make check-static` roept `dart run tool/…` aan, en élke zo'n aanroep laat de dartcv4-hook op een verse checkout ~1 GB OpenCV compileren — ~20-30 min op deze runner. Twee caches erbij, met **dezelfde sleutels als linux-gate** zodat één cache beide poorten bedient: - apt-build-tools (`/var/cache/apt/archives`, `apt-linux-2404-buildtools-v1`) — met node-eerst-splitsing + `Keep-Downloaded-Packages`; - dartcv4 OpenCV-build (`.dart_tool/hooks_runner` + `build/native_assets`, `dartcv-linux-${{ hashFiles('pubspec.lock') }}`). **`scans.yml` (secret/SAST).** Alleen de apt-cache, met een **eigen** sleutel (`apt-linux-2404-scans-v1`) omdat de pakketlijst lichter is (geen cmake/gtk). Geen dartcv4-cache — scans bouwt geen Flutter/OpenCV. ## Bewust niet (transparant) De scanner-binaries (gitleaks/trufflehog) en de **semgrep-venv** worden in `scans.yml` nog niet gecachet. De venv-pip is de grootste resterende scans-kost, maar het cachen ervan raakt de gepinde-download-en-verificatie-stap van een beveiligingsworkflow — dat is een aparte, iets delicatere PR. Genoteerd in de commit i.p.v. stil gelaten. ## Waarborgen Beide cachestappen op `continue-on-error`: valt de cache-API weg, dan draait de stap gewoon en blijft de poort de poort. De caches vervangen **geen** controle — de dartcv4-hook is inhoud-geadresseerd op zijn inputs en herbouwt bij afwijking; de apt-.deb's zijn een vaste lijst op een vast image. Vertrouwensgrens ongewijzigd: de cache wordt door onze eigen jobs op onze eigen runner geschreven (zie de kop van `linux-gate.yml`). Raakt geen formaat/opslag/dependency/uitgaand-verkeer/belofte — puur CI-versnelling, dus geen bewaker-ronde nodig. YAML gevalideerd (ruby).
De statische poort draait bij élke PR en is de echte flessenhals vóór een
merge: `make check-static` roept `dart run tool/…` aan, en élke zo'n aanroep
laat de native-assets-hook van dartcv4 op een verse checkout ~1 GB OpenCV
compileren — veruit de duurste stap, ~20-30 min op de trage Linux-runner.

Neem daarom dezelfde twee caches over die linux-gate al heeft, met dezelfde
sleutels zodat één cache beide poorten bedient:
- de apt-build-tools (`/var/cache/apt/archives`, sleutel
  `apt-linux-2404-buildtools-v1`), met node-eerst-splitsing zodat actions/cache
  kan draaien vóór de zware toolchain en `Keep-Downloaded-Packages` de .deb's
  bewaart;
- de dartcv4 OpenCV-build (`.dart_tool/hooks_runner` + `build/native_assets`,
  sleutel `dartcv-linux-${{ hashFiles('pubspec.lock') }}`).

Beide op `continue-on-error`: valt de cache-API weg, dan draait de stap gewoon
en blijft de poort de poort. De cache vervangt geen controle — de hook is
inhoud-geadresseerd op zijn inputs en herbouwt bij afwijking.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ci: cache de apt-tools in de secret/SAST-scanpoort per PR
All checks were successful
scans / scans (pull_request) Successful in 6m12s
static-gate / static-gate (pull_request) Successful in 34m18s
45a892094e
Dezelfde node-eerst-splitsing en apt-cache als de andere per-PR-poorten, maar
met een eigen sleutel (`apt-linux-2404-scans-v1`) omdat deze poort een lichtere
pakketlijst heeft: geen cmake/gtk, alleen de scanner-randvoorwaarden. Geen
dartcv4-cache — scans bouwt geen Flutter/OpenCV. De scanner-binaries en de
semgrep-venv worden hier bewust nog niet gecachet; dat is een aparte, iets
delicatere stap (gepinde download + verificatie) voor een volgende keer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 03d90ff4d7 into main 2026-08-02 20:34:37 +00:00
Sign in to join this conversation.
No description provided.