From e5f2f8f016707a70c116d2f198870089111c6704 Mon Sep 17 00:00:00 2001 From: Johnny Murray Date: Sun, 6 Sep 2026 11:11:44 +0100 Subject: [PATCH 1/2] Release AxeBC2 0.1.13-dev with aligned promoted image --- scripts/axebc2_release_state.py | 4 +- scripts/validate-axebc2-core31-dev.py | 2 +- tests/test_axebc2_dev_finalizer.py | 5 +- .../RELEASE-0.1.13-EVIDENCE.json | 83 +++++++++++++++++++ willitmod-dev-bc2/UMBREL-COMPATIBILITY.md | 12 ++- willitmod-dev-bc2/docker-compose.yml | 2 +- willitmod-dev-bc2/docker-compose.yml.template | 2 +- willitmod-dev-bc2/umbrel-app.yml | 13 +-- 8 files changed, 109 insertions(+), 14 deletions(-) create mode 100644 willitmod-dev-bc2/RELEASE-0.1.13-EVIDENCE.json diff --git a/scripts/axebc2_release_state.py b/scripts/axebc2_release_state.py index e13fc4b..32d3616 100644 --- a/scripts/axebc2_release_state.py +++ b/scripts/axebc2_release_state.py @@ -1,7 +1,7 @@ from pathlib import Path -APP_TAG = "ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.12-candidate.3b893173de7b" -APP_DIGEST = "sha256:5defc8ac3c1d6e188959ed5c0642165e66108701c5ce3881e909c0994c8e3189" +APP_TAG = "ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.13-dev" +APP_DIGEST = "sha256:914cfcb82e0e42d03fb27133861f7ec19cfa88ba26fafac0e73855929982eb2c" CORE_TAG = "ghcr.io/willitmod/bitcoinii-core:31.1.0-rc.cdf44542dde2" CORE_DIGEST = "sha256:8875917ece57668fe9925d40a256ce8d429a3071511bb555d4ace1fa4370afc6" diff --git a/scripts/validate-axebc2-core31-dev.py b/scripts/validate-axebc2-core31-dev.py index 9b912f2..737dabf 100644 --- a/scripts/validate-axebc2-core31-dev.py +++ b/scripts/validate-axebc2-core31-dev.py @@ -60,7 +60,7 @@ def require(condition, message): ) # BETA release; the historical Core 31 baseline evidence below remains 0.1.11-dev. -require('version: "0.1.12-dev"' in manifest, "manifest must be 0.1.12-dev") +require('version: "0.1.13-dev"' in manifest, "manifest must be 0.1.13-dev") require(evidence.get("app_version") == "0.1.11-dev", "evidence must name the 0.1.11 DEV app version") require( evidence.get("app_image") diff --git a/tests/test_axebc2_dev_finalizer.py b/tests/test_axebc2_dev_finalizer.py index 068b5a8..54ed77c 100644 --- a/tests/test_axebc2_dev_finalizer.py +++ b/tests/test_axebc2_dev_finalizer.py @@ -4,11 +4,14 @@ import re from pathlib import Path import shutil +import sys import subprocess import tempfile import unittest ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "scripts")) +from axebc2_release_state import APP_TAG as CURRENT_APP_TAG, APP_DIGEST as CURRENT_APP_DIGEST SCRIPT = ROOT / "scripts/finalize-axebc2-0.1.11-dev.sh" COMPOSE = ROOT / "willitmod-dev-bc2/docker-compose.yml" APP_DIGEST = "sha256:23a7962e223da5549eba52697c6f4cfa16ab74cba935c68c48148a4c515302b4" @@ -28,7 +31,7 @@ def setUp(self): # before exercising its historical acceptance workflow. fixture = COMPOSE.read_text(encoding="utf-8") fixture = fixture.replace( - "ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.12-candidate.3b893173de7b@sha256:5defc8ac3c1d6e188959ed5c0642165e66108701c5ce3881e909c0994c8e3189", + CURRENT_APP_TAG + "@" + CURRENT_APP_DIGEST, "ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.11-candidate.ecf6e2c8cfd0@" + APP_DIGEST, ).replace('APP_CHANNEL: "BETA"', 'APP_CHANNEL: "ALPHA"') fixture = re.sub(r"(ghcr\.io/willitmod/axebc2-app-umbrel-dev:0\.1\.11-candidate\.ecf6e2c8cfd0@sha256:)[0-9a-f]{64}", r"\1APP_CANDIDATE_DIGEST_REQUIRED", fixture) diff --git a/willitmod-dev-bc2/RELEASE-0.1.13-EVIDENCE.json b/willitmod-dev-bc2/RELEASE-0.1.13-EVIDENCE.json new file mode 100644 index 0000000..ae52413 --- /dev/null +++ b/willitmod-dev-bc2/RELEASE-0.1.13-EVIDENCE.json @@ -0,0 +1,83 @@ +{ + "image": "ghcr.io/willitmod/axebc2-app-umbrel-dev", + "candidate": "ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.13-candidate.49471c2152c1", + "digest": "sha256:914cfcb82e0e42d03fb27133861f7ec19cfa88ba26fafac0e73855929982eb2c", + "revision": "49471c2152c156fe4890e81e0f98dcea3d2d5d9a", + "version": "0.1.13", + "platforms": [ + "linux/amd64", + "linux/arm64" + ], + "provenance": true, + "sbom": true, + "candidate_run": 34026543911, + "promotion_run": 34026658274, + "promotion_result": "success", + "promotion_rebuilt_image": false, + "channel": "dev", + "package_version": "0.1.13-dev", + "application_tests_passed": 50, + "store_tests_passed": 33, + "runtime_checks": { + "tested_at": "2026-09-06T10:09:46.320475+00:00", + "tested_on": "10.10.10.235", + "image": "ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.13-candidate.49471c2152c1@sha256:914cfcb82e0e42d03fb27133861f7ec19cfa88ba26fafac0e73855929982eb2c", + "observations": [ + { + "channel": "BETA", + "display_version": "0.1.13-dev", + "http": 200, + "about": { + "channel": "BETA" + }, + "node": { + "chain": "main", + "blocks": 58546, + "headers": 58546, + "verificationprogress": 1.0, + "version": null, + "subversion": "/BitcoinII:31.1.0/", + "cached": false + } + }, + { + "channel": "MAIN", + "display_version": "0.1.13", + "http": 200, + "about": { + "channel": "MAIN" + }, + "node": { + "chain": "main", + "blocks": 58546, + "headers": 58546, + "verificationprogress": 1.0, + "version": null, + "subversion": "/BitcoinII:31.1.0/", + "cached": false + } + } + ], + "scope": "Isolated application with separate test data; existing synchronized node RPC; no production data writes", + "umbrel_lifecycle_tested": false + }, + "native_installer_checks": [ + { + "channel": "dev", + "installer_exit": 0, + "version": "0.1.13-dev", + "image": "ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.13-dev@sha256:914cfcb82e0e42d03fb27133861f7ec19cfa88ba26fafac0e73855929982eb2c", + "stage": "BETA" + }, + { + "channel": "main", + "installer_exit": 0, + "version": "0.1.13", + "image": "ghcr.io/willitmod/axebc2-app:0.1.13@sha256:914cfcb82e0e42d03fb27133861f7ec19cfa88ba26fafac0e73855929982eb2c", + "stage": "MAIN" + } + ], + "native_compose_sha256": "15d5a4b728c5d51dee3ecfc463b638b55bf0e4391b4d6c318275e93b576bc41c", + "umbrel_template_sha256": "dcf98da1dbe619559bae0f8bd88b236111b76046a0504c6ba6333035266e3b26", + "umbrel_lifecycle_tested": false +} diff --git a/willitmod-dev-bc2/UMBREL-COMPATIBILITY.md b/willitmod-dev-bc2/UMBREL-COMPATIBILITY.md index ef611e5..4e31646 100644 --- a/willitmod-dev-bc2/UMBREL-COMPATIBILITY.md +++ b/willitmod-dev-bc2/UMBREL-COMPATIBILITY.md @@ -34,13 +34,13 @@ not be embedded in the Compose template: Umbrel's `envsubst` would consume their local shell variables before container startup. Runtime validation target: a fresh umbrelOS 1.7.4 amd64 VM. The existing Core 31 -acceptance record describes the unchanged 5tratumOS recipe; it is not evidence +acceptance record describes the original 0.1.11 5tratumOS recipe; it is not evidence that the new Umbrel path has passed runtime testing. Upstream contract: https://github.com/getumbrel/umbrel/blob/1.7.4/packages/umbreld/source/modules/apps/legacy-compat/app-script -## Packaging revision 0.1.12 +## Initial packaging candidate 0.1.12 (superseded) The store version advances to 0.1.12 (0.1.12-dev on DEV) so existing Umbrel installs can receive the recipe correction. MAIN currently retains the 0.1.11 application image. DEV also includes the @@ -65,3 +65,11 @@ The BETA application candidate is bound in `BETA-RELEASE-EVIDENCE.json`. Historical Core 31 acceptance remains tied to 0.1.11. Validation permits only the explicit BETA application-image and stage changes relative to that recipe; any other change to the native recipe fails the baseline hash check. + +## Aligned release 0.1.13 + +Application and package versions now align: 0.1.13-dev in DEV and 0.1.13 in +MAIN. Both use the same tested application digest with channel-specific image +tags. Core 31, CKPool, the native initializer, and persistent data paths retain +their accepted configuration. Historical 0.1.11/0.1.12 observations above remain +bound to those releases. See RELEASE-0.1.13-EVIDENCE.json for this release. diff --git a/willitmod-dev-bc2/docker-compose.yml b/willitmod-dev-bc2/docker-compose.yml index aec09ea..c6c5898 100644 --- a/willitmod-dev-bc2/docker-compose.yml +++ b/willitmod-dev-bc2/docker-compose.yml @@ -126,7 +126,7 @@ services: fi app: - image: ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.12-candidate.3b893173de7b@sha256:5defc8ac3c1d6e188959ed5c0642165e66108701c5ce3881e909c0994c8e3189 + image: ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.13-dev@sha256:914cfcb82e0e42d03fb27133861f7ec19cfa88ba26fafac0e73855929982eb2c user: "1000:1000" restart: on-failure stop_grace_period: 30s diff --git a/willitmod-dev-bc2/docker-compose.yml.template b/willitmod-dev-bc2/docker-compose.yml.template index 939ecbf..eaa25ed 100644 --- a/willitmod-dev-bc2/docker-compose.yml.template +++ b/willitmod-dev-bc2/docker-compose.yml.template @@ -92,7 +92,7 @@ services: - /bin/sh - /opt/axebc2/ckpool-entrypoint.sh app: - image: ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.12-candidate.3b893173de7b@sha256:5defc8ac3c1d6e188959ed5c0642165e66108701c5ce3881e909c0994c8e3189 + image: ghcr.io/willitmod/axebc2-app-umbrel-dev:0.1.13-dev@sha256:914cfcb82e0e42d03fb27133861f7ec19cfa88ba26fafac0e73855929982eb2c user: 1000:1000 restart: on-failure stop_grace_period: 30s diff --git a/willitmod-dev-bc2/umbrel-app.yml b/willitmod-dev-bc2/umbrel-app.yml index a330074..0900f53 100644 --- a/willitmod-dev-bc2/umbrel-app.yml +++ b/willitmod-dev-bc2/umbrel-app.yml @@ -2,7 +2,7 @@ manifestVersion: 1 id: willitmod-dev-bc2 category: bitcoin name: AxeBC2 -version: "0.1.12-dev" +version: "0.1.13-dev" tagline: BC2 node + solo pool description: >- BETA RELEASE (DEV CHANNEL) @@ -43,12 +43,13 @@ path: "" defaultUsername: "" defaultPassword: "" releaseNotes: >- - Moves the DEV release to BETA and removes the general ALPHA/BETA warning - banner. The release stage remains visible beside the version. + Aligns the application image and store package at version 0.1.13 across + DEV and MAIN. Includes the BETA presentation update and removal of the + general ALPHA/BETA warning banner. Fixes Umbrel installation by removing its dependency on the 5tratumOS host - build.json file. 5tratumOS keeps its existing startup recipe and OS version - check. The 0.1.12 application update retains Core 31 migration checks, - the payout address, and existing blockchain data. + build.json file. 5tratumOS retains its native startup checks. The update + preserves Core 31 migration checks, payout settings, and existing blockchain + and pool data. Included fixes from 0.1.11: Corrects payout-address validation: BitcoinII Core-accepted mainnet addresses From 6086de19a5b280c6283941c6d57d952dfe0adda5 Mon Sep 17 00:00:00 2001 From: Johnny Murray Date: Sun, 6 Sep 2026 11:12:26 +0100 Subject: [PATCH 2/2] Clarify superseded package version in release documentation --- willitmod-dev-bc2/UMBREL-COMPATIBILITY.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/willitmod-dev-bc2/UMBREL-COMPATIBILITY.md b/willitmod-dev-bc2/UMBREL-COMPATIBILITY.md index 4e31646..6b939e3 100644 --- a/willitmod-dev-bc2/UMBREL-COMPATIBILITY.md +++ b/willitmod-dev-bc2/UMBREL-COMPATIBILITY.md @@ -8,7 +8,8 @@ block an upgraded Umbrel installation. 5tratumOS consumes `docker-compose.yml` directly. Its platform integration and `data/init/init.sh` remain unchanged, including the minimum OS check. The DEV -0.1.12 recipe updates only the application image and release-stage label. The +0.1.13 recipe changes only the application image and release-stage label from +the accepted Core 31 baseline. The Umbrel template needs no 5tratumOS host file and uses the same pinned app, Core 31, CKPool, and initialization images. @@ -42,10 +43,11 @@ https://github.com/getumbrel/umbrel/blob/1.7.4/packages/umbreld/source/modules/a ## Initial packaging candidate 0.1.12 (superseded) -The store version advances to 0.1.12 (0.1.12-dev on DEV) so existing Umbrel -installs can receive the recipe correction. MAIN currently retains the 0.1.11 application image. DEV also includes the -0.1.12 BETA UI update: the general release banner is removed, and the release -stage is shown in the existing compact badge. Node and pool images are unchanged. +The initial MAIN packaging candidate used version 0.1.12 with the 0.1.11 +application image. DEV published 0.1.12 with the BETA UI update: the general +release banner was removed and the compact badge retained. Release 0.1.13 +supersedes both, aligning application and package versions in each channel. +Node and pool images are unchanged. On 6 September 2026, both candidates passed the native installer and repeated container initialization on 5tratumOS v0.7.12-dev at 10.10.10.235, using