Skip to content

Deploy: Helm chart published to ghcr; personal deploy config moves out - #326

Merged
oldsj merged 2 commits into
mainfrom
chart
Oct 24, 2026
Merged

oldsj merged 2 commits into
mainfrom
chart

Conversation

@oldsj

@oldsj oldsj commented Oct 24, 2026

Copy link
Copy Markdown
Owner

What

  • charts/mainloop: a Helm chart rendering what k8s/apps/mainloop/base plus the overlays did. Deployment-specific parts are values: strategy, resources, site config, control-plane auth, database (CNPG or local), and the dev commands.
  • CI publishing (images.yml, new chart job): on each push to main, CI packages the chart as oci://ghcr.io/oldsj/charts/mainloop version 0.1.<run number>, appVersion <sha7>, with that commit's image digests pinned. Run numbers only grow, so a late or re-run job never outranks a newer chart.
  • Kind (make kind-up / make dev) installs the chart with values-kind.yaml.
  • Live dev instance (make dev-live) installs the chart.
    • Its values and *-dev kagent agents come from $MAINLOOP_DEV_CONFIG, and its kube context from $DEV_LIVE_CONTEXT, either from the environment or from .env.
    • None of the personal instance config lives here any more.
    • ci/live-dev-values.yaml and ci/production-values.yaml are generic examples using example.test.
  • Removed: overlays/kind and overlays/dev-live.
  • Kept until production moves to the chart: overlays/prod, devloop and the release job. A follow-up removes them.

Verification

  • server/internal/deploytest was ported to helm template (59 subtests passing).
  • Chart defaults render the same objects as the old base, and Kind renders the same as the old kind overlay. The only difference in both is the backend-ingress Tailscale peer, which was dropped from the defaults.
  • Rendering with the infrastructure prod values matches Argo's current prod render apart from the intended resource right-sizing and a checksum/config annotation that replaces the manual config-revision.
  • helm lint is clean, and the packaging steps were dry-run locally.
  • Not run: make dev / make dev-live through DevSpace (DevSpace isn't installed on the machine I worked on).
    • The live profile uses helm upgrade --take-ownership to adopt the objects kubectl created earlier. That needs Helm ≥ 3.17.

After merge

  • The first chart run creates the charts/mainloop package as private. Make it public once in its package settings, as with charts/opencozy, so Argo can pull it without credentials.
  • Set MAINLOOP_DEV_CONFIG and DEV_LIVE_CONTEXT before the next make dev-live.

Follow-ups (not in this PR)

  • The frontend image still bakes in VITE_API_URL=https://mainloop-api.olds.network (in images.yml and the README).
  • docs/specs/warm-state.md has historical run notes naming personal hosts.

🤖 Generated with Claude Code

oldsj and others added 2 commits October 23, 2026 20:23
…main

charts/mainloop renders what k8s/apps/mainloop/base and its overlays did, with the
deployment-specific parts (strategy, resources, site config, control-plane auth, database,
commands) as values. CI packages it as oci://ghcr.io/oldsj/charts/mainloop 0.1.<run number>
with the commit's image digests pinned.

Kind and the live dev instance now install the chart. The live instance's values and dev
kagent agents come from MAINLOOP_DEV_CONFIG and its kube context from DEV_LIVE_CONTEXT, so
neither lives here; ci/live-dev-values.yaml is a generic example. The kind and dev-live
overlays are gone. The prod overlay, devloop and the release job stay until production moves
to the chart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@oldsj
oldsj merged commit 5a5772c into main Oct 24, 2026
13 checks passed
@oldsj
oldsj deleted the chart branch October 24, 2026 00:37
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.

1 participant