ci: voorgebakken Linux CI-basisimage + publiceer-route (fase 1/2) #1141

Merged
brenno merged 10 commits from ci/prebaked-image into main 2026-08-02 23:45:31 +00:00
Owner

Antwoord op "iedere keer wordt de hele Linux-omgeving vanaf scratch opgebouwd". Fase 1 van 2: introduceert een voorgebakken CI-basisimage; raakt de live-gates nog niet (die volgen in een vervolg-PR zodra het image gepubliceerd + gevalideerd is).

Waarom

linux-gate, static-gate en scans draaien elk in een kaal ubuntu:24.04 en bouwen élke run dezelfde omgeving op: apt-build-tools installeren, de officiële Flutter ophalen+uitpakken, desktop-artefacten precachen. Identiek werk, identiek resultaat — één keer bakken i.p.v. herhalen.

Wat

  • .forgejo/ci-image/Dockerfile — draagt de traag-veranderende toolchain: OS + de vaste apt-.deb-lijst + de gepinde Flutter (official stable, sha256 getoetst bij de build tegen het release-manifest) + flutter precache --linux. Bewust niet erin: pub-pakketten en de dartcv OpenCV-build — die volgen pubspec.lock en blijven op actions/cache.
  • .forgejo/workflows/ci-image.yml — bouwt+pusht naar pawprint.vigilis.online/librekat/ocideck-ci:flutter-<pin>. Op afroep én automatisch bij een wijziging aan de Dockerfile of .tool-versions. Slaat zichzelf groen over als CI_IMAGE_TOKEN ontbreekt, zodat déze PR na de merge geen rode main oplevert vóór de inrichting.
  • make ci-image-publish — betrouwbare handmatige route (buildx, cross-build naar linux/amd64) vanaf een machine met docker/colima.

Waarborgen (bewaker-relevant, expliciet)

  • Provenance ongewijzigd. De sha256-toets verhuist naar bouwtijd; check-toolchain draait onverkort in de poort op de ingebakken Flutter (kanaal stable, officiële herkomst, gelijk aan de pin). Een image met iets anders valt om op dezelfde poort die ooit het cirruslabs-image afkeurde.
  • Geen nieuwe partij. De build pult ubuntu:24.04 (Docker Hub) en Flutter (Google) — beide haalden de huidige workflows al. Het image leeft op de eigen Forgejo-registry; zelfde vertrouwensgrens als de runner en de bestaande actions/cache (zie de kop van linux-gate.yml). Geen pubspec-dep → geen SBOM-impact. De app-belofte ("only HTTP client dependency is http", "never phones home") raakt dit niet (CI, niet de app).
  • Pin-koppeling via .tool-versions → build-arg → image-tag, met auto-rebuild bij pin-bump.

Eenmalige inrichting (jij)

  1. Repo-secret CI_IMAGE_TOKEN = een Forgejo-token met write:package — of draai make ci-image-publish.
  2. Zet het gepubliceerde package op publiek (anders kunnen de gates het niet pullen).

Daarna de vervolg-PR die linux-gate/static-gate/scans omzet naar container: image: …/ocideck-ci:flutter-<pin> en de installatiestappen sloopt — dát levert de snelheidswinst.

Poortstand

Op verse origin/main gebouwd. Geen Dart-wijziging → static-gate/scans onaangetast; YAML gevalideerd (ruby), Makefile-doel dry-run correct. Kernwaardenbewaker-review loopt.

Antwoord op "iedere keer wordt de hele Linux-omgeving vanaf scratch opgebouwd". **Fase 1 van 2:** introduceert een voorgebakken CI-basisimage; raakt de live-gates nog **niet** (die volgen in een vervolg-PR zodra het image gepubliceerd + gevalideerd is). ## Waarom `linux-gate`, `static-gate` en `scans` draaien elk in een kaal `ubuntu:24.04` en bouwen élke run dezelfde omgeving op: apt-build-tools installeren, de officiële Flutter ophalen+uitpakken, desktop-artefacten precachen. Identiek werk, identiek resultaat — één keer bakken i.p.v. herhalen. ## Wat - **`.forgejo/ci-image/Dockerfile`** — draagt de *traag-veranderende* toolchain: OS + de vaste apt-`.deb`-lijst + de gepinde Flutter (official stable, **sha256 getoetst bij de build** tegen het release-manifest) + `flutter precache --linux`. Bewust **niet** erin: pub-pakketten en de dartcv OpenCV-build — die volgen `pubspec.lock` en blijven op `actions/cache`. - **`.forgejo/workflows/ci-image.yml`** — bouwt+pusht naar `pawprint.vigilis.online/librekat/ocideck-ci:flutter-<pin>`. Op afroep én automatisch bij een wijziging aan de Dockerfile of `.tool-versions`. **Slaat zichzelf groen over als `CI_IMAGE_TOKEN` ontbreekt**, zodat déze PR na de merge geen rode `main` oplevert vóór de inrichting. - **`make ci-image-publish`** — betrouwbare handmatige route (buildx, cross-build naar `linux/amd64`) vanaf een machine met docker/colima. ## Waarborgen (bewaker-relevant, expliciet) - **Provenance ongewijzigd.** De sha256-toets verhuist naar bouwtijd; `check-toolchain` draait **onverkort in de poort** op de ingebakken Flutter (kanaal `stable`, officiële herkomst, gelijk aan de pin). Een image met iets anders valt om op dezelfde poort die ooit het cirruslabs-image afkeurde. - **Geen nieuwe partij.** De build pult `ubuntu:24.04` (Docker Hub) en Flutter (Google) — beide haalden de huidige workflows al. Het image leeft op de **eigen** Forgejo-registry; zelfde vertrouwensgrens als de runner en de bestaande `actions/cache` (zie de kop van `linux-gate.yml`). Geen pubspec-dep → geen SBOM-impact. De app-belofte ("only HTTP client dependency is `http`", "never phones home") raakt dit niet (CI, niet de app). - **Pin-koppeling** via `.tool-versions` → build-arg → image-tag, met auto-rebuild bij pin-bump. ## Eenmalige inrichting (jij) 1. Repo-secret `CI_IMAGE_TOKEN` = een Forgejo-token met `write:package` — **of** draai `make ci-image-publish`. 2. Zet het gepubliceerde package op **publiek** (anders kunnen de gates het niet pullen). Daarna de vervolg-PR die `linux-gate`/`static-gate`/`scans` omzet naar `container: image: …/ocideck-ci:flutter-<pin>` en de installatiestappen sloopt — dát levert de snelheidswinst. ## Poortstand Op verse `origin/main` gebouwd. Geen Dart-wijziging → static-gate/scans onaangetast; YAML gevalideerd (ruby), Makefile-doel dry-run correct. Kernwaardenbewaker-review loopt.
brenno force-pushed ci/prebaked-image from 53cdcb7f14
Some checks are pending
scans / scans (pull_request) Successful in 3m40s
static-gate / static-gate (pull_request) Has started running
to df09cdd03d
All checks were successful
scans / scans (pull_request) Successful in 7m58s
static-gate / static-gate (pull_request) Successful in 30m22s
2026-08-02 23:05:06 +00:00
Compare
docs(checks): beschrijf static-gate/linux-gate op het voorgebakken image
All checks were successful
static-gate / static-gate (pull_request) Successful in 6m9s
scans / scans (pull_request) Successful in 7m23s
9d61dd5df1
De twee gate-secties in CHECKS.md en de linux-gate-kop beschreven nog het oude
"kaal ubuntu + Flutter-download per run"-verhaal. Nu in overeenstemming met de
code: beide draaien op het CI-image (toolchain + gepinde Flutter ingebakken),
alleen pub + dartcv blijven op actions/cache, provenance ongewijzigd
(sha256 → bouwtijd), tag = pin (fail-closed via check-toolchain).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 1c21d35bc2 into main 2026-08-02 23:45:31 +00:00
Sign in to join this conversation.
No description provided.