promote dev -> main: registry host migration to dev.jinemi.com #162

Merged
emi merged 2 commits from dev into main 2026-08-01 23:25:07 +00:00
Owner

Promotion of dev to main (beta). Two commits:

  • 53e2eb7 registry: move the registry host to dev.jinemi.com, MCP to mcp.jinemi.com (#161)
  • 4dcd677 make: add root install/up/down for the local stack

Pre-promotion verification

The registry change alters the REGISTRY_HOST default that deploy.sh and
deploy-stack.sh pull from, and deploy.yml never passes REGISTRY_HOST
hosts fall back to that default. Checked the host-side prerequisites directly
rather than assuming:

  • Proven on dev. vps1 is running
    dev.jinemi.com/jinemi/thermograph/{backend,frontend}:sha-53e2eb7c842f
    the exact merge commit — with backend, frontend and lake all healthy. The
    new host worked end-to-end through a real build and deploy.
  • /etc/hosts pins present on both boxes — vps1 and vps2 each pin
    dev.jinemi.com and git.thermograph.org to 10.10.0.2.
  • vps2 reaches the new host over the mesh: dev.jinemi.com/v2/ returns
    401 (auth required) via 10.10.0.2, not 403 (off-mesh reject).
  • The missing docker login self-heals. vps2's stored credential is still
    only for git.thermograph.org, but REGISTRY_TOKEN is present in both
    /etc/thermograph.env and /etc/thermograph-beta.env, and deploy.sh
    sources the env file (L133) before the login (L285), so it re-logs in
    against the new host on the way through.
  • No unpinned node can pull: every service in both stacks is constrained
    to node.role == manager, i.e. vps2.

Both names address the same Forgejo and the same packages, so images already
pushed under the old prefix stay pullable and a rollback still resolves.

Promotion of `dev` to `main` (beta). Two commits: - `53e2eb7` registry: move the registry host to dev.jinemi.com, MCP to mcp.jinemi.com (#161) - `4dcd677` make: add root install/up/down for the local stack ## Pre-promotion verification The registry change alters the `REGISTRY_HOST` default that `deploy.sh` and `deploy-stack.sh` pull from, and `deploy.yml` never passes `REGISTRY_HOST` — hosts fall back to that default. Checked the host-side prerequisites directly rather than assuming: - **Proven on dev.** vps1 is running `dev.jinemi.com/jinemi/thermograph/{backend,frontend}:sha-53e2eb7c842f` — the exact merge commit — with backend, frontend and lake all healthy. The new host worked end-to-end through a real build and deploy. - **`/etc/hosts` pins present on both boxes** — vps1 and vps2 each pin `dev.jinemi.com` and `git.thermograph.org` to `10.10.0.2`. - **vps2 reaches the new host over the mesh**: `dev.jinemi.com/v2/` returns **401** (auth required) via `10.10.0.2`, not 403 (off-mesh reject). - **The missing `docker login` self-heals.** vps2's stored credential is still only for `git.thermograph.org`, but `REGISTRY_TOKEN` is present in *both* `/etc/thermograph.env` and `/etc/thermograph-beta.env`, and `deploy.sh` sources the env file (L133) before the login (L285), so it re-logs in against the new host on the way through. - **No unpinned node can pull**: every service in both stacks is constrained to `node.role == manager`, i.e. vps2. Both names address the same Forgejo and the same packages, so images already pushed under the old prefix stay pullable and a rollback still resolves.
emi added 2 commits 2026-08-01 23:20:23 +00:00
make: add root install/up/down for the local stack
All checks were successful
secrets-guard / encrypted (pull_request) Successful in 5s
shell-lint / shellcheck (pull_request) Successful in 7s
PR build (required check) / changes (pull_request) Successful in 19s
PR build (required check) / build-backend (pull_request) Has been skipped
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Has been skipped
PR build (required check) / gate (pull_request) Successful in 1s
Sync infra to hosts / sync-beta (push) Has been skipped
Sync infra to hosts / sync-prod (push) Has been skipped
Sync infra to hosts / sync-centralis (push) Has been skipped
secrets-guard / encrypted (push) Successful in 6s
Sync infra to hosts / sync-dev (push) Successful in 12s
shell-lint / shellcheck (push) Successful in 8s
4dcd6775c4
A fresh checkout had no working path to the stack locally. Neither compose
file carries a `build:` for backend or frontend -- each ships as its own
registry image -- so with no image present `make dev-up` fell through to
pulling the `:local` tag, which nothing publishes, and failed with 403
against a registry a laptop has no login for.

`install` builds both images from backend/Dockerfile and frontend/Dockerfile
under exactly the tag the compose files default to; `up` verifies they exist
and says what to run instead of retrying the pull. Image names are read back
from `docker compose config --images` rather than restated here, so an org
rename cannot leave this file building a tag nothing runs.

infra's dev-up/dev-down now set COMPOSE_PROJECT_NAME=thermograph-dev, which
matches deploy/deploy-dev.sh and what the root CLAUDE.md already described;
a local run previously landed in the prod-shaped `thermograph` project. Drop
dev-up's `--build`, a no-op since the Dockerfiles moved out of infra, and
correct the comment claiming a 0.0.0.0 default -- the overlay has published
on loopback since dev moved to a public VPS.
registry: move the registry host to dev.jinemi.com, MCP to mcp.jinemi.com
All checks were successful
Sync infra to hosts / sync-beta (push) Has been skipped
Sync infra to hosts / sync-prod (push) Has been skipped
Sync infra to hosts / sync-centralis (push) Has been skipped
Sync infra to hosts / sync-dev (push) Successful in 9s
secrets-guard / encrypted (push) Successful in 5s
Validate observability stack / validate (push) Successful in 12s
shell-lint / shellcheck (push) Successful in 8s
Build + push images (Forgejo registry) / build-push (frontend) (push) Successful in 26s
Build + push images (Forgejo registry) / build-push (backend) (push) Successful in 1m10s
Deploy / deploy (backend) (push) Successful in 1m41s
Deploy / deploy (frontend) (push) Successful in 1m48s
secrets-guard / encrypted (pull_request) Successful in 8s
shell-lint / shellcheck (pull_request) Successful in 9s
PR build (required check) / changes (pull_request) Successful in 20s
PR build (required check) / validate-observability (pull_request) Successful in 15s
PR build (required check) / build-frontend (pull_request) Successful in 17s
PR build (required check) / build-backend (pull_request) Successful in 2m26s
PR build (required check) / gate (pull_request) Successful in 1s
53e2eb7c84
Completes the Forgejo domain migration. ROOT_URL moved to dev.jinemi.com
earlier; the registry half was deliberately deferred. Every image name,
REGISTRY_HOST default, runner label and --add-host pin now names
dev.jinemi.com, so the registry host and the bearer-token realm agree again.

Both names address the same Forgejo, so no image needs re-pushing and a
rollback to a tag pushed under the old prefix still resolves.
git.thermograph.org therefore stays served off the same Caddy site block --
one block, so the /v2/* mesh-only matcher keeps covering both names -- for
pre-migration tags and for runners holding it as their registered instance
URL.

Mesh clients now pin both names in /etc/hosts: the new one as registry host
and token realm, the old one for pre-migration tags. runner-vps2/config.yaml
carries both --add-host entries for the same reason.

Also renames Centralis' endpoint to mcp.jinemi.com in the two places this
repo names it; Centralis itself is provisioned outside this repo.

Host-side steps this cannot do (documented in deploy/forgejo/README.md,
"Host-side steps"): the Forgejo Actions variable REGISTRY_HOST, docker login
against the new host, and the /etc/hosts pins.
emi merged commit 0eb4f63895 into main 2026-08-01 23:25:07 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Jinemi/thermograph#162
No description provided.