Skip to content

feat(images): mirror the kagent line, the Substrate line and the Flux controllers under their upstream paths - #1235

Merged
teemow merged 1 commit into
mainfrom
feat/mirror-kagent-substrate-fluxcd-upstream-paths
Sep 18, 2026
Merged

teemow merged 1 commit into
mainfrom
feat/mirror-kagent-substrate-fluxcd-upstream-paths

Conversation

@teemow

@teemow teemow commented Sep 18, 2026

Copy link
Copy Markdown
Member

Closes #1229.

What

Three sets of images the agent-platform charts pull from ghcr.io get a gsoci copy whose destination keeps the upstream path (nested repositories, as the strimzi entries already do), so a consumer changes one registry value per line and keeps the repositories and digests the charts publish:

Source Destination Tags
ghcr.io/giantswarm/kagent/{controller,ui,golang-adk,claude-harness} gsoci.azurecr.io/giantswarm/kagent/<image> release tags X.Y.Z-gs.N from 0.11.0-gs.16
ghcr.io/giantswarm/substrate/{ateapi,atecontroller,atelet,atenet,podcertcontroller,ateom-gvisor} gsoci.azurecr.io/giantswarm/substrate/<component> release tags X.Y.Z-gs.N from 0.0.30-gs.4
ghcr.io/fluxcd/{source-controller,helm-controller} gsoci.azurecr.io/giantswarm/fluxcd/<controller> >= v1.9.0 / >= v1.6.0 (the Flux 2.9 line)
  • kagent entries in images/renamed-kagent.yaml; Substrate in a new images/renamed-substrate.yaml (added to the retag-renamed-images matrix); the Flux controllers in images/renamed-images.yaml next to the flattened fluxcd-* copies, which the flux-operator cannot compose from one registry value.
  • The release-tag filter with a prerelease semver floor is the agentgateway line's pattern: dev builds (X.Y.Z-dev.…) and SBOM tags (sha256-….sbom) stay in ghcr.
  • The kagent chart references golang-adk and claude-harness by the index digest stamped at publish. skopeo copy --all copies the index unchanged, so the digest resolves at the destination as well.
  • No code change: override_repo_name is used verbatim in the destination, so a slash keeps a nested path. Its comment (in main.go and the README copy) now says so.

Tests

  • TestFilterTags pins the tag selection of these shapes: the -gs.N filter with a prerelease floor keeps 0.11.0-gs.16, 0.11.0-gs.20, 0.11.1-gs.1, drops 0.11.0-gs.15, dev and SBOM tags; the plain >= v1.9.0 floor drops release candidates and non-semver tags.
  • TestRenamedImagesFiles parses every images/renamed-*.yaml the way retagger run does and validates each entry (semver constraint, filter and pattern compile), so a broken entry fails in CI rather than in the nightly run.
  • go test ./..., golangci-lint (pre-commit) and yamllint (the validate-images-yaml config) pass locally.

Verification after merge

build_retag on main copies the tags. Then crane digest on source and destination must agree for golang-adk and claude-harness at the chart's stamped digests, and crane manifest must resolve every Substrate component at 0.0.30-gs.4 and the two Flux controllers. The evidence goes on #1229.

… controllers under their upstream paths

The agent-platform charts pull three sets of images from ghcr.io that have
no gsoci copy. Mirror them with the destination keeping the upstream path,
so a consumer changes one registry value per line and keeps the
repositories and digests the charts publish:

- the Giant Swarm kagent line, ghcr.io/giantswarm/kagent/{controller,ui,
  golang-adk,claude-harness} -> gsoci.azurecr.io/giantswarm/kagent/<image>,
  release tags X.Y.Z-gs.N from 0.11.0-gs.16 (images/renamed-kagent.yaml);
- the Giant Swarm Substrate line, ghcr.io/giantswarm/substrate/{ateapi,
  atecontroller,atelet,atenet,podcertcontroller,ateom-gvisor} ->
  gsoci.azurecr.io/giantswarm/substrate/<component>, release tags from
  0.0.30-gs.4 (new images/renamed-substrate.yaml, added to the matrix);
- the Flux controllers ghcr.io/fluxcd/{source,helm}-controller ->
  gsoci.azurecr.io/giantswarm/fluxcd/<controller> from the Flux 2.9 line
  (source-controller v1.9, helm-controller v1.6), next to the flattened
  fluxcd-* copies the flux-operator cannot compose from one registry value.

The release-tag filter with a prerelease floor is the agentgateway line's
pattern; dev builds and SBOM tags stay in ghcr. A slash in
override_repo_name already keeps a nested path (the strimzi entries), so
no code change: the field's comment now says so.

Tests: TestFilterTags pins the tag selection of these shapes;
TestRenamedImagesFiles parses and validates every images/renamed-*.yaml
the way `retagger run` does, so a broken entry fails in CI.
@teemow
teemow requested a review from a team as a code owner September 18, 2026 21:58
@teemow
teemow merged commit 7e312f7 into main Sep 18, 2026
5 checks passed
@teemow
teemow deleted the feat/mirror-kagent-substrate-fluxcd-upstream-paths branch September 18, 2026 22:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

mirror the kagent line, the Substrate line and the Flux controllers under their upstream paths

1 participant