perf(poort): de uitbrengpoort draait op de Mac-runner — 46 min naar 2 min 51 #797

Merged
brenno merged 2 commits from perf/gate-op-de-mac into main 2026-07-24 13:41:44 +00:00
Owner

De derde en laatste optie uit het onderzoek naar de trage gate — en de enige die de factor tien echt weghaalt.

Nagemeten, niet beloofd

De proefvlucht is gedraaid vóór deze PR: workflow_dispatch op deze tak, taak 665 op de Mac-runner.

container op pawprint Mac-runner
Hele gate 46 min (taak 661) 2 min 51 s (taak 665)
Statische poorten ~3 min 25 s
Testsuite 33 min 49 s (mét dekking) 2 min 20 s

Dat is ~16×. De oorzaak stond al in #796: vier fysieke kernen van een Xeon D-2123IT uit 2018, 3,8× trager per kern dan een M5 Max. Het is de machine, niet het werk.

Wat er verandert

ci.yml draait runs-on: macos in host-modus: geen container, geen tarball, geen sha256-stap, geen caches — de job gebruikt de gepinde toolchain die op die machine staat. check-toolchain draait onverkort mee en eist ook daar kanaal stable, officiële herkomst en gelijkheid met de pin. "Het is mijn eigen machine" is geen controle.

De oude containerpoort is niet weggegooid maar verhuisd naar linux-gate.yml, op workflow_dispatch, mét de toolchain- en pub-caches die daar wél zin hebben.

Wat dit kost — twee dingen, allebei echt

1. De suite draait nergens meer standaard op Linux. Dat is een gat, geen formaliteit: git 2.43 op Ubuntu 24.04 kent --end-of-options niet, en zulke verschillen vindt geen enkele Mac. Vandaar dat linux-gate.yml blijft bestaan. Druk hem in vóór een release en bij wijzigingen aan paden, subprocessen of git-aanroepen. Wie hem nooit indrukt, draait hem nooit — dat is de afweging, geen ongeluk.

2. De uitbrengpoort hangt nu aan één fysieke machine van één persoon. Staat de Mac uit, dan wacht de run: de tag landt wel, de poort komt later. Te verkiezen boven een poort die niemand afwacht, maar dit is geen serverklasse-opstelling en moet niet zo gelezen worden.

Allebei staan ze in de workflow zelf én in de docs, niet alleen hier — dit is precies het soort ding dat stil wegzakt.

Documentatie

Vier bestanden droegen de oude belofte: CHECKS.md en BUILD.md beschreven de poort als een Ubuntu-container met make check, README zei "22 minuten daar", en SBOM.md stond nog op #751 ("elke pull request en push naar main") — wat sinds #790 al niet meer klopte. Alle vier bijgewerkt, met er expliciet bij wat er níet meer draait.

Poorten

  • Mac-gate echt gedraaid: taak 665, success, 2 min 51 s.
  • make check groen (6300 toetsen, exit 0), make check-secrets groen, make sast groen (0 bevindingen over 709 bestanden).
  • DAST niet gedraaid (geen geserveerd oppervlak geraakt). Bewaker niet aangeroepen, expliciet: geen formaat, opslag, afhankelijkheid of uitgaand verkeer — wél publieke beloftes in de documentatie, en die zijn daarom in deze PR meegenomen in plaats van later.

Eén ding voor apart

make check viel vandaag twee keer om op Failed to load "...": type '_Map<String, dynamic>' is not a subtype of type 'List<dynamic>' — bij het laden, op twee verschillende testbestanden (render_page_serialisation_test, privacy_dismissal_panel_test), allebei groen bij los draaien en allebei weg na rm -rf build/test_cache. Dat is niet van deze wijziging, maar het is nu wel twee keer op één dag. Ik meld het apart als issue als je dat wilt.

De derde en laatste optie uit het onderzoek naar de trage gate — en de enige die de factor tien echt weghaalt. ## Nagemeten, niet beloofd De proefvlucht is gedraaid vóór deze PR: `workflow_dispatch` op deze tak, taak 665 op de Mac-runner. | | container op pawprint | Mac-runner | | --- | --- | --- | | Hele gate | 46 min (taak 661) | **2 min 51 s** (taak 665) | | Statische poorten | ~3 min | 25 s | | Testsuite | 33 min 49 s (mét dekking) | 2 min 20 s | Dat is ~16×. De oorzaak stond al in #796: vier fysieke kernen van een Xeon D-2123IT uit 2018, 3,8× trager per kern dan een M5 Max. Het is de machine, niet het werk. ## Wat er verandert `ci.yml` draait `runs-on: macos` in host-modus: geen container, geen tarball, geen sha256-stap, geen caches — de job gebruikt de gepinde toolchain die op die machine staat. `check-toolchain` draait onverkort mee en eist ook daar kanaal `stable`, officiële herkomst en gelijkheid met de pin. "Het is mijn eigen machine" is geen controle. De oude containerpoort is **niet weggegooid** maar verhuisd naar `linux-gate.yml`, op `workflow_dispatch`, mét de toolchain- en pub-caches die daar wél zin hebben. ## Wat dit kost — twee dingen, allebei echt **1. De suite draait nergens meer standaard op Linux.** Dat is een gat, geen formaliteit: `git` 2.43 op Ubuntu 24.04 kent `--end-of-options` niet, en zulke verschillen vindt geen enkele Mac. Vandaar dat `linux-gate.yml` blijft bestaan. Druk hem in vóór een release en bij wijzigingen aan paden, subprocessen of `git`-aanroepen. Wie hem nooit indrukt, draait hem nooit — dat is de afweging, geen ongeluk. **2. De uitbrengpoort hangt nu aan één fysieke machine van één persoon.** Staat de Mac uit, dan wacht de run: de tag landt wel, de poort komt later. Te verkiezen boven een poort die niemand afwacht, maar dit is geen serverklasse-opstelling en moet niet zo gelezen worden. Allebei staan ze in de workflow zelf én in de docs, niet alleen hier — dit is precies het soort ding dat stil wegzakt. ## Documentatie Vier bestanden droegen de oude belofte: CHECKS.md en BUILD.md beschreven de poort als een Ubuntu-container met `make check`, README zei "22 minuten daar", en SBOM.md stond nog op #751 ("elke pull request en push naar main") — wat sinds #790 al niet meer klopte. Alle vier bijgewerkt, met er expliciet bij wat er níet meer draait. ## Poorten - **Mac-gate echt gedraaid**: taak 665, `success`, 2 min 51 s. - `make check` groen (6300 toetsen, exit 0), `make check-secrets` groen, `make sast` groen (0 bevindingen over 709 bestanden). - DAST niet gedraaid (geen geserveerd oppervlak geraakt). Bewaker niet aangeroepen, expliciet: geen formaat, opslag, afhankelijkheid of uitgaand verkeer — wél publieke beloftes in de documentatie, en die zijn daarom in deze PR meegenomen in plaats van later. ## Eén ding voor apart `make check` viel vandaag twee keer om op `Failed to load "...": type '_Map<String, dynamic>' is not a subtype of type 'List<dynamic>'` — bij het *laden*, op twee verschillende testbestanden (`render_page_serialisation_test`, `privacy_dismissal_panel_test`), allebei groen bij los draaien en allebei weg na `rm -rf build/test_cache`. Dat is niet van deze wijziging, maar het is nu wel twee keer op één dag. Ik meld het apart als issue als je dat wilt.
Nagemeten (#796) was de wachttijd niet de stappen maar de machine: dezelfde
poort deed 46 minuten in een container op de server tegen 2,5 minuut op de Mac
— vier fysieke kernen van een Xeon uit 2018 tegen een M5 Max, 3,8x trager per
kern. Toolchaincache, dekking eruit en capaciteit omlaag haalden er samen een
kwartier af; dit haalt er een orde van grootte af.

Host-modus, dus de job draait direct op de machine met de toolchain die daar
staat: niets te installeren, niets te cachen. `check-toolchain` draait
onverkort mee en eist ook daar kanaal stable, officiele herkomst en gelijkheid
met de pin — "het is mijn eigen machine" is geen controle.

Twee dingen die dit kost, allebei in de workflow zelf opgeschreven omdat ze
anders wegzakken:

De suite draait nergens meer standaard op Linux. Dat is een echt gat — git 2.43
op Ubuntu 24.04 kent --end-of-options niet, en zulke verschillen vindt geen
enkele Mac. De Linux-poort is daarom niet weggegooid maar verhuisd naar
linux-gate.yml op afroep, mét de toolchain- en pub-caches die daar wel zin
hebben. Draai hem voor een release en bij wijzigingen aan paden, subprocessen
of git-aanroepen.

En de uitbrengpoort hangt nu aan een fysieke machine van een persoon. Staat de
Mac uit, dan wacht de run: de tag landt wel, de poort komt later. Te verkiezen
boven een poort die niemand afwacht, maar het is geen serverklasse-opstelling
en moet niet zo gelezen worden.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Vier bestanden droegen de oude belofte. CHECKS.md en BUILD.md beschreven de
poort nog als een Ubuntu-container met make check; README zei "22 minuten daar";
en SBOM.md stond nog op #751 — "elke pull request en push naar main", wat sinds
#790 al niet meer klopte.

Overal staat er nu bij wat er níet meer draait: de dekkingsvloeren (alleen
lokaal, #796) en de suite op Linux (alleen op afroep). Dat is het soort ding dat
stil wegzakt, dus het staat er expliciet in plaats van weggelaten.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 354ebfa174 into main 2026-07-24 13:41:44 +00:00
Sign in to join this conversation.
No description provided.