Cut over #22 stock-caddy restructure to the cluster #23
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/galaxy-gen#23
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
The code for #22 (serve dist from stock
caddy:2-alpine+ mounted bundle) is onmain(commit5197f8b): Dockerfile stage 2 is a pure busybox data image,deploy/main.ymlruns stock caddy + a bundle-loader initContainer + two emptyDirs. This issue tracks the deploy cutover of that restructure to the live cluster.Deploy cutover (the load-bearing part)
CI on push to
main(.forgejo/workflows/build-publish-deploy.yml) only runskubectl set image- it does notkubectl applythe restructureddeploy/main.yml. So a plain merge breaks serving:set imagepoints the current live single-container deployment'scoilysiren-galaxy-gencontainer at the new non-serving busybox image, and the new pod spec (initContainer + volumes + stock caddy) never gets applied.A
deployverb (coily exec deploy->make deploy) is being added to.coily/coily.yamlso the apply is a first-class command. Cutover sequence:coily exec deploy- build + push the busybox bundle image for HEAD sha, thenkubectl applythe rendered newmain.ymlandrollout status. This stands up the initContainer + emptyDir + stock-caddy structure and rolls it healthy.set imagematches the initContainer by name, so ongoing rolls are clean.Future simplification
Once kai-server is on k8s 1.33+ (ImageVolume GA), swap the initContainer + emptyDir for a
volumes[].imagemount and change Dockerfile stage 2 frombusyboxtoFROM scratch- the bundle image is already pure data. Same pattern is slated for therepos.coilysiren.mecatalog-graph viewer (see #22 cross-link).Split out
v0.14.0pre-commit WIP adoption moved to #24.Cut over #22 stock-caddy restructure to the cluster (+ finish v0.14.0 pre-commit adoption)to Cut over #22 stock-caddy restructure to the clusterReopening - the cutover did not complete. The
deployverb landed (dcb1533) but running it surfaced a stack of pre-existing deploy-pipeline breakage, none of it from the #22 restructure:5197f8banddcb1533triggered no CI runs - newest run is run#14 on the old5b03ec2. So nothing rebuilds on push right now.deployjob has never succeeded. Everydeploytask inactions task listisfailure(run#14/#13/#12...); onlytestpasses. galaxy-gen has never actually deployed via this pipeline./v2/_catalog-> onlyprobe). No galaxy-gen image was ever pushed, so an apply-only cutover is impossible - the initContainer would have nothing to pull.coily exec deploy(the manual path) failed twice:docker pushto192.168.0.194:30500->unexpected EOF(.publishError 1).docker/dockerfile:1.7from docker.io -> macOS keychainerror getting credentials ... User canceled (-128). Needs an interactive terminal to approve the keychain prompt (ordocker logout/ login fix), and the registry-push EOF still needs explaining.So the code is correct and merged; the cutover is blocked on deploy-infra that's out of band from #22. Likely needs: (a) bring the Forgejo Actions runner back / confirm it's processing, (b) fix the CI deploy job (separate long-standing issue), or (c) run the manual
coily exec deployinteractively on a host with working docker.io creds + registry push.Push now fails on VM->LAN routing, not TLS. After whitelisting the registry as insecure (OrbStack
~/.orbstack/config/docker.json+ an engine restart viaorbctl stop && orbctl start- noteorb restartonly restarts Linux machines, not the docker engine), the HTTPS mismatch is gone. But the blob push nowdial tcp 192.168.0.194:30500: i/o timeout.Diagnosis:
http://192.168.0.194:30500/v2/: rock solid (HTTP 200, ~5ms connect, 3/3).docker run busybox wget http://192.168.0.194:30500/v2/): times out.network.subnet4 = 192.168.138.0/23- no overlap with the LAN192.168.0.0/24, so not a subnet conflict.start VM: timed out waiting for VM to start, so the VM likely came up with degraded networking.So the docker daemon (inside OrbStack's VM) can't reach the in-cluster registry on the LAN, even though the host can. The #22 image builds fine; it just can't be pushed from this Mac's OrbStack VM in its current state.
Paths forward:
coily exec deploy. Cheapest if it's just degraded VM net.docker savethe image on the Mac (build works), transfer to kai-server over tailnet,docker load/ push to the registry from kai-server where it's localhost. Bypasses VM->LAN entirely.Cutover is live and verified.
https://galaxy-gen.coilysiren.menow serves from stock caddy + mounted bundle.Final state:
coilysiren-galaxy-gen-app-*is2/2 Running; the 11-day-old single-container pod is retired.rollout status= successfully rolled out.caddy:2-alpine(unmodified), initContainer = the bundle data image192.168.0.194:30500/coilysiren-galaxy-gen:1cbaca9...(amd64), plus the ts sidecar./usr/share/caddy(the emptyDir the initContainer filled) holds the real bundle:*.module.wasm,index.html,index.js, worker + vendor chunks./healthz-> 200;/-><title>galaxy-gen</title>; the real*.wasm-> 200content-type: application/wasm+x-content-type-options: nosniff, so the Caddyfile traveled in the bundle and its rules are live.What it took (all deploy-infra, none from the #22 code):
--platform linux/amd64in the makefile (1cbaca9).orbctl stop && start); the daemon also needed a clean OrbStack relaunch to restore VM->LAN routing..deploytargetskai-server:6443(tailnet100.69.164.66), which times out from this Mac. The apply was completed viacoily ops kubectl(LAN192.168.0.194:6443). Socoily exec deploy's apply step still fails locally as-is - see follow-up.