Repository navigation
release_rpms: attach the GPG public key from one OS leg only - #114
Merged
Merged
Conversation
Every leg of the build matrix signs with the same key and produces the same RPM-GPG-KEY-SIMP-UNSTABLE-2.pub.asc, and every leg clobbers and re-uploads it. Run in parallel, those uploads race: one leg's delete or upload lands between another's list and upload, failing that leg with 'already_exists' or 'Not Found', and cancelling the others. Only the first OS in build_container_oses attaches the key now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
silug
force-pushed
the
release-rpms-gpg-key-race
branch
from
October 25, 2026 14:47
4af643e to
6db2bc6
Compare
Session 20261025-release-rpms-gpg-key-race merges release_rpms.yml into the 80 repos that carry it: the module repos, rubygem-simp-cli and the packaging repos. github-org's globs don't match the packaging repos. merge_github_workflows creates a workflow that a repo lacks, so the repolist lists only repos that already have release_rpms.yml. It excludes pupmod-simp-compliance_markup, whose pre-split tag_deploy.yml still dispatches release_rpms once per OS. The template's header now says "standardized asset baseline", like the other shared templates, since the file also goes to non-module repos. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
silug
marked this pull request as ready for review
October 26, 2026 16:03
michael-riddle
approved these changes
Oct 26, 2026
silug
added a commit
to simp/pupmod-simp-compliance_markup
that referenced
this pull request
Nov 13, 2026
Every OS leg signs with the same key and uploads the same .pub.asc, and
their parallel clobber+upload of that asset races ("already_exists").
This brings the workflow in line with the puppetsync template
(simp/puppetsync#114), which skipped this repo at the time.
Co-authored-by: Claude Opus 5.5 <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.ymlbuilds el8, el9 and el10 in parallel matrix legs. Every leg signs with the same key, produces the sameRPM-GPG-KEY-SIMP-UNSTABLE-2.pub.asc, and clobbers and uploads that one asset. The legs race each other: one leg's delete or upload lands between another leg'slistReleaseAssetsanduploadReleaseAsset. The losing leg fails, andfail-fastcancels the rest. Examples:simp/pupmod-simp-sssd10.1.2 (run 33689600433, el8):HttpError: Validation Failed: {"resource":"ReleaseAsset","code":"already_exists","field":"name"}simp/pupmod-simp-simp9.0.1 (run 32891967020): el9 failed withHttpError: Not Found … #update-a-release-asset, el8 was cancelled, el10 succeeded.Re-running usually gets past it, which is why the failure has looked intermittent.
Fix
A new
upload_gpg_fileenv,matrix.os == fromJSON(github.event.inputs.build_container_oses)[0]. Only that leg adds the.pub.ascto its upload list; every leg still uploads its own RPMs, whose names are distinct per%{dist}. A dispatch with a custombuild_container_osesstill attaches the key exactly once.Testing
actionlintreports nothing new; it only flags the existingubuntu-26.04runner label it doesn't know yet.rspec: 256 examples, 0 failures; BoltSpec plan specs: 31 examples, 0 failures.list_github_repos.rb) to exactly 80 repos: the 83 simp repos that carryrelease_rpms.yml, minus the three exclusions below.Sync session
data/sync/configs/20261025-release-rpms-gpg-key-race.yaml:merge_github_workflowsscoped torelease_rpms.yml, withproject_typeswidened from the pupmod default torubygem(rubygem-simp-cli) andsimp_unknown(the packaging repos). The defaultpreserve_keysapply. There's no version bump.data/sync/repolists/20261025-release-rpms-gpg-key-race.yaml: github-org withpupmod-*,puppet-*,rubygem-simp-cliand the eight packaging repos (pkg-r10k, simp-adapter, simp-doc, simp-environment-skeleton, simp-gpgkeys, simp-rsync-skeleton, simp-selinux-policy, simp-utils).merge_github_workflowscreates a workflow that a repo lacks, so the repolist names only repos that already have the file: it has norubygem-*glob, and it excludes pupmod-simp-ufw.Expected result: I diffed every repo's current
release_rpms.ymlagainst main's template. 76 match it exactly, three differ only in the header line, and mockup differs only inruns-on, which is preserved. So each of the 80 PRs should change only the key-upload lines plus, in the module repos, the header comment.Excluded:
release_rpms.ymlandtag_deploy.ymlpredate the run-once/matrix split.tag_deploystill dispatchesrelease_rpmsonce per OS (centos7/centos8) with abuild_container_osinput. Merging onlyrelease_rpms.ymlwould leavetag_deploysending an input that no longer exists. The repo has missed every sync since 2026-09-03, and its metadata still saysopenvox < 9, so it needs its own catch-up session (to be filed separately).The four baseline PRs mentioned in the first version of this PR (environment-skeleton, rsync-skeleton, gpgkeys, selinux-policy) have merged, and those repos are in the repolist.
🤖 Generated with Claude Code