feat: add CI-gated claude-dev image package
Deploy Dashboard (Dev) / deploy-dev (push) Has been cancelled
Deploy Claude Dev (Dev) / deploy-claude-dev-dev (push) Has started running

Define claude-dev capabilities as a tested contract and deploy immutable tags only after smoke checks so daily tooling upgrades remain CI-first and rollback-safe.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Gan, Jimmy
2026-03-02 23:40:44 +08:00
parent a91a1132c9
commit 755a0b6ae9
9 changed files with 326 additions and 1 deletions
+14 -1
View File
@@ -17,7 +17,20 @@
- Build images on Mac: `docker build --platform linux/amd64`
- Transfer: `docker save <image> | ssh zjgump@100.78.131.124 "/volume1/@appstore/ContainerManager/usr/bin/docker load"`
- Deploy: `git push` triggers Gitea Actions CI (`docker compose up -d --pull never`) — do NOT manually restart
- CI workflow `deploy.yml` is stored in Gitea, not in this repo
- CI workflows are in `.gitea/workflows/` in this repo
## claude-dev CI Contract
- Source package lives in `claude-dev/` (`Dockerfile`, `required-tools.txt`, and smoke scripts under `claude-dev/scripts/`)
- CI-first only: update `claude-dev/*` in git, then push; do not do ad-hoc local image rebuild/redeploy for normal changes
- Required capabilities are declared in `claude-dev/required-tools.txt`; adding tools must update this file and related smoke checks
- Build/deploy gate (`.gitea/workflows/deploy-claude-dev-dev.yml`) uses NAS runner with `DOCKER_BUILDKIT=0`, then runs:
- tools smoke (`smoke-tools.sh`)
- network smoke (`smoke-network.sh`)
- auth/mount smoke (`smoke-auth.sh` with required runtime mounts)
- Deployment only happens after smoke pass, using immutable tag format `claude-dev:dev-<timestamp>-<sha>`
- Runtime compose definition is `claude-dev/docker-compose.yml`; CI syncs it to `/volume1/docker/claude-dev/docker-compose.yml`
- Runtime requirements preserved: `network_mode: host`, `/volume1/repos` mount, `/root/.claude` mount, `/root/.claude.json` mount, `/root/.gitea_token` mount
- Rollback: run workflow manually with `rollback_image` (for example the value in `/volume1/docker/claude-dev/previous-image.txt`) to redeploy a known-good immutable tag via CI
## Synology Quirks
- No `crontab` — edit `/etc/crontab` with `sudo` + `printf`, restart crond