Skip to content

Publish per-binary galactic-cni and galactic-router images#224

Merged
privateip merged 3 commits into
mainfrom
feat/publish-workflow
Jul 10, 2026
Merged

Publish per-binary galactic-cni and galactic-router images#224
privateip merged 3 commits into
mainfrom
feat/publish-workflow

Conversation

@privateip

Copy link
Copy Markdown
Contributor

Summary

  • Add .github/workflows/publish.yaml, modeled on the compute repo's publish.yaml: publishes galactic-cni and galactic-router as separate images via the reusable datum-cloud/actions docker-publish workflow, plus config/ as a Kustomize OCI bundle, on every push and published release.
  • Add containers/galactic-router/Dockerfile (distroless-static, mirrors deploy/containerlab/containers/galactic-router/Dockerfile) so galactic-router actually gets built and published.
  • Repoint config/cni/daemonset.yaml and config/router/base/daemonset.yaml from the old shared ghcr.io/datum-cloud/galactic:latest to ghcr.io/datum-cloud/galactic-cni:latest / ghcr.io/datum-cloud/galactic-router:latest.
  • Update docs/agents/ARCHITECTURE.md and README.md to drop the now-stale "no production image build path" constraint.

This fixes the gap recorded in ARCHITECTURE.md's Known Constraints: the previous shared image only ever built galactic-cni while the router DaemonSet ran command: [/galactic-router] against it — the image advertised a binary it never built. Splitting into two per-binary images (matching what deploy/containerlab/ already does for local dev) fixes this directly instead of resurrecting the broken shared-image pattern.

Test plan

  • task lint passes
  • task build passes
  • docker build -f containers/galactic-router/Dockerfile . succeeds; ran the resulting binary and confirmed --help/flag output
  • kubectl kustomize config/ renders the four container specs with the correct new image references
  • CI run on this PR (lint/build/test-unit/test-e2e via ci.yaml)
  • publish.yaml will only actually push images once merged/run on push/release — not exercised by this PR itself

🤖 Generated with Claude Code

Add .github/workflows/publish.yaml (modeled on compute's) plus a
production containers/galactic-router/Dockerfile, and repoint the
DaemonSets at ghcr.io/datum-cloud/galactic-cni and
ghcr.io/datum-cloud/galactic-router instead of a shared galactic:latest
image, fixing the gap where that shared image advertised
galactic-router without ever building it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@privateip privateip requested a review from a team as a code owner July 10, 2026 18:49
Comment on lines +33 to +42
publish-kustomize-bundles:
permissions:
id-token: write
contents: read
packages: write
uses: datum-cloud/actions/.github/workflows/publish-kustomize-bundle.yaml@v1.20.0
with:
bundle-name: ghcr.io/datum-cloud/galactic-kustomize
bundle-path: config
secrets: inherit

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You'll want to leverage this new feature I pushed to the shared action that lets you stamp the kustomize bundle with multiple image versions. This will embed the version tag in the kustomize bundle.

See datum-cloud/actions#89

privateip and others added 2 commits July 10, 2026 15:00
…publish

containers/galactic-cni/Dockerfile's host-device install set GOBIN while
cross-compiling, which Go's toolchain rejects outright ("cannot install
cross-compiled binaries when GOBIN is set") -- only surfaced once
publish.yaml started building linux/arm64 on an amd64 runner. Let
`go install` use its default (arch-suffixed when cross-compiling) output
path and copy the binary out instead.

Also add `attestations: write` to the two image-publish jobs: the
galactic-router push was denied with permission_denied/write_package on
its first-ever push to a brand new package, while the kustomize bundle
job (no attestation manifests) succeeded creating an equally-new package
in the same run -- pointing at the attestation manifest push needing its
own permission scope.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Use the new `images` input on publish-kustomize-bundle.yaml
(datum-cloud/actions PR #89, released as v1.20.0, which we already
pin) to stamp galactic-cni's and galactic-router's real published
tags into config/cni and config/router/base respectively, instead of
shipping the bundle with the manifests' hardcoded :latest refs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@privateip privateip requested a review from scotwells July 10, 2026 19:31
@privateip privateip merged commit 04b6cca into main Jul 10, 2026
10 of 11 checks passed
@privateip privateip deleted the feat/publish-workflow branch July 10, 2026 19:31
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.

2 participants