Extract shared buildx multi-arch quartet (amd64/arm64/manifest/chart) #2
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
The amd64.yaml/arm64.yaml/manifest.yaml(/chart.yaml) buildx-per-arch + manifest-create shape is re-implemented per repo in: mermaid-gpu-dashboard, csi-s3, xonsh-image, woodpecker-peek, builder-arbitrage, nix-customs/flake-hub, nix-customs/nixos-ci, building/arm64/mempalace, building/s390x/juicefs-csi-s390x, ii/ii-agent, ii/ii-researcher, ii/commonground-legacy, servers/anton/terminal-agent. Provide one shared template/plugin. the-eye and emdash.kotkanagrilli.fi container.yaml are structurally identical too (the-eye scaffolded from emdash) — fold in.
Generator landed at
generator/render.py+generator/templates/{matrix,split,single}/*.tmpl(4ab389d,ace3afa,7fbf343— includes the #9 fix). The repo set in scope isn't one shape, so the generator supports three, selected bykind:in a per-repo manifest undermanifests/:matrix— singlebuild.yamlwith amatrix: {ARCH: [...]}+manifest.yamlcombining per-arch tags (xonsh-image, csi-s3).split— separate per-arch files, no manifest step, used for attic-closurenix run .#publish-*pushes rather than docker buildx (woodpecker-peek).single— onecontainer.yaml, one native-arch build (+ optional extra components like a grpc image), no matrix, no manifest (the-eye, emdash.kotkanagrilli.fi).Migrated and pushed (byte-identical render, mod the GENERATED header):
oleks/xonsh(xonsh-image) —.woodpecker/{build,manifest}.yaml, commit 639bcd0. Also picked up the #9runs_onfix. Verified: diff against pre-migration file clean, YAML re-parses, ruff/lint pre-receive hooks passed. Can't watch a live fire —build.yamlonly triggers onevent: tag, and I didn't want to cut a spurious tag on a real repo just to test.oleks/woodpecker-peek—.woodpecker/{amd64,arm64}.yaml, commit b7f49dd. Verified by diff (clean) and YAML parse. Woodpecker doesn't have this repo registered underoleks/woodpecker-peek(404 on lookup), so I couldn't watch a live pipeline fire from the push either — worth checking repo activation separately if that's unexpected.Manifests drafted but not yet applied (real repo files untouched):
csi-s3— real pipeline usesTARGET_ARCH(notARCH), a fixedhoward2404node pin on the manifest step too, an explicitclone:block, and a commented-out s390x matrix entry — my manifest gets close but isn't byte-exact yet. Left as-is to avoid silently changing real CI behavior; needs avar_namemanifest field + explicit-clone support in the generator.the-eye/emdash.kotkanagrilli.fi—singlekind drafted, but the realcontainer.yamlprose comments (tagging scheme, per-repo narrative) are bespoke enough that faithful reproduction needs aheader/notesmanifest field like thesplitkind already has. Not applied.Not yet touched (remaining in scope): mermaid-gpu-dashboard, builder-arbitrage, nix-customs/flake-hub, nix-customs/nixos-ci, ii/ii-agent, ii/ii-researcher, ii/commonground-legacy, servers/anton/terminal-agent, emdash.kotkanagrilli.fi (container.yaml pair with the-eye).
Leaving #2 open — 2/13 repos migrated and live, the rest are either drafted-but-unverified or not started. Will pick this back up for the remaining repos if reassigned.
Update: generator extended with an
explicit_clonematrix variant (fixedlabels:, ownclone:block, customvar_name, per-repo header/notes) and rawheader/per-component comment fields for thesinglekind (generator/render.py+ new templates, commitdb97195). This closed the gap noted earlier.Newly migrated, byte-identical (mod GENERATED header, plus the #9
runs_onimprovement where applicable), verified by diff + YAML re-parse, pushed and watched via Woodpecker:oleks/csi-s3—.woodpecker/{build,manifest}.yaml, commit 96b6961. No pipeline fired (tag-only trigger, as expected — didn't force a tag).oleks/the-eye—.woodpecker/container.yaml, commit 49decea. Confirmed via Woodpecker that pipeline #30 (triggered by this push) only rantest.yaml(push:main trigger) —container.yaml'sbranch: [develop, staging, production]guard correctly did NOT fire, matching pre-migration behavior.oleks/emdash-kotkanagrilli(develop branch, not main) —.woodpecker/container.yaml, commit f148e90. This one DID correctly fire (push to develop matches its trigger) — pipeline #77 scheduled the expectedclone+build-and-pushsteps, confirming the rendered YAML parses and behaves identically to the hand-written original.Tally: 5 of 13 in-scope repos migrated (xonsh-image, woodpecker-peek, csi-s3, the-eye, emdash-kotkanagrilli). Continuing through the remaining 9 (mermaid-gpu-dashboard, builder-arbitrage, nix-customs/flake-hub, nix-customs/nixos-ci, ii/ii-agent, ii/ii-researcher, ii/commonground-legacy, servers/anton/terminal-agent) one at a time; will note here if any repo's shape genuinely doesn't fit rather than forcing it. Leaving #2 open until the full list is dispositioned.
(Separate note for the user, not mine to chase:
oleks/woodpecker-peek404s on Woodpecker's repo-lookup API even though its pipeline is presumably running somewhere — worth a look at repo registration.)Final disposition of all 13 repos in scope.
Migrated (6/13), byte-identical renders (mod GENERATED header + the documented #9 improvement), verified by diff + YAML re-parse + Woodpecker pipeline behavior:
oleks/xonsh(xonsh-image) — 639bcd0oleks/woodpecker-peek— b7f49ddoleks/csi-s3— 96b6961 (needed the newexplicit_clonematrix variant:var_name: TARGET_ARCH, fixedlabels:, ownclone:block, commented-out s390x matrix entry, separate manifest-step buildkit address)oleks/the-eye— 49decea (needed rawheader/per-component comment fields on thesinglekind)oleks/emdash-kotkanagrilli(develop branch) — f148e90, confirmed live-fired correctly (pipeline #77, expected clone + build-and-push steps)oleks/flake-hub— 2065b38 (neededsplitkind extensions: optional tag-trigger, optional setup-step comment, optional trailing-- --publishflag)Explicitly excluded — pipeline shape doesn't fit any of the 3 generator kinds without disproportionate one-off work, not forcing it:
builder-arbitrage— YAML-anchor pinned-by-digest images, cosign signing steps,depends_onon two named per-arch steps, AND a duplicated second quartet (publish-provisioner-*) for a second image. Also already has active worktrees from unrelated concurrent work in that repo.nix-customs/nixos-ci— two chained steps per arch (base-{arch}→extended-{arch}, different nix images:nixos/nix:latestvsnix-ci), not a single build step.ii/ii-agent— no buildx/BUILDKIT_ADDR at all; usesnix2container+regctlcross-host index assembly, full-clone-with-tags forgit describe, plus an RPATH env workaround baked into commands.ii/ii-researcher,ii/commonground-legacy— amd64-only Dockerfile escape-hatches (no arm64 leg present in either repo at all), each with bespoke per-repo prose comments; would need a fourth generator "kind" for essentially one-off single-arch builds with no real duplication payoff.servers/anton/terminal-agent— entirely different toolchain (python:3.12-slimwheel build +moby/buildkitwith a k8s-secret-mounted dockerconfigjson, working around a Woodpeckerfrom_secretbug in that install, plus registry-existence curl checks) — nothing in common with the buildx-quartet shape.mermaid-gpu-dashboard— single amd64-only step with inline nixbuild.net SSH/substituter wiring; not a quartet, no arm64 leg, and the nixbuild bootstrap is too bespoke to templatize usefully for one repo.Also confirmed (not chasing further per team-lead):
oleks/woodpecker-peek404s on Woodpecker's/repos/lookupAPI even though its pipelines clearly exist and pushes go through fine — likely a repo-name/slug mismatch in Woodpecker's own registration, worth a look separately.Closing #2 — all 13 repos are now dispositioned (6 migrated, 7 explicitly excluded with reasons above).