Container images
Pin these immutable multi-arch index digests (not the floating v1.2.0 tag):
- gmc —
ghcr.io/actions-gateway/gmc@sha256:6b7efbfe3dfb8d2554445a2e8b122a48cae2cac393d6e388d84c0c97a08bc0a5 - agc —
ghcr.io/actions-gateway/agc@sha256:18709aef55710f5ac4195a3f0f9129671bb752f6484807c782fa12994569bbcf - proxy —
ghcr.io/actions-gateway/proxy@sha256:4c21daad767f21f164b194d4b77b7add0f06a53e290704cfefe227a70147ca0e - worker —
ghcr.io/actions-gateway/worker@sha256:67d3cbc581c4ec1f6aaf3e3d028ffbc46cb7d524f506332f44a8b547913d1bf3 - wrapper —
ghcr.io/actions-gateway/wrapper@sha256:396e9625cc3e1e253848535f16b74c4e3d730adc8717fe631a74eeea81390061
Verify
Verify every image + chart signature and the SLSA build provenance:
make verify-release VERSION=v1.2.0
What's Changed
- docs(plan): file the release-friction-reduction plan (Q293-Q296) by @karlkfi in #602
- docs(status): remove Q278 (v1.1.0 pre-GA dogfood gate done) by @karlkfi in #603
- docs: close Q242 — G.1 proxy destination allowlist shipped, archive its plan by @karlkfi in #604
- feat(scripts): teardown-safe live-validation harness for Q243 egress-IP pinning by @karlkfi in #605
- ci: make the CI quality gates requireable via always-running summary gates (Q297) by @karlkfi in #606
- feat(scheduling): PodScheduling topologySpreadConstraints + infra-gated priorityClassName (Q284) by @karlkfi in #607
- ci: give each CI gate job a unique, individually-requireable id (Q297) by @karlkfi in #609
- test(gmc-e2e): fix manager-metrics curl-pod flake (Q299) by @karlkfi in #608
- docs: mark Q297 complete — CI gate contexts now required by @karlkfi in #610
- ci(publish): make publish.yml own the whole GitHub Release (Q293) by @karlkfi in #611
- fix(e2e): unthrottle kindnetd — kind's 100m CPU limit starves the in-band netpol enforcer (Q300) by @karlkfi in #612
- docs(claude): plan-doc findings must trail evidence — no conclusion-shaped drafts by @karlkfi in #614
- docs(status): move shipped-fix flakes (Q291/Q299/Q300) to Flake watch by @karlkfi in #613
- build(e2e): write the JUnit report to repo-local tmp/, not /tmp by @karlkfi in #615
- fix(e2e): drain tenant namespaces before undeploy so finalizers clear (Q301) by @karlkfi in #616
- docs(release): correct dogfood gate steps + narrow Calico path filter (Q296) by @karlkfi in #617
- fix(dogfood): preserve RunnerTemplate runner image on setup.sh re-run (Q295) by @karlkfi in #618
- feat(dogfood): one-command pre-GA release-validation gate wrapper (Q294) by @karlkfi in #619
- fix(validate-egress-ip): close Q243 — per-tenant egress-IP live PASS + harness fixes by @karlkfi in #620
- fix(coverage): mktemp into repo-local tmp/ with a cleanup trap by @karlkfi in #621
- docs(status): file Q302 proxy mTLS listener-bind flake (flakes-first) by @karlkfi in #622
- test(proxy): de-flake s.ready bind wait under cover-check (Q302) by @karlkfi in #623
- docs(status): file usability-audit backlog Q303–Q310 + fix v2 AGCAvailable reason (Q309) by @karlkfi in #624
- docs(plan): Kata plan refinements — local-validation limits + two-variant dogfood arch (Q286) by @karlkfi in #625
- docs(status): file operability-audit backlog Q311–Q318 (monitoring-surface gaps) by @karlkfi in #626
- docs(status): structure the v1-sunset→v2-only epic (Progress milestone + Q264/Q273 reframe + §5a ladder) by @karlkfi in #627
- docs(status): add v1-sunset→v2-only Progress milestone + reframe Q273 as blocked by @karlkfi in #628
- feat(monitoring): alert on page/alert-worthy metrics with no rule (Q312) by @karlkfi in #629
- feat(chart): fail all four image digests at helm render time (Q307) by @karlkfi in #630
- feat(agc): surface v2 RunnerSet worker-capacity conditions (Q303) by @karlkfi in #632
- feat(migrate): wrong-cluster guards + ship gag-migrate as a signed release artifact (Q306) by @karlkfi in #631
- docs(status): remove orphaned Q307 Queue row (shipped in #630) by @karlkfi in #633
- feat(monitoring): add runbook_url to every shipped alert (Q313) by @karlkfi in #635
- feat(observability): emit build_info version gauge from GMC, AGC, proxy (Q318) by @karlkfi in #634
- feat(agc): set Ready=False on v2 RunnerSet's silent classic-path failures (Q308) by @karlkfi in #636
- feat(gmc): v2 ActionsGateway RunnerSetsDegraded child-health rollup (Q304) by @karlkfi in #637
- feat(observability): wire proxy_connect_denied_total as an SSRF/egress-denial signal (Q316) by @karlkfi in #638
- feat(gmc): emit Events from the v2 ActionsGateway and EgressProxy reconcilers (Q305) by @karlkfi in #639
- feat(gmc): v2-aware GMC gauges + EgressProxy proxy conditions (Q320) by @karlkfi in #640
- fix(gmc): reject GitHub-bypassing noProxyCIDRs on the v2 EgressProxy by @karlkfi in #641
- docs: v1<->v2 gap analysis — API surface + controller behavior (files Q322-Q329) by @karlkfi in #642
- feat(gmc): add spec.logLevel to the v2 EgressProxy (Q327, v1 parity) by @karlkfi in #646
- fix(gmc): close the v2 noProxyCIDRs GHES admission gap (Q322) by @karlkfi in #645
- fix(v2): wire TemplateDeleted/ProxyDeleted and complete the v2 condition vocabulary (Q309) by @karlkfi in #649
- docs(status): revive Q302 — s.ready bind-wait flake recurred, back to top of Queue by @karlkfi in #650
- feat(gmc): fail-closed v2 ActionsGateway teardown + serialized reconciles (Q328) by @karlkfi in #648
- fix(v2): ResourceQuota watch on EgressProxy/RunnerSet + FQDN-mode requeue (Q326) by @karlkfi in #647
- test(proxy): unmask listener bind errors and drop wall-clock bind waits (Q302) by @karlkfi in #651
- feat(dogfood): build the Kata e2e worker overlay + variant knob (Q286) by @karlkfi in #652
- docs(status): add Q331 — strip Apache file headers + lint gate by @karlkfi in #654
- chore(tools): drop stale kustomize vestiges (Helm-only install path) by @karlkfi in #655
- fix(gmc): restore three dropped v1 admission guards on the v2 surface (Q323) by @karlkfi in #653
- docs(dogfood): record the embedded-kustomize decision + revisit trigger by @karlkfi in #656
- fix(agc): surface ScaleSet listener session-failure conditions/events (Q325) by @karlkfi in #657
- fix(e2e): make the Vault workload-identity suite Kata-compatible (no IPC_LOCK) by @karlkfi in #658
- feat(dogfood): flip e2e default to Kata after live AC#5 green (Q286) by @karlkfi in #659
- docs+rbac: clear v1↔v2 gap-analysis minor cleanups (Q329) by @karlkfi in #660
- fix(monitoring): scope tenant dashboard proxy panels to $namespace (Q314) by @karlkfi in #661
- feat(monitoring): scale-set acquisition-tier observability surfaces (Q311) by @karlkfi in #662
- feat(monitoring): tenant dashboard panels for unvisualized counters (Q315) by @karlkfi in #663
- feat(gmc): export v2 ActionsGateway condition gauges (Q321) by @karlkfi in #666
- fix(gmc): roll up listener-pushed RunnerSet impairments into RunnerSetsDegraded (Q330) by @karlkfi in #664
- docs(observability): bring quota_retries metrics to eviction-retry parity (Q317) by @karlkfi in #665
- fix(monitoring): resolve tenant dashboard gridPos overlap from Q315 merge by @karlkfi in #667
- docs(monitoring): refresh dashboard screenshots for Q311 scale-set panels by @karlkfi in #669
- fix(scaleset): deregister stale runner record on name conflict (Q334) by @karlkfi in #668
- docs(status): add Q336-Q343 from session-friction/token-cost review by @karlkfi in #670
- docs(monitoring): fuller, livelier dashboard preview screenshots by @karlkfi in #671
- docs(status): defer Q344 (scaleset list/prune tooling) by @karlkfi in #672
- docs(dev): promote session-learned gotchas into durable docs by @karlkfi in #673
- docs(status): complete Q314 (orphaned row after sibling merge) by @karlkfi in #674
- docs(testing): Q343 measured — worktree lint/build caches are already shared by @karlkfi in #675
- build(deps): bump the docker-base group across 5 directories with 2 updates by @dependabot[bot] in #643
- build(deps): bump updatecli/updatecli-action from 3.3.0 to 3.4.0 in the actions group by @dependabot[bot] in #644
- fix(listener): clear failure conditions on recovery (Q332) by @karlkfi in #676
- feat(agc): wake reconciler on pushed conditions/events (Q333) by @karlkfi in #677
- docs(testing): codify no-foreground-poll + slow-tier timeout rules (Q339) by @karlkfi in #678
- docs(plan): archive shipped q264 scale-set phases, keep residual (Q337) by @karlkfi in #679
- docs(operations): restructure observability.md for selective reading (Q338) by @karlkfi in #680
- docs(plan): split gke-dogfood runbook from archived findings (Q336) by @karlkfi in #681
- feat(dogfood): make Athens cache PVC optional, ephemeral by default by @karlkfi in #682
- docs: trim CLAUDE.md hooks/testing sections to pointers (Q340) by @karlkfi in #683
- docs(dev): migrate dispatch self-heal contract to pr-sentinel (Q346) by @karlkfi in #684
- docs(status): add Q347 go-throttle compound-form rewrite by @karlkfi in #685
- docs: defer Q348 — re-trim CLAUDE.md as guard-plugin fixes land by @karlkfi in #686
- chore: remove scaffolded Apache per-file license headers, gate against return (Q331) by @karlkfi in #687
- refactor(agc): split oversized goroutine.go and provisioner.go (Q341) by @karlkfi in #689
- fix(hooks): go-throttle rewrites compound -race forms instead of blocking (Q347) by @karlkfi in #688
- docs(status): file e2e SkippedJobIsRedeliveredAfterCapacityFrees flake (Q349) by @karlkfi in #690
- test(e2e): gate redelivery wait on HPA scaling-active to fix flake (Q349) by @karlkfi in #692
- docs: retire stale go-throttle compound recipe post-Q347 (Q348) by @karlkfi in #693
- test(agc): lint v2alpha1/v2beta1 conditions.go byte-sync (Q345) by @karlkfi in #691
- fix(dogfood): scale system pool for the e2e window so on-demand AGC fits (Q335) by @karlkfi in #694
- feat(gmc): scrapable v2 EgressProxy metrics with mTLS + ServiceMonitor (Q324) by @karlkfi in #695
- feat(dogfood): script recurring e2e ops into lifecycle scripts (Q342) by @karlkfi in #696
Full Changelog: v1.1.0...v1.2.0