1d1283f942
Re-point the re-brand at the new pi-only variant instead of with-pi, so pi-devbox stays a lean pi-focused image (no opencode) while the pi install logic still lives in one place upstream. This keeps pi-devbox meaningfully distinct from opencode-devbox:latest-with-pi. - Dockerfile: BASE_IMAGE default -> joakimp/opencode-devbox:latest-pi-only. - smoke-test.sh: size threshold 2900 -> 2750 MB (pi-only = with-pi minus opencode's ~145 MB binary). - Docs (README/AGENTS/DOCKER_HUB/CHANGELOG/docker-compose): drop the 'also contains opencode' notes; describe pi-only basis and the distinction from with-pi. Publish ordering unchanged: release opencode-devbox first so latest-pi-only carries the target pi version, then tag here (smoke asserts pi --version).
4.6 KiB
4.6 KiB
AGENTS.md — pi-devbox
Container image that re-brands the opencode-devbox pi-only variant as a pi-focused image. As of 2026-06-03 it no longer installs pi itself.
Repository layout
Dockerfile— thin re-brand:FROM opencode-devbox:latest-pi-only(overridable viaBASE_IMAGEarg). No install logic of its own — pi + companions are inherited from the pi-only variant (builtINSTALL_OPENCODE=false, so no opencode — that's the distinction fromlatest-with-pi). This refactor removed the install-logic duplication that used to drift againstopencode-devbox/Dockerfile.variant.docker-compose.yml— compose file for local use.env.example— environment variable templatescripts/smoke-test.sh— sanity checks run by CI before pushing to Docker Hub.gitea/workflows/docker-publish.yml— CI pipeline: smoke amd64 → multi-arch push → update Hub description
Versioning scheme
- Tags follow the pi npm version:
v{pi_version}[letter] - The image inherits pi from
latest-pi-only, so the publish ordering matters: rebuild opencode-devbox first solatest-pi-onlycarries the target pi version, then tag this repo. The smoke test assertspi --versionmatches the tag (EXPECTED_PI_VERSION) and fails loudly if the base is stale. - Docker Hub:
joakimp/pi-devbox:vX.Y.Z+joakimp/pi-devbox:latest
Release-day checklist
- Ensure opencode-devbox has been released so
joakimp/opencode-devbox:latest-pi-onlycarries the target pi version (and the fork/recall extensions). This is the hard prerequisite — the smoke guard enforces it. - Update
CHANGELOG.md: promoteUnreleased→vX.Y.Z — YYYY-MM-DD - Add fresh
## Unreleasedsection - Commit, tag
vX.Y.Z, push tag → CI fires automatically
When drafting CHANGELOG entries, pull pi's release notes from the
CHANGELOG.md shipped inside the npm tarball:
cd /tmp && npm pack @earendil-works/pi-coding-agent@<version>
tar -xzf earendil-works-pi-coding-agent-<version>.tgz package/CHANGELOG.md
head -40 package/CHANGELOG.md
Pi's CHANGELOG has rich New Features / Added / Changed / Fixed sections
per version. Don't try to derive notes from the npm registry metadata
(npm view) — it doesn't include the changelog body.
Key facts
- Base image:
joakimp/opencode-devbox:latest-pi-only— the single source of truth for the pi install + companions. Rebuilt whenever opencode-devbox releases. - Inherited content: pi (
/usr/bin/pi), pi-toolkit, pi-extensions, pi-fork (fork), pi-observational-memory (recall), the mempalace bridge, the LAN-access helper, entrypoints, and all base dev tooling. The pi-only variant is builtINSTALL_OPENCODE=false, so the image does not contain opencode. - Companion repos: cloned to
/opt/by the pi-only build;entrypoint-user.sh(inherited) deploys/registers them on container start. - MemPalace: fully operational — inherited from base; bridge extension deployed by entrypoint.
Conventions
- This repo no longer installs pi or clones companion repos — do not re-add that logic here. Change it in
opencode-devbox/Dockerfile.variant(the single source of truth) instead. - The smoke test threshold is 2750 MB (tracks the pi-only variant) — update if the image legitimately grows past it.
- The CI still resolves the tag's pi version, but only to feed
EXPECTED_PI_VERSIONto the smoke base-freshness guard — it is no longer passed as a build-arg (nothing in the Dockerfile consumes it). - To pin a specific base build instead of tracking
latest-pi-only, override theBASE_IMAGEarg (a version tag or a digest).
Documentation drift sweep
Before committing any non-trivial change, check that prose still matches code. Drift hotspots in this repo:
README.md— quick-start examples, env-var table, base-image reference (must matchFROMinDockerfile), "what's inside" (fork/recall; no opencode).AGENTS.md(this file) —Key factsblock (base-image tag, inherited content), smoke-test threshold number.CHANGELOG.md— promoteUnreleasedonly on tag, but record post-release fixes in a freshUnreleasedblock.DOCKER_HUB.md— hand-maintained slim Hub description; sync anything user-facing that changes (env vars, run command, base image)..env.example— hand-updated, must match Dockerfile/entrypoint env vars (including the inherited LAN-access knobs).DockerfileBASE_IMAGEARG default — the pi-only tag this image tracks.
Quick triage: git diff --name-only HEAD | xargs -I{} grep -l 'thing-you-changed' README.md AGENTS.md DOCKER_HUB.md CHANGELOG.md .env.example.