The chart's appVersion drifts behind the image on every single release, and the test we wrote to catch it is structurally incapable of firing on the commit that causes it.
How it goes wrong:
So the guard only ever fires on the NEXT unrelated PR, where it looks like that PR broke something. That is how it surfaced this time.
Two things worth fixing, and they are independent:
- Make the release commit regenerate the deployment artefacts, so
appVersion is stamped in the same commit as VERSION. That kills the drift at the source.
- Or, if the release commit must stay minimal, run the artefact check on the release commit rather than skipping CI on it.
There is a second, nastier trap sitting next to this one that cost us two dead PRs today. A commit message that QUOTES the skip marker while explaining it gets skipped too -- GitHub scans the whole message, body included, not just the subject. #35 never got a single CI run for that reason and could never satisfy its required check, and cherry-picking it did the same to #36. Both had to be abandoned for #37 with the marker described instead of spelled out.
Worth a line in CONTRIBUTING: describe that marker, never write it literally.
The chart's
appVersiondrifts behind the image on every single release, and the test we wrote to catch it is structurally incapable of firing on the commit that causes it.How it goes wrong:
_release-tail.yml's release-commit stampsVERSIONandCHANGELOG.mdand nothing else. It never runsscripts/generate-deploy-artefacts.py, sodeploy/helm/culvert/Chart.yamlkeeps the previous version.tests/unit/test_deploy_artefacts.py::TestImageReferencenever runs against it.helm installfrom main therefore deploys the PREVIOUS image, silently. v2.1.14 shipped with the chart pinned to 2.1.13, and fix(deploy): regenerate the chart so appVersion tracks the v2.1.14 release #35/fix(client): separate the address clients dial from the certificate identity #37 were needed to hand-fix it after the fact.So the guard only ever fires on the NEXT unrelated PR, where it looks like that PR broke something. That is how it surfaced this time.
Two things worth fixing, and they are independent:
appVersionis stamped in the same commit asVERSION. That kills the drift at the source.There is a second, nastier trap sitting next to this one that cost us two dead PRs today. A commit message that QUOTES the skip marker while explaining it gets skipped too -- GitHub scans the whole message, body included, not just the subject. #35 never got a single CI run for that reason and could never satisfy its required check, and cherry-picking it did the same to #36. Both had to be abandoned for #37 with the marker described instead of spelled out.
Worth a line in CONTRIBUTING: describe that marker, never write it literally.