Skip to content

Pull RPM build containers from ghcr.io/simp/simp-<os>-build (fixes fleet-wide RPM build failures) - #80

Merged
silug merged 2 commits into
simp:mainfrom
silug:session-release-rpms-ghcr
Aug 11, 2026
Merged

Pull RPM build containers from ghcr.io/simp/simp-<os>-build (fixes fleet-wide RPM build failures)#80
silug merged 2 commits into
simp:mainfrom
silug:session-release-rpms-ghcr

Conversation

@silug

@silug silug commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Problem

release_rpms.yml resolves its builder image as:

simp_builder_docker_image: 'docker.io/simpproject/simp_build_${{ github.event.inputs.build_container_os }}:latest'

Docker Hub's simpproject/ namespace has no EL8/9/10 build images. The only relevant ones are:

Image Last pushed
simpproject/simp_build_centos7 2024-08-09
simpproject/simp_build_centos8 2023-06-26

(plus older centos6 and *_ruby3_1 variants). So no value of build_container_os can select a current container — simpproject/simp_build_el8 does not exist.

Building against those years-old images fails with:

NameError: uninitialized constant JSON::Fragment

JSON::Fragment was added in the json gem 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:

Image Tags
ghcr.io/simp/simp-el8-build latest, 2026042820260720
ghcr.io/simp/simp-el9-build latest, 2026042820260720
ghcr.io/simp/simp-el10-build latest, 2026061820260727

Three changes:

  1. simp_builder_docker_imageghcr.io/simp/simp-${os}-build:${tag} — note both the registry host and the image-name shape differ from the old form.
  2. New build_container_tag input (default latest) so a dated tag can be pinned for reproducible rebuilds.
  3. build_container_os default centos8el8 (lowest currently supported EL, so the widest RPM compatibility).

This is already proven in production

pupmod-simp-mockup has carried exactly this configuration for a while and is the only repo with it. The single green release_rpms.yml run anywhere in the org came from it: simp/pupmod-simp-simplib 5.0.3 (build os: el10), dispatched through mockup's workflow via target_repo on 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.0424.04, actions/github-script@v6@v9, and actions/checkout@v5@v7. It does not touch the image reference, the input defaults, or add build_container_tag. The two changes are complementary and deliberately kept separate.

⚠️ Merge-order note: my image-line hunk ends around template line 259 and one of #42's github-script@v9 hunks starts around line 259, so whichever merges second may need a trivial context resolution. There is no semantic conflict — keep both sides (the ghcr.io image line and the @v9 bump).

Deliberately not included

  • verbose input. mockup un-comments the verbose workflow input, but its build step still hardcodes verbose: '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.
  • The prerelease-tag defect. 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.rpm instead of simp-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:

  1. Dispatch with dry_run=yes against one module and confirm the container pulls and the build runs.
  2. One real simple module, then one with native/provider bits.
  3. Confirm SIMP_CORE_REF_FOR_BUILDING_RPMS (reportedly still 6.5.0-1) is still viable — a real build exercises it immediately.
  4. Then sync this template out.

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 + latest symlink repoints):

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

@silug silug changed the title Add session config: fleet rollout of release_rpms.yml ghcr change Pull RPM build containers from ghcr.io/simp/simp-<os>-build (fixes fleet-wide RPM build failures) + rollout session Aug 10, 2026
@silug silug changed the title Pull RPM build containers from ghcr.io/simp/simp-<os>-build (fixes fleet-wide RPM build failures) + rollout session Pull RPM build containers from ghcr.io/simp/simp-<os>-build (fixes fleet-wide RPM build failures) Aug 10, 2026
silug and others added 2 commits August 10, 2026 17:55
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
silug force-pushed the session-release-rpms-ghcr branch from 8b5ca8c to 2468603 Compare August 10, 2026 17:56
@silug
silug merged commit c099ac7 into simp:main Aug 11, 2026
2 checks passed
@silug
silug deleted the session-release-rpms-ghcr branch August 11, 2026 17:09
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants