From 910378fe0622fb51aa60435c404601c7295b894a Mon Sep 17 00:00:00 2001 From: Joakim Persson Date: Fri, 15 May 2026 09:56:01 +0200 Subject: [PATCH] v1.15.0: opencode bump + git clone retry + pi-devbox sibling mention - Bump OPENCODE_VERSION 1.14.50 -> 1.15.0 in Dockerfile.variant. - Wrap pi-toolkit/pi-extensions git clone in Dockerfile.variant in a 5-attempt retry loop with linear backoff (matches pi-devbox pattern). gitea.jordbo.se occasionally returns transient HTTP 500s that previously broke with-pi/omos-with-pi variant builds. - Add 'Sibling images' section to DOCKER_HUB.md mentioning joakimp/pi-devbox as the pi-only counterpart. - CHANGELOG entry for v1.15.0 with full notes. --- CHANGELOG.md | 9 +++++++++ DOCKER_HUB.md | 4 ++++ Dockerfile.variant | 19 ++++++++++++++----- scripts/generate-dockerhub-md.py | 4 ++++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b4ad94..46985a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,15 @@ Tags follow `v{opencode_version}[letter]` — bare tag for the first build on a ## Unreleased +## v1.15.0 — 2026-05-15 + +opencode 1.14.50 → 1.15.0 bump (upstream minor release). + +- **Bump:** opencode 1.14.50 → 1.15.0 (`OPENCODE_VERSION` in `Dockerfile.variant`). +- **Resilience:** `git clone` for pi-toolkit and pi-extensions in `Dockerfile.variant` is now wrapped in a 5-attempt retry loop with linear backoff (5s, 10s, 15s, 20s, 25s = up to ~75s total). gitea.jordbo.se occasionally returns transient HTTP 500s on the first request after idle, which previously broke the with-pi and omos-with-pi variant builds. Same pattern landed in pi-devbox repo concurrently. +- **Docs:** `DOCKER_HUB.md` mentions `joakimp/pi-devbox` as a sibling image — the pi-only build that uses this image's base layer as its parent. Generator template (`scripts/generate-dockerhub-md.py`) updated and regenerated. Hub size: 5905 bytes (well under the 25 kB limit). +- **Recovery from v1.14.50c partial publish:** the `latest-omos`, `v1.14.50c-omos` Hub gap is closed by this release — `latest-omos` will move forward to v1.15.0 once all four variants publish cleanly. Users on the floating tag were unaffected (still pointing at v1.14.41b until now). + ## v1.14.50c — 2026-05-14 Recovery release for v1.14.50b's missing variants. v1.14.50b shipped only the `base` variant; `omos`, `with-pi`, and `omos-with-pi` were lost to a runner-fleet incident (see postmortem below). diff --git a/DOCKER_HUB.md b/DOCKER_HUB.md index d403fa0..ae9cfce 100644 --- a/DOCKER_HUB.md +++ b/DOCKER_HUB.md @@ -86,6 +86,10 @@ Full persistence reference, including multi-user (`SIGNUM`) isolation and host b - **Issues / source / docker-compose templates:** - **Agent-facing internals** (for future maintainers / coding agents working in the repo): +## Sibling images + +- **[`joakimp/pi-devbox`](https://hub.docker.com/r/joakimp/pi-devbox)** — pi-only image built on top of this image's base layer. Smaller (~700 MB) and version-tracks the [pi npm package](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) directly. Use this if you want pi without opencode. Source: + ## License MIT. See . diff --git a/Dockerfile.variant b/Dockerfile.variant index 7b8b099..0579af0 100644 --- a/Dockerfile.variant +++ b/Dockerfile.variant @@ -32,7 +32,7 @@ ARG USER_NAME=developer # ── Install opencode via npm ───────────────────────────────────────── ARG INSTALL_OPENCODE=true -ARG OPENCODE_VERSION=1.14.50 +ARG OPENCODE_VERSION=1.15.0 RUN if [ "${INSTALL_OPENCODE}" = "true" ]; then \ NPM_CONFIG_PREFIX=/usr npm install -g opencode-ai@${OPENCODE_VERSION} && \ opencode --version ; \ @@ -47,16 +47,25 @@ ARG PI_VERSION=latest ARG PI_TOOLKIT_REF=main ARG PI_EXTENSIONS_REF=main RUN if [ "${INSTALL_PI}" = "true" ]; then \ + set -e && \ + git_clone_retry() { \ + url="$1"; ref="$2"; dest="$3"; \ + for i in 1 2 3 4 5; do \ + if git clone --depth 1 --branch "$ref" "$url" "$dest"; then return 0; fi; \ + rm -rf "$dest"; \ + echo "git clone $url failed (attempt $i/5), retrying in $((i*5))s..."; \ + sleep $((i*5)); \ + done; \ + return 1; \ + } && \ if [ "${PI_VERSION}" = "latest" ]; then \ NPM_CONFIG_PREFIX=/usr npm install -g @earendil-works/pi-coding-agent ; \ else \ NPM_CONFIG_PREFIX=/usr npm install -g @earendil-works/pi-coding-agent@${PI_VERSION} ; \ fi && \ pi --version && \ - git clone --depth 1 --branch "${PI_TOOLKIT_REF}" \ - https://gitea.jordbo.se/joakimp/pi-toolkit.git /opt/pi-toolkit && \ - git clone --depth 1 --branch "${PI_EXTENSIONS_REF}" \ - https://gitea.jordbo.se/joakimp/pi-extensions.git /opt/pi-extensions && \ + git_clone_retry https://gitea.jordbo.se/joakimp/pi-toolkit.git "${PI_TOOLKIT_REF}" /opt/pi-toolkit && \ + git_clone_retry https://gitea.jordbo.se/joakimp/pi-extensions.git "${PI_EXTENSIONS_REF}" /opt/pi-extensions && \ echo "pi-toolkit at $(cd /opt/pi-toolkit && git rev-parse --short HEAD)" && \ echo "pi-extensions at $(cd /opt/pi-extensions && git rev-parse --short HEAD)" ; \ fi diff --git a/scripts/generate-dockerhub-md.py b/scripts/generate-dockerhub-md.py index 7407c44..49af6bc 100755 --- a/scripts/generate-dockerhub-md.py +++ b/scripts/generate-dockerhub-md.py @@ -140,6 +140,10 @@ Full persistence reference, including multi-user (`SIGNUM`) isolation and host b - **Issues / source / docker-compose templates:** <{GITEA}> - **Agent-facing internals** (for future maintainers / coding agents working in the repo): <{GITEA}/src/branch/main/AGENTS.md> +## Sibling images + +- **[`joakimp/pi-devbox`](https://hub.docker.com/r/joakimp/pi-devbox)** — pi-only image built on top of this image's base layer. Smaller (~700 MB) and version-tracks the [pi npm package](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) directly. Use this if you want pi without opencode. Source: + ## License MIT. See <{GITEA}/src/branch/main/LICENSE>.