De uitbrengpoort remt de release niet, en wat live staat hoort bij geen enkele release #1893

Closed
opened 2026-08-31 13:38:36 +00:00 by brenno · 0 comments
Owner

Twee losse waarnemingen aan het eind van de keten, met dezelfde oorzaak: de
poort en het uitleveren zijn niet aan elkaar geknoopt.

1. De uitbrengpoort remt de release niet

.forgejo/workflows/ci.yml (de volle suite, make check-no-coverage op de
Mac-runner) en .forgejo/workflows/release.yml (bouwen, publiceren,
ondertekenen, live zetten) vuren allebei onafhankelijk op push: tags: ['v*']. release.yml heeft geen needs naar ci.yml, wacht niet op een
status, en kijkt nergens of de poort groen is.

Valt ci / gate om op een tag, dan bouwt en publiceert release.yml gewoon
door. De kop van ci.yml erkent de helft hiervan —

valt hij op een tag om, dan staat het probleem al op main

— maar dat is een argument over waar het defect vandaan komt, niet over of het
uitgeleverd moet worden. Op de laatste vier tags (v0.4.6v0.4.9) stond ci / gate telkens groen (12–18 min), dus het heeft nog niet gebeten. Het is een
open deur, geen geleden schade.

2. Wat live staat, hoort bij geen enkele release

https://ocideck.librekat.nl/version.json:

{"app_name":"ocideck","version":"0.4.10","build_number":"24", ...}

main.dart.js draagt Last-Modified: Tue, 25 Aug 2026 23:35:26 GMT. De laatste
tag is v0.4.9 van 23-08-2026; 0.4.10+24 is de onuitgebrachte
ontwikkelversie uit pubspec.yaml. De publieke demo draait dus een build die bij
geen tag, geen release, geen SHA256SUMS-in-een-release en geen ondertekend
artefact hoort.

Dat is deels bewust: deploy_web.sh is een handmatige route (make deploy-web),
en de deploy-web-job in release.yml slaat zichzelf over zolang
DEPLOY_SSH_KEY/DEPLOY_KNOWN_HOSTS niet gezet zijn — dat staat er ook zo in.
Het gevolg is alleen dat de gegate route uit staat en de ongegate route de
echte is. deploy_web.sh doet zelf netjes werk (hij waarschuwt bij een vuile
werkkopie, drukt git describe af, hertoetst SHA256SUMS live), maar niets
daarvan is een poort en niets ervan is achteraf terug te vinden: de bundel zelf
draagt geen commit-aanduiding, en version.json geeft 0.4.10+24 — een waarde
die ~200 commits delen.

Voor een project dat reproduceerbare webbundels heeft gebouwd (#1027/#1033) is
dat de ontbrekende helft: reproduceerbaarheid is waardeloos als de invoer niet
te benoemen is.

Voorstel

  1. release.yml laten wachten op de poort. Simpelste vorm: één extra job
    vooraan die de commitstatus van ci / gate op deze tag pollt en faalt als
    die niet groen wordt; alle bouwjobs krijgen die als needs. Alternatief:
    de poortstap ín release.yml als eerste job, en ci.yml op een tag laten
    vervallen — één keer draaien in plaats van twee.
  2. Een commit-aanduiding in de webbundel opnemen (git describe in
    version.json, of een build-info.json naast SHA256SUMS), zodat "welke
    commit staat er live" beantwoordbaar is. deploy_web.sh berekent hem al.
  3. Kiezen wat ocideck.librekat.nl is: een rollende demo van main (prima —
    maar zeg het, en zet er de commit bij) of de laatste release (dan hoort de
    deploy in de releaseketen en horen de secrets gezet te worden). Nu is het
    allebei half.

Gevonden bij een kritische review van het kwaliteitsbewakingssysteem, 31-08-2026.

Twee losse waarnemingen aan het eind van de keten, met dezelfde oorzaak: de poort en het uitleveren zijn niet aan elkaar geknoopt. ## 1. De uitbrengpoort remt de release niet `.forgejo/workflows/ci.yml` (de volle suite, `make check-no-coverage` op de Mac-runner) en `.forgejo/workflows/release.yml` (bouwen, publiceren, ondertekenen, live zetten) vuren **allebei onafhankelijk** op `push: tags: ['v*']`. `release.yml` heeft geen `needs` naar `ci.yml`, wacht niet op een status, en kijkt nergens of de poort groen is. Valt `ci / gate` om op een tag, dan bouwt en publiceert `release.yml` gewoon door. De kop van `ci.yml` erkent de helft hiervan — > valt hij op een tag om, dan staat het probleem al op main — maar dat is een argument over waar het defect vandaan komt, niet over of het uitgeleverd moet worden. Op de laatste vier tags (`v0.4.6`–`v0.4.9`) stond `ci / gate` telkens groen (12–18 min), dus het heeft nog niet gebeten. Het is een open deur, geen geleden schade. ## 2. Wat live staat, hoort bij geen enkele release `https://ocideck.librekat.nl/version.json`: ```json {"app_name":"ocideck","version":"0.4.10","build_number":"24", ...} ``` `main.dart.js` draagt `Last-Modified: Tue, 25 Aug 2026 23:35:26 GMT`. De laatste tag is **`v0.4.9` van 23-08-2026**; `0.4.10+24` is de onuitgebrachte ontwikkelversie uit `pubspec.yaml`. De publieke demo draait dus een build die bij geen tag, geen release, geen SHA256SUMS-in-een-release en geen ondertekend artefact hoort. Dat is deels bewust: `deploy_web.sh` is een handmatige route (`make deploy-web`), en de `deploy-web`-job in `release.yml` slaat zichzelf over zolang `DEPLOY_SSH_KEY`/`DEPLOY_KNOWN_HOSTS` niet gezet zijn — dat staat er ook zo in. Het gevolg is alleen dat de gegate route uit staat en de ongegate route de echte is. `deploy_web.sh` doet zelf netjes werk (hij waarschuwt bij een vuile werkkopie, drukt `git describe` af, hertoetst `SHA256SUMS` live), maar niets daarvan is een poort en niets ervan is achteraf terug te vinden: de bundel zelf draagt geen commit-aanduiding, en `version.json` geeft `0.4.10+24` — een waarde die ~200 commits delen. Voor een project dat reproduceerbare webbundels heeft gebouwd (#1027/#1033) is dat de ontbrekende helft: reproduceerbaarheid is waardeloos als de invoer niet te benoemen is. ## Voorstel 1. `release.yml` laten wachten op de poort. Simpelste vorm: één extra job vooraan die de commitstatus van `ci / gate` op deze tag pollt en faalt als die niet groen wordt; alle bouwjobs krijgen die als `needs`. Alternatief: de poortstap ín `release.yml` als eerste job, en `ci.yml` op een tag laten vervallen — één keer draaien in plaats van twee. 2. Een commit-aanduiding in de webbundel opnemen (`git describe` in `version.json`, of een `build-info.json` naast `SHA256SUMS`), zodat "welke commit staat er live" beantwoordbaar is. `deploy_web.sh` berekent hem al. 3. Kiezen wat `ocideck.librekat.nl` is: een rollende demo van `main` (prima — maar zeg het, en zet er de commit bij) of de laatste release (dan hoort de deploy in de releaseketen en horen de secrets gezet te worden). Nu is het allebei half. _Gevonden bij een kritische review van het kwaliteitsbewakingssysteem, 31-08-2026._
brenno 2026-08-31 15:46:58 +00:00
Sign in to join this conversation.
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
LibreKAT/Ocideck#1893
No description provided.