diff --git a/.gitea/workflows/docker-publish-split.yml b/.gitea/workflows/docker-publish-split.yml index 017dc3f..66be77f 100644 --- a/.gitea/workflows/docker-publish-split.yml +++ b/.gitea/workflows/docker-publish-split.yml @@ -531,9 +531,16 @@ jobs: # a tautology and any transient failure of it is purely cosmetic. # Manual workflow_dispatch with promote_latest=true overrides this # gate as an escape hatch (e.g., if base-latest got hand-deleted). + # + # `always()` wrapper + explicit base-variant success check protects + # against the gitea-Actions default of "skipped need => skip dependent": + # a partial-publish run (e.g., omos-with-pi smoke fails) shouldn't + # prevent the base-latest alias from advancing on a real base rebuild. if: | - inputs.promote_latest == 'true' || - (github.ref_type == 'tag' && needs.base-decide.outputs.need_build == 'true') + always() && + needs.build-variant-base.result == 'success' && + (inputs.promote_latest == 'true' || + (github.ref_type == 'tag' && needs.base-decide.outputs.need_build == 'true')) runs-on: ubuntu-latest container: image: catthehacker/ubuntu:act-latest @@ -571,7 +578,17 @@ jobs: - build-variant-omos - build-variant-with-pi - build-variant-omos-with-pi - if: ${{ github.ref_type == 'tag' || inputs.promote_latest == 'true' }} + # Run when at least the base variant published — don't let a single + # variant failure (e.g., omos-with-pi smoke threshold) prevent Hub + # description refresh for the other variants that did publish. + # Without this `always()` wrapper, gitea Actions' default behavior + # of "skipped need => skip dependent" cascades from any failed/ + # skipped build-variant-* into update-description, and the Hub + # description goes stale on partial-publish releases. + if: | + always() && + needs.build-variant-base.result == 'success' && + (github.ref_type == 'tag' || inputs.promote_latest == 'true') runs-on: ubuntu-latest container: image: catthehacker/ubuntu:act-latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bc431a..8e6a190 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.4b — 2026-05-18 + +Recovery release for v1.15.4 — the `omos-with-pi` variant landed at >3500 MB and tripped the smoke threshold, so `smoke-omos-with-pi` and `build-variant-omos-with-pi` were skipped. The other three variants (base, omos, with-pi) published cleanly. Plus a latent workflow bug fix exposed by the partial publish. + +- **Smoke threshold bump:** `omos-with-pi` 3500 → 3700 MB. Compounded growth: opencode 1.15.0 → 1.15.4 (4 patch versions) plus pi 0.74.0 → 0.75.3 (minor + 3 patches) both added a few MB each, and they sum in the omos-with-pi variant. Same pattern as previous threshold bumps (v1.14.31c, v1.15.0b); restores ~150 MB headroom. +- **Workflow fix — `update-description` no longer skips on partial publish.** Pre-existing latent bug: `update-description.needs` includes all four `build-variant-*` jobs, and gitea Actions' default behavior is "skipped need ⇒ skip dependent". When `build-variant-omos-with-pi` got skipped (because its smoke failed), `update-description` cascaded into a skip even though the job's `if:` condition (`tag pushed`) was true. Result: Hub description wasn't refreshed on v1.15.4 despite three variants publishing. Fix: wrap the `if:` in `always() && needs.build-variant-base.result == 'success' && ...` so the job runs as long as the base variant published, regardless of what other variants did. +- **Same fix applied to `promote-base-latest`** — had the identical latent bug. Currently masked by the cache-hit skip, but would have surfaced on a real-base-rebuild release with a single failed variant. +- No image-side changes from v1.15.4. Cache hit on the same base hash (`base-35ee5fe7861a`). + ## v1.15.4 — 2026-05-18 opencode 1.15.3 → 1.15.4 bump (one upstream patch release), bundled with the CI hardening that landed on main between v1.15.3 and now. diff --git a/scripts/smoke-test.sh b/scripts/smoke-test.sh index 899dda4..1c4aeb9 100755 --- a/scripts/smoke-test.sh +++ b/scripts/smoke-test.sh @@ -293,12 +293,16 @@ echo " Uncompressed size: ${SIZE_MB} MB" # omos bumped 3000→3200 on v1.14.31c — mempalace-toolkit bake-in pushed the # baseline; bumped 3200→3300 on v1.15.0 — opencode 1.15.0 came in at # 3206 MB, leaving zero headroom for routine apt-get upgrade drift. +# omos-with-pi bumped 3400→3500 on v1.15.0 alongside the omos bump. +# omos-with-pi bumped 3500→3700 on v1.15.4b — omos+pi compounded as both +# upstream packages grew (opencode 1.15.0→1.15.4, pi 0.74.0→0.75.3) and +# the variant landed just over 3500 in v1.15.4's smoke. # omos variant to ~3.1 GB. Functional smoke checks all pass; this is a # guardrail, not a performance limit. THRESHOLD=2500 [ "$VARIANT" = "omos" ] && THRESHOLD=3300 [ "$VARIANT" = "with-pi" ] && THRESHOLD=2700 -[ "$VARIANT" = "omos-with-pi" ] && THRESHOLD=3500 +[ "$VARIANT" = "omos-with-pi" ] && THRESHOLD=3700 if [ "$SIZE_MB" -gt "$THRESHOLD" ]; then fail "image size ${SIZE_MB} MB exceeds threshold ${THRESHOLD} MB for variant=$VARIANT" else