Pull RPM build containers from ghcr.io/simp/simp-<os>-build (fixes fleet-wide RPM build failures) - #48
Pull RPM build containers from ghcr.io/simp/simp-<os>-build (fixes fleet-wide RPM build failures)#48silug wants to merge 3 commits into
Conversation
The docker.io/simpproject/simp_build_<os> images this template referenced have
no EL8/9/10 variants -- the newest are simp_build_centos7 (pushed 2024-08-09)
and simp_build_centos8 (2023-06-26). Builds against those die with
'NameError: uninitialized constant JSON::Fragment' (json >= 2.9 required).
Point at ghcr.io/simp/simp-el{8,9,10}-build, which are public and rebuilt
weekly, and add a build_container_tag input so a dated tag can be pinned.
Matches the proven configuration already deployed in pupmod-simp-mockup.
hcaballero2
left a comment
There was a problem hiding this comment.
Skeptical review — I tried to break this and mostly couldn't. What I verified before believing the PR body:
- All three images exist and pull anonymously:
docker manifest inspect ghcr.io/simp/simp-el{8,9,10}-build:latestall succeed (and a dated tag,simp-el8-build:20260720, too). Noghcr.ioauth wrinkle for public runners. - The head-branch file is byte-identical to
pupmod-simp-mockup's proven copy except theverboseinput block and theruns-on/github-script/checkoutversions — exactly the deltas the body claims to defer. - The workflow is
workflow_dispatch-only, sogithub.event.inputs.build_container_tagis always populated; no empty-tag edge case from other triggers. - This is the only file in puppetsync referencing
simpproject(org code search), so nothing else keeps pointing at the dead registry. - The failure diagnosis is real: simplib run 29344542051 (2026-07-14) dies with
NameError: uninitialized constant JSON::Fragmentunder ruby-2.7.8/json_pure-2.6.3 inside the old container.
Two substantive concerns:
1. Syncing this template as-is would regress fleet repos to a retired runner. The baseline still carries runs-on: ubuntu-20.04 (deferred to #42), but the fleet's deployed copies have already moved on — e.g. simplib's .github/workflows/release_rpms.yml line 95 is runs-on: ubuntu-24.04, and mockup's likewise. GitHub retired ubuntu-20.04 hosted runners in April 2025, so a puppetsync run of this file before #42 lands would overwrite working 24.04 fleet copies with a workflow that fails at scheduling — trading a broken build step for a workflow that never starts. The body's "trivial context resolution" framing undersells this: #42 (or at least its runs-on hunk) is a hard prerequisite for syncing, not just a merge-order nicety. Suggest either folding the runs-on bump into this PR, or stating explicitly in the body/CHANGELOG that this file must not be synced until #42 is in.
2. Free-text build_container_os now composes nonexistent image names on stale muscle memory. See inline comment — the very run I pulled logs from was dispatched with build os: centos7 two weeks ago.
Minor: json mechanics aside (the constant is actually raised from json_pure 2.6.3's ext shim, not the 2.9 gem itself), the "container toolchain too old" root cause stands, so no change requested there.
| description: "Build container OS" | ||
| required: true | ||
| default: 'centos8' | ||
| default: 'el8' |
There was a problem hiding this comment.
Since the valid values are now exactly el8/el9/el10, consider making this a type: choice input:
build_container_os:
description: "Build container OS"
required: true
type: choice
options: [el8, el9, el10]
default: 'el8'With free text, anyone dispatching with old muscle memory (centos8, centos7) gets ghcr.io/simp/simp-centos7-build:latest — a nonexistent image whose pull failure only surfaces deep inside the build/signing job. This isn't hypothetical: simplib's most recent release_rpms run (29344542051, 2026-07-14) was dispatched with build os: centos7. choice also works fine for the cross-repo target_repo dispatch path (the API rejects values outside options, which is the point). If you'd rather keep it free-text for forward-compat with future ELs, at least name the valid values in the description.
CHANGELOG.md is frozen (see #71); the squash-merge PR title carries this change's history. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Problem
release_rpms.ymlresolves its builder image as:Docker Hub's
simpproject/namespace has no EL8/9/10 build images. The only relevant ones are:simpproject/simp_build_centos7simpproject/simp_build_centos8(plus older
centos6and*_ruby3_1variants). So no value ofbuild_container_oscan select a current container —simpproject/simp_build_el8does not exist.Building against those years-old images fails with:
JSON::Fragmentwas added in thejsongem 2.9; the stale images ship older. As of 2026-07-28 this is failing in 70 of 71 non-archived repos that have run the workflow, spanning 2026-06-09 → 2026-07-24 — i.e. through the entire 7.0.0/8.0.0 release wave.Fix
Point at the current containers, which are public and rebuilt weekly:
ghcr.io/simp/simp-el8-buildlatest,20260428…20260720ghcr.io/simp/simp-el9-buildlatest,20260428…20260720ghcr.io/simp/simp-el10-buildlatest,20260618…20260727Three changes:
simp_builder_docker_image→ghcr.io/simp/simp-${os}-build:${tag}— note both the registry host and the image-name shape differ from the old form.build_container_taginput (defaultlatest) so a dated tag can be pinned for reproducible rebuilds.build_container_osdefaultcentos8→el8(lowest currently supported EL, so the widest RPM compatibility).This is already proven in production
pupmod-simp-mockuphas carried exactly this configuration for a while and is the only repo with it. The single greenrelease_rpms.ymlrun anywhere in the org came from it:simp/pupmod-simp-simplib 5.0.3 (build os: el10), dispatched through mockup's workflow viatarget_repoon 2026-06-22 — signing and release-asset attachment included. This PR ports that working configuration into the baseline so the other 78 repos get it.Diffed against
pupmod-simp-mockup's copy; this PR is the mockup delta minus the runner/action bumps, which #42 already owns (see below).Relationship to #42
#42 also touches this file, but only bumps
runs-on: ubuntu-20.04→24.04,actions/github-script@v6→@v9, andactions/checkout@v5→@v7. It does not touch the image reference, the input defaults, or addbuild_container_tag. The two changes are complementary and deliberately kept separate.github-script@v9hunks starts around line 259, so whichever merges second may need a trivial context resolution. There is no semantic conflict — keep both sides (theghcr.ioimage line and the@v9bump).Deliberately not included
verboseinput. mockup un-comments theverboseworkflow input, but its build step still hardcodesverbose: 'no' #${{ github.event.inputs.verbose }}, so the input would be exposed while doing nothing. Left as-is here rather than shipping a no-op knob fleet-wide — worth either wiring up properly or leaving commented, as a separate decision.release_rpms.yml:105's tag regex captures the prerelease counter as a separate optional group from the prerelease word and has no release (-R) component, which is consistent with simp-core#864 / simp-doc#461 (simp-6.6.0-Alpha.el8.noarch.rpminstead ofsimp-6.6.0-Alpha10-1…). Same file, separate defect — kept out to keep this reviewable.Verification suggested before syncing to all 78 repos
A release does not have to wait on the sync: because mockup's workflow accepts
target_repo+target_repo_token, RPMs can be built and attached for any repo through mockup today. Recommended order:dry_run=yesagainst one module and confirm the container pulls and the build runs.SIMP_CORE_REF_FOR_BUILDING_RPMS(reportedly still6.5.0-1) is still viable — a real build exercises it immediately.