Package as Helm, publish images to ghcr.io - #2
Merged
Conversation
The kubebuilder config/ kustomize manifests are gone; the deployable artifact is now chart/address-controller. The chart's CRDs (chart/address-controller/crds/) and ClusterRole (templates/role.yaml) are controller-gen output written directly into the chart by 'make manifests' — generated, never hand-edited. The deployment, RBAC binding, and service account are hand-written templates in the cozyplane style. Helm's crds/ directory is installed on first install but never upgraded or deleted by Helm: CRD upgrades go through 'make install-crds', and uninstalling the chart deliberately leaves the IPAddress ledger behind. A leases RBAC marker on main() covers leader election, replacing the static kustomize leader-election Role. The scaffolded e2e suite went with the kustomize tree it deployed through; samples moved to examples/. Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>
The Dockerfile cross-compiles on the native build platform (GOARCH per target, no QEMU for the toolchain) on golang:1.26 and ships the static binary on distroless/static:nonroot. The release workflow publishes ghcr.io/lllamnyp/address-controller as :main, :main-<sha>, and semver tags on v* tags; 'make docker-build docker-push' does the same locally with a git-describe tag. Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>
The AttachedTo printer column shows status.associatedTo.name — without it the association, a load-bearing part of the address lifecycle, was invisible except through -o yaml. Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>
Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>
lllamnyp
marked this pull request as ready for review
July 23, 2026 06:39
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.
Replaces the kubebuilder kustomize tree with Helm packaging and wires up image publishing to ghcr.io.
What changed
config/is gone; the deployable artifact ischart/address-controller. The chart follows the cozyplane layout: hand-written Deployment / ServiceAccount / ClusterRoleBinding templates plus values for image, replicas, leader election, metrics, and resources.make manifestsruns controller-gen with output redirected into the chart: the three CRDs land inchart/address-controller/crds/, the ClusterRole intemplates/role.yaml. Neither is ever hand-edited.crds/on first install but never upgrades or deletes it — sohelm uninstallcannot take theIPAddressledger down with it. CRD upgrades go throughmake install-crds(plainkubectl applyof the generated files).controller.leaderElect), backed by a new leases RBAC marker onmain()so the generated role covers what the flag needs — replacing kustomize's static leader-election Role.CGO_ENABLED=0, per-targetGOARCH) ontodistroless/static:nonroot. Areleaseworkflow pushesghcr.io/lllamnyp/address-controlleras:main+:main-<sha>on pushes to main and semver tags onv*tags;make docker-build docker-pushdoes the same locally with a git-describe tag. The image is already published (:main, single-arch amd64 from the local build; CI takes over multi-arch on merge).examples/.Not carried over from cozyplane (deliberately)
SOURCE_DATE_EPOCH,rewrite-timestamp,-buildvcs=false) — that's cozyplane's digest-pin loop; nothing here consumes image digests yet.make helm-packagestamps and packages intodist/; publishing can follow when there's a consumer.🤖 Generated with Claude Code