Repository navigation
Publish v1.19 releases and PR images only after a second person's approval - #11486
Open
nikolasmatt wants to merge 28 commits into
Open
nikolasmatt wants to merge 28 commits into
nikolasmatt wants to merge 28 commits into
Conversation
A published GitHub release now starts .github/workflows/release.yaml, which validates the tag, runs the Cloud Build publish after approval in environment release, uploads glooctl, and registers the release in solo-ci. Tag builds in cloudbuild.yaml no longer publish. publish-artifacts.yaml reads the quay.io password from Secret Manager and no longer carries KMS ciphertext.
…d, one approval per release
…ctly, document cancelling a release (cherry picked from commit 2cdd61f)
…cross-build, approver note
…e publishing the chart
PR builds that push images now run from pr-images.yaml, which needs a second approver in environment release. build-bot keeps running tests and a glooctl build without secrets.
…the tests are queued
…release run title, README push note
…nboarding-v1.19.x
Dispatched by the PR author or a writer, or relayed from a /build-pr-images comment by pr-images-comment.yaml on main. It validates the request, then publishes only after a second person approves in environment release. pull_request_target on a release branch never fires because GitHub reads that trigger from the default branch.
…R after approval A run dispatched as github-actions[bot] now needs comment_id naming a fresh /build-pr-images comment by the requester on the PR. The build job checks again after approval that the PR is open and its head is the requested commit.
9 of 17 tasks
nikolasmatt
marked this pull request as ready for review
November 6, 2026 17:37
dhawton
approved these changes
Nov 6, 2026
This branch has not been deployed
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.
Description
After this, a gloo v1.19 release, and any PR build that pushes images, publishes only after a second person approves it. The Cloud Build config no longer carries committed credentials, glooctl uploads with the workflow's own token instead of a PAT, and every release is registered in solo-ci.
Refs #11482 · Refs solo-io/solo-tools#270
This is one of four matching PRs, one per release line that still ships: v1.22.x #11483, v1.21.x #11484, v1.20.x #11485, v1.19.x #11486. They can merge one at a time. A small PR against
main(#11496) adds the/build-pr-imagescomment trigger.close-main-prs.yamlclosed it becausemainis EOL, so a repo admin lands it after these four.For customers
Nothing customer-facing changes. Images still go to quay.io/solo-io and gcr.io/gloo-edge, the chart to the solo-public-helm bucket, and glooctl to the GitHub release assets, under the same names and tags.
For maintainers:
<version>-<PR number>) are no longer built for every PR. Comment/build-pr-imageson the PR and a second person approves. Nothing in gloo or solo-projects pulls these images; they are for testing a PR by hand.-patchNis a regular release. Mark every other suffix (-beta1,-rc1,-fips) as a pre-release, or the Release workflow stops before publishing.How a release works after this
v1.19.xcommit in the UI, with notes and the pre-release flag (for examplev1.19.27-beta1as a pre-release). It must be a person: the workflow rejects a release published by an App.v1.19.x, and the pre-release flag must match the version. If the flag is wrong, edit the release and use "Re-run failed jobs".release. A member ofsolo-io/gloo-release-ownersother than the publisher approves it, after checking the tag's commit is onv1.19.x.ci/cloudbuild/publish-artifacts.yamlas thegloo-releaseservice account. Images go to quay.io/solo-io and gcr.io/gloo-edge, the chart to gs://solo-public-helm.gloo.To stop a mistaken release, run the
gcloud builds cancelcommand the step log prints; cancelling the workflow run does not stop the build. Re-running a failed run attaches to the tag's existing build instead of publishing twice.How PR images work after this
/build-pr-images. The relay onmainstarts "PR images" on the PR's base branch; it can also be run from the Actions tab.ci/and Dockerfile changes first, because the build runs that code with the quay.io robot logged in.gloo-pr-buildservice account, with the same tags and chart bucket build-bot used. Each new push needs a new request.Known limit: once approved, a PR build could overwrite any tag in quay.io/solo-io and gcr.io/gloo-edge, release tags included. The approval is the control.
Learn more
What changes
.github/workflows/release.yamlpublishes after approval in environmentrelease.github/workflows/pr-images.yaml, on/build-pr-imagesplus approvalci/cloudbuild/run-tests.yamlalso cross-builds glooctlcloudbuild.yamlpublish-artifacts.yamlpublish-artifacts.yamlGITHUB_TOKENin Cloud Build.sha256filesregisterjob, solo-tools action pinned torelease-v0.2.0ci/cloudbuild/wait-for-build.sh, shared by both workflowsci/cloudbuild/README.mdReleases and PR images sectionsRelease notes, the destinations, image and chart names, and the builder images stay the same.
Before the first run
State on 2026-11-05.
gloo-releaseandgloo-pr-build, and secretgloo-quay-io-password, readable only by themgloo, accepting only solo-io/gloo, environmentrelease, andrelease.yamlon av*tag orpr-images.yamldispatched (workflow_dispatch) onv1.19.x-v1.22.x, each with its own service accountrelease: required reviewersgloo-release-owners, prevent self-review, admin bypass off, deployments fromv*tags andv1.19.x-v1.22.xGLOO_RELEASE_WIF_PROVIDERgloo(solo-io/solo-tools#509)gloo-quay-io-password(the secret has no version yet)GITHUB_TOKENciphertext, and make sure the org PAT and any shared machine-user token can't create releases on solo-io/glooGLOO_RELEASE_SAandGLOO_PR_BUILD_SAonce IT confirms the emailsglooprovider and both service accounts at cutover (all disabled now)v*tags immutable, so a published tag can't be moved to another commitmainafter the four release-line PRs (disable "Close PRs to main", reopen and merge, enable it again)Until the rotation and revocation are done, a PR can still decrypt the old credentials from git history through build-bot. After rotation, open PRs on an older base fail build-bot's publish step until they merge the new base.
Testing steps
2a6fe07candrelease-v0.2.0; only the pin and its comment moved.ghruns the request, approver, post-approval and relay scripts through 35 cases, including a wrong base, a moved head, a spoofed requester and approval by the requester or author.v1.19.27and-patch1to a regular release and-beta1,-rc2,-fipsto a pre-release, and fails on a wrong flag.releaseand thatgcloud builds describeshows thegloo-releaseservice account.Checklist: