Pull RPM build containers from ghcr.io/simp/simp-<os>-build (fixes fleet-wide RPM build failures) - #80
Merged
Merged
Conversation
First dynamic-inventory session (repolist=github-org via the latest symlink): rolls out PR simp#48's release_rpms.yml build-container change fleet-wide, scoped to that single file via merge_github_workflows.files — the pr_tests.yml template is currently behind the deployed fleet (simp#41/simp#46), so unscoped workflow syncs stay off until the template is reconciled. Stage plan (verified via list_pipeline_stages): install_gems, checkout, merge_github_workflows (scoped), git_commit_changes, then the GitHub fork/remote/push/PR stages. Approve/merge plans configured; run them with repolist=generated-20260731-release-rpms-ghcr. Smoke-tested end-to-end against pupmod-simp-aide and pupmod-simp-acpid (see simp#79): one-file commits matching PR simp#48's diff exactly, Renovate values preserved, second run fully unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
silug
force-pushed
the
session-release-rpms-ghcr
branch
from
August 10, 2026 17:56
8b5ca8c to
2468603
Compare
michael-riddle
approved these changes
Aug 11, 2026
This was referenced Aug 12, 2026
silug
added a commit
that referenced
this pull request
Aug 12, 2026
Every tag push has been dispatching two release_rpms.yml runs hardcoded to the retired centos7/centos8 containers, overriding #80's el8 default — all tag-triggered RPM builds fail. The caller templates now dispatch once with no OS override, and release_rpms.yml owns the build-OS list via a build_container_oses input (default '["el8","el9","el10"]', narrowable on manual runs). Per-release work (release lookup/creation, the clean-input asset wipe) is split into a resolve-release job so the parallel per-OS legs cannot race on release autocreation or wipe each other's uploads, and both build inputs are required: false so omitting them in dispatch calls is well-defined. Also fixes validate-inputs writing '{name}={value}' to GITHUB_OUTPUT — invalid syntax, so prebuild_suffix/build_semver never populated and prerelease tags were treated as full releases. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
silug
added a commit
that referenced
this pull request
Aug 13, 2026
…ed RPM builds (el8/el9/el10) (#44) * Surface the Forge API response in the deploy step curl --fail discards the response body, so a failed publish reports only an HTTP status (the simp-gpasswd 2.0.0 release died with a bare 403). Capture the body and status, print both, and fail on any non-2xx result so the Forge's own error message lands in the job log. * Preserve the built module archive as a workflow artifact A failed Forge upload previously left nothing to download - the tarball existed only on the runner and the GitHub release carries no assets. Upload it before attempting the Forge POST so every tag run, pass or fail, leaves the exact archive available from the run page. * Attach the module archive to the GitHub release Release assets are permanent and publicly downloadable, unlike workflow artifacts (authenticated, expiring). Uploaded before the Forge POST so a failed publish still leaves the exact archive on the release. --clobber keeps job re-runs idempotent. * Reconcile the tag_deploy.yml template with the deployed fleet The deployed workflows have moved on (PUPPET_VERSION '~> 8', Ruby 3.4.9, checkout@v7, github-script@v9, rake pupmod:build instead of pdk build) while the template still described the Puppet-7 era. Reconciling before the sync keeps the rollout diff down to the intended changes. * Move the RPM build-OS matrix into release_rpms.yml (#84) Every tag push has been dispatching two release_rpms.yml runs hardcoded to the retired centos7/centos8 containers, overriding #80's el8 default — all tag-triggered RPM builds fail. The caller templates now dispatch once with no OS override, and release_rpms.yml owns the build-OS list via a build_container_oses input (default '["el8","el9","el10"]', narrowable on manual runs). Per-release work (release lookup/creation, the clean-input asset wipe) is split into a resolve-release job so the parallel per-OS legs cannot race on release autocreation or wipe each other's uploads, and both build inputs are required: false so omitting them in dispatch calls is well-defined. Also fixes validate-inputs writing '{name}={value}' to GITHUB_OUTPUT — invalid syntax, so prebuild_suffix/build_semver never populated and prerelease tags were treated as full releases. * Retire the EL7/EL8 tag_deploy variant (#84) EL7 is gone fleet-wide and the per-OS choice now lives in release_rpms.yml, so tag_deploy_github-rpms-el7-el8.yml had no remaining purpose. pkg-r10k and simp-adapter fall back to the standard simp_unknown presets, whose absent list already removes the file. * Add session config: fleet rollout of the tag_deploy/release_rpms rework --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.The fleet rollout session (combined per our convention: template change + workflow run in one PR)
This PR also carries the puppetsync session that delivers the change (
data/sync/configs/20260731-release-rpms-ghcr.yaml+latestsymlink repoints):repolists/latest.yaml→github-org.yaml(79 repos at last listing; archived/fork/exception handling per Build inventory dynamically from the GitHub API (#55) #74). The generated snapshot (generated-20260731-release-rpms-ghcr.yaml) is what the approve/merge plans consume (repolist=generated-20260731-release-rpms-ghcr).release_rpms.yml(Add optional files scoping to the merge_github_workflows stage #79): thepr_tests.ymltemplate is currently behind the deployed fleet (REFERENCE.md freshness job, Ruby Style job, acceptance matrix — see Reconcile the Ruby Style (rubocop) job in the pr_tests.yml baseline — template and deployed modules have diverged #41/Add a REFERENCE.md freshness check to pr_tests.yml (bundle exec rake validate:strings) #46), so unscoped workflow syncs stay off until the template is reconciled. The config documents this inline.list_pipeline_stages):install_gems → checkout → merge_github_workflows (scoped) → git_commit_changes → fork → remote → push → PR.0 ok / 2 unchanged / 0 failed.Supersedes #48 (same template commit, rebased onto current main; cherry-picked here so the change and its rollout are reviewed and tested together).
🤖 Generated with Claude Code