feat: add pi-only variant (pi without opencode) as basis for pi-devbox
Validate / docs-check (push) Successful in 10s
Validate / base-change-warning (push) Successful in 23s
Validate / validate-omos (push) Successful in 4m36s
Validate / validate-omos-with-pi (push) Failing after 5m40s
Validate / validate-with-pi (push) Failing after 7m35s
Validate / validate-pi-only (push) Failing after 3m45s
Validate / validate-base (push) Failing after 16m12s
Validate / docs-check (push) Successful in 10s
Validate / base-change-warning (push) Successful in 23s
Validate / validate-omos (push) Successful in 4m36s
Validate / validate-omos-with-pi (push) Failing after 5m40s
Validate / validate-with-pi (push) Failing after 7m35s
Validate / validate-pi-only (push) Failing after 3m45s
Validate / validate-base (push) Failing after 16m12s
All opencode-devbox variants set INSTALL_OPENCODE=true, so pointing pi-devbox at with-pi dragged opencode along and made it ~a re-tag of latest-with-pi. Add a 5th variant pi-only (INSTALL_OPENCODE=false, INSTALL_PI=true): pi + companions (toolkit, extensions, fork, recall) + base tooling, no opencode (~145 MB lighter than with-pi). - Dockerfile.variant: document pi-only in the variant table. - CI docker-publish-split.yml: new smoke-pi-only + build-variant-pi-only jobs (tags :VERSION-pi-only / :latest-pi-only, multi-arch); wired into promote-base-latest and update-description needs. - validate.yml: new validate-pi-only main-branch gate job. - smoke-test.sh: accept --variant pi-only; threshold 2750 MB; opencode-absent path already handled. - Docs: HUB_TEMPLATE (regenerated DOCKER_HUB.md), README, AGENTS (variant/tag counts 4->5, 8->10 tags), .gitea/README, manual-host-publish.sh (5 variants), plan doc implementation note. This is the single source of truth for joakimp/pi-devbox, which now FROMs latest-pi-only. Versions unchanged (opencode 1.15.13, pi 0.78.0).
This commit is contained in:
@@ -5,11 +5,12 @@
|
||||
# Mirrors what .gitea/workflows/docker-publish-split.yml would do:
|
||||
# 1. Build & push Dockerfile.base → joakimp/opencode-devbox:base-<hash>
|
||||
# 2. Promote → joakimp/opencode-devbox:base-latest
|
||||
# 3. Build & push 4 variants on top of base-<hash>:
|
||||
# 3. Build & push 5 variants on top of base-<hash>:
|
||||
# :v1.15.12 :latest (INSTALL_OPENCODE only)
|
||||
# :v1.15.12-omos :latest-omos (+ OMOS)
|
||||
# :v1.15.12-with-pi :latest-with-pi (+ pi)
|
||||
# :v1.15.12-omos-with-pi :latest-omos-with-pi (+ both)
|
||||
# :v1.15.12-pi-only :latest-pi-only (pi, no opencode)
|
||||
#
|
||||
# Usage on your host:
|
||||
# 1. Make sure Orbstack/Docker Desktop is running with multi-arch enabled
|
||||
@@ -51,7 +52,7 @@ fi
|
||||
|
||||
# -------- 1. base (if needed) --------
|
||||
if [[ "$SKIP_BASE" == "0" ]]; then
|
||||
echo "==> [1/5] Build & push Dockerfile.base → ${IMAGE}:${BASE_TAG}"
|
||||
echo "==> [1/7] Build & push Dockerfile.base → ${IMAGE}:${BASE_TAG}"
|
||||
docker buildx build \
|
||||
--platform "$PLATFORMS" \
|
||||
-f Dockerfile.base \
|
||||
@@ -61,14 +62,15 @@ if [[ "$SKIP_BASE" == "0" ]]; then
|
||||
fi
|
||||
|
||||
# -------- 2. promote base-latest --------
|
||||
echo "==> [2/5] Promote ${IMAGE}:${BASE_TAG} → ${IMAGE}:base-latest"
|
||||
echo "==> [2/7] Promote ${IMAGE}:${BASE_TAG} → ${IMAGE}:base-latest"
|
||||
docker buildx imagetools create -t "${IMAGE}:base-latest" "${IMAGE}:${BASE_TAG}"
|
||||
|
||||
# -------- 3-5. variants --------
|
||||
build_variant() {
|
||||
local suffix="$1" # "" | "-omos" | "-with-pi" | "-omos-with-pi"
|
||||
local suffix="$1" # "" | "-omos" | "-with-pi" | "-omos-with-pi" | "-pi-only"
|
||||
local install_omos="$2"
|
||||
local install_pi="$3"
|
||||
local install_opencode="${4:-true}"
|
||||
local extra_args=()
|
||||
[[ "$install_pi" == "true" ]] && extra_args+=(--build-arg "PI_VERSION=${PI_VERSION}")
|
||||
[[ "$install_omos" == "true" ]] && extra_args+=(--build-arg "OMOS_VERSION=${OMOS_VERSION}")
|
||||
@@ -81,7 +83,7 @@ build_variant() {
|
||||
--platform "$PLATFORMS" \
|
||||
-f Dockerfile.variant \
|
||||
--build-arg "BASE_IMAGE=${IMAGE}:${BASE_TAG}" \
|
||||
--build-arg "INSTALL_OPENCODE=true" \
|
||||
--build-arg "INSTALL_OPENCODE=${install_opencode}" \
|
||||
--build-arg "INSTALL_OMOS=${install_omos}" \
|
||||
--build-arg "INSTALL_PI=${install_pi}" \
|
||||
${extra_args[@]+"${extra_args[@]}"} \
|
||||
@@ -91,18 +93,21 @@ build_variant() {
|
||||
.
|
||||
}
|
||||
|
||||
echo "==> [3/5] Variant: base (opencode only)"
|
||||
echo "==> [3/7] Variant: base (opencode only)"
|
||||
build_variant "" false false
|
||||
|
||||
echo "==> [4/5] Variant: omos"
|
||||
echo "==> [4/7] Variant: omos"
|
||||
build_variant "-omos" true false
|
||||
|
||||
echo "==> [4/5] Variant: with-pi"
|
||||
echo "==> [5/7] Variant: with-pi"
|
||||
build_variant "-with-pi" false true
|
||||
|
||||
echo "==> [5/5] Variant: omos-with-pi"
|
||||
echo "==> [6/7] Variant: omos-with-pi"
|
||||
build_variant "-omos-with-pi" true true
|
||||
|
||||
echo "==> [7/7] Variant: pi-only (pi without opencode)"
|
||||
build_variant "-pi-only" false true false
|
||||
|
||||
echo
|
||||
echo "==> Done. Verifying tags on Hub:"
|
||||
for t in \
|
||||
@@ -110,6 +115,7 @@ for t in \
|
||||
"${RELEASE_TAG}-omos" "latest-omos" \
|
||||
"${RELEASE_TAG}-with-pi" "latest-with-pi" \
|
||||
"${RELEASE_TAG}-omos-with-pi" "latest-omos-with-pi" \
|
||||
"${RELEASE_TAG}-pi-only" "latest-pi-only" \
|
||||
"${BASE_TAG}" "base-latest"
|
||||
do
|
||||
d=$(docker manifest inspect "${IMAGE}:${t}" 2>/dev/null | python3 -c "import json,sys,hashlib; m=json.load(sys.stdin); print(m.get('digest','-'))" 2>/dev/null || echo "MISSING")
|
||||
|
||||
Reference in New Issue
Block a user