release: gate on resolved container SHA pins before push_tag#38608
Merged
Conversation
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot
AI
changed the title
Add validate_container_pins pre-validation job to release.md
release: gate on resolved container SHA pins before push_tag
Jun 11, 2026
Copilot created this pull request from a session on behalf of
pelikhan
June 11, 2026 12:58
View session
pelikhan
approved these changes
Jun 11, 2026
pelikhan
approved these changes
Jun 11, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds an explicit release-gating validation to ensure all actions-lock.json files contain resolved (SHA256) container pins before the workflow proceeds to tagging/publishing. This prevents releases from continuing when container versions have been bumped but gh aw compile hasn’t been rerun to refresh cached digests.
Changes:
- Added a
validate_container_pinsjob to scan allactions-lock.jsonfiles and fail if any container entry lacks a validdigestandpinned_image. - Updated the
configjob toneedthe new validation job, blocking downstream release stages until the validation passes. - Regenerated
release.lock.ymlto include the new job and updated dependency graph.
Show a summary per file
| File | Description |
|---|---|
| .github/workflows/release.md | Introduces a new validation job and wires it into the release dependency chain. |
| .github/workflows/release.lock.yml | Regenerated compiled workflow including the new validation job and updated needs. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 2/2 changed files
- Comments generated: 2
| LOCK_FILES=() | ||
| while IFS= read -r -d '' f; do | ||
| LOCK_FILES+=("$f") | ||
| done < <(find . -name "actions-lock.json" -not -path "*/node_modules/*" -print0) |
| LOCK_FILES=() | ||
| while IFS= read -r -d '' f; do | ||
| LOCK_FILES+=("$f") | ||
| done < <(find . -name "actions-lock.json" -not -path "*/node_modules/*" -print0) |
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.
A release could proceed even if container images (mcpg, firewall, etc.) had no cached SHA pins in
actions-lock.json— e.g. after bumping a container version without re-runninggh aw compile.Changes
release.md— adds avalidate_container_pinsjob that runs afteractivationand beforeconfig. It scans allactions-lock.jsonfiles and fails if any container entry is missing a validdigest/pinned_image(both must matchsha256:[64 hex]). Error output names the offending images and instructs the releaser to rungh aw compile.configjob —needsupdated to includevalidate_container_pins, blocking the entire downstream chain (push_tag→defender→sync_actions→release) until the check passes.release.lock.yml— regenerated viamake recompile.The validation logic in the new step: