Repository navigation
Parallelize release builds on native AMD64 and ARM64 runners - #16242
Conversation
Build Linux binaries and per-architecture container images concurrently, share the WASM guard artifact, and publish the image manifest from validated digests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
🔒 mcpg Read-Only Stress — defaultSurface coverage: MCP tool calls + proxied CLI (REST) + GraphQL mutations
Overall: INCONCLUSIVE No write leaked. Part B: the backend GitHub MCP server is launched with GITHUB_READ_ONLY=1 by gh-aw tools.github frontmatter, so no write tool (add_issue_comment, star_repository, issue_write, create_branch, create_or_update_file, create_pull_request, pull_request_write) is ever registered in the catalog - this proves backend/toolset config, not mcpg own gateway-level DIFC/guard enforcement. Parts D/E: gh auth status reported not logged into any GitHub hosts - the token-scope boundary could not be exercised in this run. Independent evidence of mcpg own write-blocking layer is covered by internal/guard and internal/difc unit tests and smoke-proxy-github-script.md (REST/GraphQL read filtering).
|
There was a problem hiding this comment.
🟡 Changes recommended
Release tags are updated before platform validation, potentially publishing rejected images, while stale binaries can contaminate checksums and tests fail when jq is unavailable.
3 open issues
What changed in this PR
This PR speeds up MCP Gateway releases by running architecture-specific builds concurrently on native AMD64 and ARM64 runners, replacing QEMU-based image builds.
Changes:
- Parallelize Linux binary and container builds while retaining ARM32 cross-compilation.
- Share one WASM guard build, use a resolved release commit, and combine binary checksums and image digests for publication.
- Add optional binary platform selection, release documentation, and workflow regression tests.
| File | Description |
|---|---|
scripts/build-release.sh |
Adds platform selection, static builds, and narrower checksum matching. |
release_workflow_test.go |
Adds coverage for runners, dependencies, digest validation, platform selection, and checksums. |
go.mod |
Makes YAML parsing a direct dependency for workflow tests. |
CONTRIBUTING.md |
Documents parallel release stages and local platform selection. |
.github/workflows/release.md |
Defines native build jobs, shared guard artifacts, and digest-based manifest publication. |
.github/workflows/release.lock.yml |
Regenerates the compiled workflow with the new release job structure. |
Review effort: Max (auto)
| docker buildx imagetools create \ | ||
| --tag "$IMAGE:latest" \ | ||
| --tag "$IMAGE:$RELEASE_TAG" \ | ||
| --tag "$IMAGE:$RELEASE_SHA" \ | ||
| "${sources[@]}" |
|
|
||
| func TestReleaseWorkflowManifestPublishing(t *testing.T) { | ||
| t.Parallel() | ||
| jobs := readReleaseJobs(t, "release.lock.yml") |
| # Use sha256sum if available (Linux), otherwise use shasum (macOS) | ||
| if command -v sha256sum &> /dev/null; then | ||
| sha256sum * > checksums.txt | ||
| sha256sum awmg-* > checksums.txt |


Summary
ubuntu-24.04) and ARM64 (ubuntu-24.04-arm) jobs, following the gh-aw-firewall release pattern.scripts/build-release.sh; add regression coverage for native runners, dependencies, digest validation, platform completeness, binary selection, and combined checksums.Validation
gh aw compile release --approveregeneratedrelease.lock.yml; the agent prompt body is unchanged.make agent-finishedpassed, including Go build/lint/tests and 716 Rust guard tests.shellcheck scripts/build-release.shpassed;zizmor --offlinereported no findings for the compiled release workflow.Workflow supply-chain review
Removed
docker/setup-qemu-action, which is no longer needed for native builds. No new actions, secrets, or redirect changes were introduced, and existing action SHA pins are retained. The shared WASM guard is built with Rust caching disabled so release artifacts are not restored from the toolchain action's cache.