Commit Graph
8 Commits
Author SHA1 Message Date
homelab-updaterandClaude Opus 5.5 136f9d2fb0 feat(deploy): deploy a release by hand from Gitea Actions
ci / check (push) Successful in 1m30s
ci / publish (push) Successful in 1m22s
A deploy workflow, started only by hand (or through the API) and only
from master, pulls the chosen image (release tag, sha or latest) and
runs that image's own update.sh against VM103's compose directory
through the Docker socket. update.sh now copies the database through the
running server first, installs the image's compose.yaml and update.sh
with --install, and restores the previous compose file together with
the previous image when the new version does not come up. CI also
builds release tags v*.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:30:19 +02:00
homelab-updaterandClaude Opus 5.5 5511be8f69 refactor!: drop the v1 workflow documents, node versions and actions
ci / check (push) Successful in 1m18s
ci / publish (push) Successful in 45s
A read-only check of the VM103 database (2026-09-23) found nothing that
uses them: every draft, published version and run snapshot is v2, every
function and privileged-action node is schema version 2, and no policy
rule, document or invocation names docker.inspect, preflight, apply or
imagePrune @1. Gone, with their tests moved to v2 fixtures:

- the opaque v1 workflow document and snapshot (and the instance store's
  lifecycle-only paths for them; claimNext now always starts a node),
- function and privileged-action nodes of schema version 1,
- docker.inspect/preflight/apply/imagePrune @1 and the v1 prune rule
  (with its recentBackup gate); V2 names became the plain ones.

The v1 execution projection stays: one finished run on VM103 has it.
update.sh asks only about running workflow runs now (/api/steps is gone).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 12:02:15 +02:00
homelab-updaterandClaude Opus 5.5 2cbac29703 fix(deploy): update.sh does not restart the driver in the middle of a workflow run
ci / check (push) Successful in 1m13s
ci / publish (push) Successful in 45s
The guard only asked for a running step of the old chain, so a deploy
could cut a node of a workflow run in half (the run then waits on
'recovery'). It now also refuses while a workflow instance is running;
a run waiting at a gate or queued between nodes survives a restart and
does not block a deploy. The probe was checked against a mocked fetch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-22 23:59:23 +02:00
homelab-updaterandClaude Opus 5 ee90a1a525 deploy: check the renamed model sidecars and function-runtime in update.sh
ci / check (push) Successful in 1m7s
ci / publish (push) Successful in 46s
The compose split 'model' into model-claude/model-codex and added
function-runtime; update.sh still waited for 'model', so every deploy
of the new compose would have rolled back. Also records the VM103
deployment in TASK_STATE.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 18:14:44 +02:00
homelab-updaterandClaude Opus 5 08d559ff0b deploy: the model sidecar (claude CLI in the image), HA and the night from .env, update.sh keeps .env
ci / check (push) Successful in 40s
ci / publish (push) Successful in 39s
Dockerfile pins @anthropic-ai/claude-code 2.1.267 in /opt/claude and ships bin/hl. compose.yaml adds
the model service (uid 1000, read-only, no capabilities, no socket, /claude volume for the owner's login,
networks default + executor) and gives the driver MODEL_URL; HA_URL/HA_TOKEN/HA_NOTIFY and NIGHTLY_AT
come from .env for the driver and the server's watchdog. update.sh changes only the TAG line of .env
(it used to overwrite the file, which would have dropped HA_TOKEN) and checks the model container.
The CLI runs with HOME at its login and without non-essential traffic (no auto-update, no telemetry).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 22:42:00 +02:00
homelab-updaterandClaude Opus 5 bee6134fb1 deploy: executor sidecar, driver wiring and the Proxmox vzdump record timer
ci / check (push) Successful in 36s
ci / publish (push) Successful in 18s
compose.yaml: the executor (same image, root, no capabilities, read-only root, docker.sock,
/opt/homelab/compose at the same path, backups 0700, /var/lib/docker read-only for free space) on an
internal network only the driver joins; EXECUTOR_PROJECTS=jackett,ombi,orcaslicer. The driver gets
EXECUTOR_URL and the host record read-only. update.sh also checks the executor. deploy/proxmox: an
hourly timer on the Proxmox host writes the newest vzdump of VM103 (pvesh, JSON) into the VM through
the guest agent, checking the guest's exit code.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 15:18:10 +02:00
homelab-updaterandClaude Opus 5 de5ee92057 deploy: socket proxy without read_only; update.sh checks the proxy too
ci / check (push) Successful in 32s
ci / publish (push) Successful in 19s
tecnativa/docker-socket-proxy writes haproxy.cfg next to its template at every
start, so read_only made it restart in a loop on VM103 and update.sh still said
ok (it only checked server and driver). The proxy keeps cap_drop ALL,
no-new-privileges, the :ro socket and POST=0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 13:10:55 +02:00
homelab-updaterandClaude Sonnet 5 71e7b231db deploy: update.sh pulls the registry image, guards running steps, rolls back
compose.yaml now takes the image from the Gitea registry (TAG from .env, default latest).
update.sh refuses to restart while a step is running, waits for healthy and rolls back to
the previous image if the new one does not come up.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-19 01:18:08 +02:00