12 Commits

Author SHA1 Message Date
joakimp 113c9f0bb0 Infrastructure pass: CI smoke tests, floating versions, chown sentinel, generate-config script
Main changes:

- Extract opencode.json generation from entrypoint-user.sh into a
  standalone Python script (rootfs/usr/local/lib/opencode-devbox/
  generate-config.py). Preserves the never-overwrite-existing-config
  guarantee. Cuts entrypoint-user.sh from 176 to 97 lines.

- Install MemPalace via 'uv tool install' into an isolated venv at
  /opt/uv-tools/mempalace/ with a /usr/local/bin/mempalace-mcp-server
  wrapper, replacing the 'pip install --break-system-packages' escape
  hatch. The wrapper is what generate-config.py references in the
  auto-generated opencode.json. Also fix 'mempalace init' in
  entrypoint-user.sh to use --yes so first-start initialization isn't
  interactive (this used to hang or print prompts into the user's
  terminal). Gated by INSTALL_MEMPALACE build arg (default true) so
  users who don't need AI memory can shave ~300 MB.

- Sentinel-file pattern in entrypoint.sh volume-ownership loop: write
  .devbox-owner after a successful chown -R, skip the recursive walk
  on subsequent starts when the sentinel matches FINAL_UID:FINAL_GID.
  Cuts multi-second startup costs to milliseconds on large volumes
  (nvim plugins, palace data). UID changes still trigger a full chown.

- Float all GitHub/Gitea-hosted binary versions: gosu, fzf, git-lfs,
  neovim, bat, eza, zoxide, uv, gitea-mcp now default to 'latest' and
  resolve the newest upstream release at build time via the /releases/
  latest redirect. Go (go.dev JSON feed) and oh-my-opencode-slim (npm
  @latest) likewise. Intentional pins still in place: OPENCODE_VERSION,
  NODE_VERSION=22, DEBIAN_VERSION=trixie-slim. Each *_VERSION ARG
  accepts an explicit value to lock a specific version when needed.

- New scripts/smoke-test.sh verifies binary presence, opencode startup,
  entrypoint user drop, generate-config idempotency, bun's presence-
  per-variant, and image size against thresholds (2500 MB base, 3000
  MB OMOS). Prints resolved component versions as its first step so
  CI logs always record what got baked into a given image.

- New .gitea/workflows/validate.yml runs on push to main and PRs:
  single-arch amd64 build, smoke test, DOCKER_HUB.md sync check. Tag-
  triggered docker-publish.yml now smoke-tests each variant on amd64
  before the full multi-arch push.

- scripts/generate-dockerhub-md.py auto-generates DOCKER_HUB.md from
  README.md using explicit SECTION_RULES. --check mode fails CI when
  the committed file is out of sync. Enforces the 25 kB Docker Hub
  limit. Adding a new README section forces an explicit keep/drop/
  replace decision.

- Remove dead INSTALL_PYTHON build arg (was a no-op since mempalace
  added python3 unconditionally).
2026-04-28 23:28:43 +02:00
joakimp de659fbc54 Switch to new Docker Hub /v2/auth/token API for description updates
The old /v2/users/login endpoint is deprecated and returns tokens with
insufficient permissions. Use /v2/auth/token with Bearer auth instead.
2026-04-12 19:10:55 +02:00
joakimp d651a084de Fix Docker Hub short description: trim to 100-byte limit 2026-04-12 19:00:34 +02:00
joakimp 18b4df23e5 Fix IPv6 connectivity failures: force IPv4 preference in CI builds
Publish Docker Image / build-base (push) Successful in 30m22s
Publish Docker Image / build-omos (push) Successful in 34m37s
Publish Docker Image / update-description (push) Failing after 15s
2026-04-12 17:39:25 +02:00
joakimp 017f7f1343 Fix Docker Hub description update: use --rawfile and capture error response 2026-04-11 23:52:50 +02:00
joakimp 56f98da914 Add error handling to Docker Hub description update step
Publish Docker Image / build-base (push) Successful in 31m21s
Publish Docker Image / build-omos (push) Successful in 32m22s
Publish Docker Image / update-description (push) Failing after 15s
2026-04-11 22:16:09 +02:00
joakimp 078c095116 Parallelize base and omos image builds into separate CI jobs
Publish Docker Image / build-base (push) Successful in 30m52s
Publish Docker Image / build-omos (push) Successful in 35m17s
Publish Docker Image / update-description (push) Successful in 14s
2026-04-11 18:20:33 +02:00
joakimp c0b887791f Add Docker Hub description update step to CI workflow 2026-04-10 08:47:27 +02:00
joakimp 4314a3fb88 Fix CI: use vars for username, secrets for token
Publish Docker Image / build-and-push (push) Successful in 28m54s
2026-04-10 00:23:05 +02:00
joakimp 23a2c3da8c Fix CI: remove duplicate Docker socket mount
Publish Docker Image / build-and-push (push) Failing after 11m17s
2026-04-10 00:04:26 +02:00
joakimp 489fa5c60f Fix CI: use container image with Docker CLI and mount Docker socket
Publish Docker Image / build-and-push (push) Failing after 1m7s
2026-04-10 00:00:51 +02:00
joakimp 713a1a6f97 Add Gitea Actions workflow for Docker Hub publishing and Docker Hub usage docs
Publish Docker Image / build-and-push (push) Failing after 27s
2026-04-09 19:26:32 +02:00