fix(arm64): finish the amd64 pin migration, and guard it #746
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/arm64-house-toolchain"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
minio-eradication.yamlleft this note:This finishes it.
The cause, proven against the registry
Not read off an error message:
6560ba95someara/pipeline-tools:v8oci.image.manifest.v1c9c3a677build/hetzner-builder:v5docker manifest.v229918ddfbuild/pipeline-tools:v16manifest.list.v2A digest names one architecture unless it names a manifest list, and the fleet
is arm64 only.
Seven manifests move; each Job name moves with it
A Job template is immutable, so the repin never takes unless the name moves --
the apply conflicts instead.
binjovi-release-oauth-retire-v1/-v2namewhich OAuth client they retire, not a generation, so they take
-r2ratherthan a bumped counter.
Three files that looked like they needed this do NOT
image-gc,sysctl-tunerandopenebs-zfseach render two DaemonSets: anamd64 one held off this fleet by
nodeSelector, and an-arm64one an overlayrewrites onto
build/node-tools-arm64.The overlay is a kustomize
images:transformer keyed on the base imagename. Repinning the base silently stops the rewrite, and the arm64 DaemonSet
renders with the wrong image -- on
system-node-critical,hostPIDworkloads.tests/host-route-mtu-contract.shcaught it. Nothing in the rendered YAML lookswrong.
node-snapshot-bakeis excluded too:hetzner-builderv5 is its only tagand is amd64-only, so
ensure-snapshothas nowhere to go and the Job cannot rununtil that image is rebuilt for arm64. Repinning only its
promotecontainerwould fix nothing and break the apply.
The guard
tests/binjovi.shalready held this rule, but only for files containingadmin/clientsin one directory -- which is why everything else drifted.tests/arm64-image-pins.shis repository-wide.The rule it encodes is not "never pin amd64" but "never let an amd64 pin
reach an arm64 node", so the four legitimate cases are exempt by path with the
reason recorded, including the transformer trap above.
Two halves, both mutation-tested: a denylist for the verified single-arch
digests, and an allowlist requiring the house toolchain on >=10 image lines --
so reverting every repin turns it red even while the denylist stays green.
One more guard caught me
An earlier draft renamed the ServiceAccount, Role and RoleBinding along with
each Job while leaving
serviceAccountNamebehind.tests/service-account-references.shcaught it. Only the Job is immutable.bash tests/check.shexits 0.https://claude.ai/code/session_01GfkEuwuvGSqGyXVuxwT7PA