Skip to content

chore(ci): de berichtenbox-pin komt als PR in plaats van als melding - #326

Merged
ericwout-overheid merged 5 commits into
mainfrom
chore/proeftuin-pin-pr
Sep 16, 2026
Merged

ericwout-overheid merged 5 commits into
mainfrom
chore/proeftuin-pin-pr

Conversation

@ericwout-overheid

@ericwout-overheid ericwout-overheid commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Waarom

De pin van de berichtenbox (MinBZK/moza-poc) in compose.yaml werd bijgehouden door Dependabot, met een melding op openstaande PR's als vangnet. Beide helften werken niet meer zoals bedoeld.

Dependabot is structureel geblokkeerd. Uit de joblog van vandaag (runs 35069928159 en 35077434391):

INFO Checking if minbzk/moza-poc latest needs updating
INFO Pull request #271 already exists for minbzk/moza-poc with latest version latest

De job-definitie van diezelfde run draagt "existing-pull-requests":[{"pr-number":271,"dependencies":[{"dependency-name":"minbzk/moza-poc","dependency-version":"latest",...}]}] met "ignore-conditions":[]. PR #271 is op 3 september gesloten zonder merge (de bump ging via #276). Omdat de "versie" van dit image altijd latest heet, matcht die vastlegging elke volgende bump. @dependabot recreate antwoordt dat de branch verwijderd is, de knop "Check for updates" loopt op hetzelfde vast, er is geen ignore-conditie om op te heffen, en een PR is niet te verwijderen.

De melding stond in de weg. Hun main loopt door, dus hij verscheen binnen enkele uren op élke openstaande PR — deze week op vijf tegelijk, ook op PR's die niets met de demo te maken hebben.

Wat er verandert

  • Nieuw .github/workflows/proeftuin-pin.yml (werkdagen 23 14 * * 1-5 + workflow_dispatch) en .github/scripts/proeftuin-pin-pr.sh: bij verouderd één PR op chore/proeftuin-pin, elke run opnieuw op de huidige stand; bij ok sluit die PR zichzelf en gaat de branch weg; bij preview/ontbreekt/oncontroleerbaar gebeurt er niets en blijft een openstaande PR staan; pin-onvindbaar/bron-weg/geen-pin maken de run rood.
  • pin-consistency.yml verliest de comment-stap, de melding-opbouw en pull-requests: write; het statusoordeel blijft ongewijzigd. deploy.yml geeft checks-pins daarmee alleen nog contents: read.
  • dependabot.yml negeert minbzk/moza-poc expliciet, met de reden erbij.
  • wijzigingsfilter.sh deelt de nieuwe workflow in bij GEEN_PREVIEW_WORKFLOWS.
  • Documentatie bij: compose.yaml, docs/ontwikkelen.md, demo/environment/zad-demo/README.md, CLAUDE.md, plus docs/plans/2026-09-16-proeftuin-pin-als-pr.md.

Na de review

/review-pr met vier reviewers vond drie fouten, die hier zijn opgelost:

  • De workflow_dispatch miste een branch-guard. Vanaf een feature branch zou de force-push die hele branch op chore/proeftuin-pin zetten en als PR naar main aanbieden. fuzz-base-image.yml dekte dat af; bij het overnemen van de gedeelde functie bleef de guard eromheen liggen.
  • grep -c … || true faalde open. Exitcode 2 ("kon niet zoeken") ging als lege telling door, waarna de toets op precies één image-regel werd overgeslagen — juist wanneer er niets gemeten was.
  • De vervanging sloeg de regel plat. Inspringing, aanhalingstekens en een toelichting achter de pin gingen verloren; een geciteerde regel brak de bump zelfs hard, terwijl proeftuin-image.sh die vorm ondersteunt. Alleen de referentie zelf wordt nu vervangen.

Verder naar aanleiding van de review: oncontroleerbaar maakt de geplande run rood (op een PR blijft het een waarschuwing), het opruimen van de pin-branch hangt niet meer aan een open PR, de aangeboden regel moet naar hetzelfde image wijzen als de pin die er staat, en een lege of afgekapte commit-sha uit de GitHub-API levert oncontroleerbaar in plaats van het geruststellende ontbreekt.

Op jouw aanwijzing géén melding meer op PR's, ook niet bij preview. Het restrisico staat in het plan: wie een preview-pin zet ziet de waarschuwing alleen in de job-log.

Verificatie

  • test-proeftuin-pin.sh (nieuw, 139 asserties) dekt het script dat de acht statussen bepaalt — het stuurt zowel de PR-blokkade als deze workflow aan en had geen enkele test. Inclusief een contracttest die de aangeboden regel langs regel_is_welgevormd haalt, zodat drift tussen de twee scripts opvalt.
  • test-pin-pr-teststubs.sh (nieuw, 40 asserties) legt de gedeelde harness vast. Zonder die suite maakte één regel (bevat() { ok "$1"; }) beide pin-suites betekenisloos terwijl elke telling op zijn ondergrens bleef.
  • test-proeftuin-pin-pr.sh: 87 → 128 asserties, test-fuzz-basis-pin.sh: 59 → 74. Nieuw gedekt: de volledige commit-vorm, falende pr close/pr edit/commit, twee eigen PR's, een fork-PR bij een verouderde pin, meerregelige waarden, een verhuisd image-pad, en de vormen van de image-regel (toelichting erachter, aanhalingstekens, afwijkende inspringing).
  • Alle veertien suites groen; shellcheck -x -S warning schoon; alle gewijzigde YAML parseert.
  • ci-scripts.yml vergelijkt de getelde OK:-regels nu met wat de suite zélf rapporteert in plaats van met de ondergrens.

Nodig vóór dit werkt

  1. Niets aanmaken. De workflow draait op de bestaande secret FUZZ_PIN_TOKEN: fine-grained op deze repo, Contents: write en Pull requests: write — precies wat nodig is. Niet GITHUB_TOKEN, want een PR daarvan krijgt zijn verplichte checks nooit. De naam dekt de bredere rol niet meer, en een rotatie raakt voortaan ook fuzz-base-image.yml; dat staat bij beide workflows genoteerd.
  2. Na de merge één workflow_dispatch om te zien dat de PR verschijnt.
  3. De achtergebleven <!-- proeftuin-pin -->-meldingen op open PR's opruimen; de stap die ze wiste verdwijnt hiermee.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PmbxFoxhA5ooJYi2NVj5Jh

Dependabot kan de bump van de berichtenbox niet meer aanbieden. Hij houdt de op
3 september gesloten, niet-gemergde PR #271 vast als bestaande PR voor
`minbzk/moza-poc` op versie `latest`, en omdat elke volgende bump van dat image
opnieuw `latest` heet, matcht die vastlegging altijd. Zijn joblog eindigt dan op
`Pull request #271 already exists`; `@dependabot recreate` en een handmatige run
vanaf de Dependency graph lopen op hetzelfde vast, en de vastlegging is niet op
te ruimen zolang die PR bestaat.

Het vangnet ernaast plaatste bij een achterlopende pin een melding op elke
openstaande PR. Hun main loopt door, dus die melding verscheen binnen enkele
uren op PR's die niets met de demo te maken hebben — deze week op vijf tegelijk.

Een eigen workflow biedt de bump nu aan zoals `fuzz-basis-pin.sh` dat voor het
fuzz-basis-image doet: één PR op een vaste branch, elke run opnieuw op de
huidige stand gezet, en gesloten zodra de pin buiten die PR om bij is. Mergen
blijft een oordeel, want hun main draagt ook halfaf werk.

De controle zelf verandert niet van oordeel: `pin-consistency.yml` blokkeert nog
steeds een pin die niet te trekken is, en verliest alleen de comment-stap en
`pull-requests: write`. `dependabot.yml` negeert dit image expliciet, zodat er
geen ecosysteem-regel staat die stilzwijgend niets doet.

De workflow vraagt de secret PROEFTUIN_PIN_TOKEN; tot die er is, faalt de
dagelijkse run met een melding die precies dat zegt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PmbxFoxhA5ooJYi2NVj5Jh
@github-actions

github-actions Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

JaCoCo coverage

Overall Project 92.88% 🍏

There is no coverage information present for the Files changed

ericwout-overheid and others added 3 commits September 16, 2026 11:42
Een eigen secret vraagt een aanvraag bij MinBZK, en FUZZ_PIN_TOKEN draagt al
precies de rechten die deze workflow nodig heeft: fine-grained op deze repo,
Contents: write en Pull requests: write. De naam dekt die bredere rol niet meer
en een rotatie raakt voortaan twee workflows; dat staat bij beide genoteerd.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PmbxFoxhA5ooJYi2NVj5Jh
fuzz-basis-pin.sh en proeftuin-pin-pr.sh deden hetzelfde werk: het token eisen,
de eigen PR vinden zonder een fork-PR te raken, de branch als één commit bovenop
main neerzetten, en de PR opruimen zodra hij niets meer verandert. Gemeten kwamen
41 niet-commentaarregels in beide scripts letterlijk voor, en 99 in de twee
suites — vooral de gh- en git-stubs met hun faal-schakelaars.

Die twee delen staan nu in pin-pr-lib.sh en pin-pr-teststubs.sh. Wat "verouderd"
betekent en welke regelvorm vervangen wordt, blijft per pad: daar zit het
oordeel, en dat hoort niet gedeeld te worden.

Dit is het eerste gesourcete bestand onder .github/scripts/. shellcheck draait
daar met -x en volgt `source`, dus de dekking blijft. Het harnas heet bewust niet
test-*.sh: ci-scripts.yml draait elk bestand met die naam als suite en eist er
een ASSERTIES-regel van.

Beide suites toetsen onveranderd wat ze toetsten: 59 asserties voor het fuzz-pad,
87 voor de proeftuin.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PmbxFoxhA5ooJYi2NVj5Jh
De review bracht drie fouten aan het licht en een reeks gaten in de dekking.

De workflow miste een branch-guard. Bij een `workflow_dispatch` vanaf een feature
branch zou de force-push die hele branch op chore/proeftuin-pin zetten en als PR
naar main aanbieden. fuzz-base-image.yml dekte dat al af; bij het overnemen van
de gedeelde functie bleef de guard eromheen liggen.

`grep -c ... || true` faalde open: exitcode 2 betekent "kon niet zoeken", en die
ging als lege telling door, waarna de toets op precies één image-regel werd
overgeslagen — juist wanneer er niets gemeten was. Beide pin-scripts
onderscheiden die uitkomst nu.

De vervanging sloeg de regel plat. Inspringing, aanhalingstekens en een
toelichting achter de pin gingen verloren, en een geciteerde regel brak de bump
hard terwijl proeftuin-image.sh die vorm juist ondersteunt. Alleen de referentie
zelf wordt nu vervangen, via een tijdelijk bestand met een expliciete
awk-controle in plaats van een redirect die compose.yaml al had afgekapt.

Verder: `oncontroleerbaar` maakt de geplande run nu rood (op een PR blijft het
een waarschuwing — daar is het een tijdelijke hik, hier het enige signaal), het
opruimen van de pin-branch hangt niet meer aan een open PR, de aangeboden regel
moet naar hetzelfde image wijzen als de pin die er staat, en een lege of
afgekapte commit-sha uit de GitHub-API levert `oncontroleerbaar` in plaats van
het geruststellende `ontbreekt`.

Nieuwe dekking: test-proeftuin-pin.sh (139 asserties) voor het script dat de acht
statussen bepaalt, met een contracttest die de aangeboden regel langs
`regel_is_welgevormd` haalt; test-pin-pr-teststubs.sh (40) voor de gedeelde
harness, waar één regel beide pin-suites betekenisloos kon maken zonder dat een
telling daalde; en in de twee pin-suites de ontbrekende gevallen — commit-vorm,
falende `pr close`/`pr edit`/`commit`, twee eigen PR's, fork bij een verouderde
pin, meerregelige waarden, en de vormen van de image-regel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PmbxFoxhA5ooJYi2NVj5Jh
@ericwout-overheid
ericwout-overheid marked this pull request as ready for review September 16, 2026 14:52
@ericwout-overheid
ericwout-overheid enabled auto-merge (squash) September 16, 2026 15:08
@ericwout-overheid
ericwout-overheid merged commit ffad6c6 into main Sep 16, 2026
39 checks passed
@ericwout-overheid
ericwout-overheid deleted the chore/proeftuin-pin-pr branch September 16, 2026 16:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants