v30.3-roots.1 · Commit 63: [PATCH 63/68] fix(release): restore signed five-platform CI releases
contrib/roots/README.md
Before: contrib/roots/README.md · After: contrib/roots/README.md
File metadata
index a4a46df1ab907b2cf2ed9a11eee43888ef30c1bf..ed09fa141e22280b0a53b9f19cc69fcb9e7fd959 100644
Download original patch · Release notes
Diff rows 1–83 of 83. Line numbers refer to the original before/after files.
+ Added− RemovedUnmarked lines are context.
Scroll the code area horizontally to read long lines. The two line-number columns refer to before and after.
contrib/roots/README.md
CHANGED
|
@@ -243,29 +243,24 @@ git check-ref-format "refs/tags/$release_tag"
|
|
|
243
243
|
git fetch origin roots/30.3
|
|
244
244
|
git fetch https://github.com/bitcoin/bitcoin.git \
|
|
245
245
|
refs/tags/v30.3:refs/tags/v30.3
|
|
246
|
-
git tag --annotate "$release_tag" -m "Bitcoin Roots $release_tag"
|
|
246
|
+
release_commit=$(git rev-parse origin/roots/30.3^{commit})
|
|
247
|
+
git tag --annotate "$release_tag" "$release_commit" -m "Bitcoin Roots $release_tag"
|
|
247
248
|
git rev-parse "$release_tag^{commit}"
|
|
248
249
|
test "$(git rev-parse "$release_tag^{commit}")" = \
|
|
249
250
|
"$(git rev-parse origin/roots/30.3^{commit})"
|
|
250
251
|
ci/release/validate-release-source.sh "$release_tag"
|
|
251
252
|
```
|
|
252
253
|
|
|
253
|
-
Run the retained release metadata tests before pushing:
|
|
254
|
+
Run the retained CI/release metadata tests before pushing (this includes signing,
|
|
255
|
+
portable-patch replay, runner notices and signed-draft gates):
|
|
254
256
|
|
|
255
257
|
```sh
|
|
256
|
-
python3 ci/test/test_prepare_release.py
|
|
257
|
-
python3 ci/test/test_release_notices.py
|
|
258
|
-
python3 ci/test/test_create_release_draft.py
|
|
259
|
-
python3 ci/test/test_prepare_release_source.py
|
|
260
|
-
python3 ci/test/test_create_patch_series.py
|
|
261
|
-
python3 ci/test/test_sign_manifest.py
|
|
262
|
-
python3 ci/test/test_validate_release_tag.py
|
|
263
|
-
python3 ci/test/test_validate_release_source.py
|
|
264
|
-
python3 ci/test/test_release_version.py
|
|
258
|
+
python3 -m unittest discover -s ci/test
|
|
265
259
|
```
|
|
266
260
|
|
|
267
261
|
A release tag does not need to be reachable from `main`. Permanent tag pushes
|
|
268
|
-
do not dispatch builds or upload assets. Release validation requires the tag
|
|
262
|
+
start fresh five-platform builds and a tag-only signed-draft job; manual
|
|
263
|
+
dispatch remains a read-only rehearsal. Release validation requires the tag
|
|
269
264
|
target to match its canonical `roots/<core-version>` branch. The release patch
|
|
270
265
|
is generated from the Core tag and canonical commits at release time and is not
|
|
271
266
|
checked into the repository. It deliberately excludes `.github/**`: Roots'
|
|
@@ -288,22 +283,28 @@ The series contains inherited CRLF files. Apply the released mbox with
|
|
|
288
283
|
those bytes. Replay verification uses the same command and checks tree equality
|
|
289
284
|
outside `.github/**`.
|
|
290
285
|
|
|
291
|
-
The read-only manual workflow builds Linux x86_64/aarch64, macOS x86_64/arm64
|
|
292
|
-
and Windows x86_64 intermediates plus the portable patch. Assemble the reviewed
|
|
293
|
-
notices and final assets through `ci/release/README.md` before tagging. Pin the
|
|
294
|
-
exact candidate commit, six asset checksums, manifest digest and curated notes
|
|
295
|
-
digest in the release review. A packaging-only correction must reconcile the
|
|
296
|
-
source/patch and disclose the original build source; it must not relabel older
|
|
297
|
-
executables as newly built.
|
|
298
|
-
|
|
299
|
-
After an explicitly authorized immutable annotated tag is pushed, use the
|
|
300
|
-
verified-assets draft helper documented in `ci/release/README.md`. It rechecks
|
|
301
|
-
the remote canonical/tag identities, notices, checksums and exact replayed
|
|
302
|
-
patch, and refuses any existing release. It does not build or publish. The
|
|
303
|
-
current helper accepts an unsigned seven-file packet; describe manifest, tag
|
|
304
|
-
and platform signing separately and accurately. The existing
|
|
305
|
-
`sign-manifest.sh` interface remains available for separately authorized signing,
|
|
306
|
-
but signed packets require a separate reviewed handoff. Independently download
|
|
307
|
-
and verify the draft's archives, patch, checksums, notes, tag target and source
|
|
308
|
-
before changing only its visibility under publication authority. Never replace
|
|
309
|
-
published tags/assets or use `--clobber`.
|
|
286
|
+
Both workflow paths build Linux x86_64/aarch64, macOS x86_64/arm64 and Windows
|
|
287
|
+
x86_64 packages, collecting exact installed dependency notices in each runner
|
|
288
|
+
before archive upload. Linux uses pinned verified depends sources, macOS uses
|
|
289
|
+
matching installed Homebrew receipts/source hashes and actual bundle linkage,
|
|
290
|
+
and Windows uses installed static-triplet port copyrights/versions. Missing or
|
|
291
|
+
mismatched evidence fails. See `ci/release/README.md` for the collection interface.
|
|
292
|
+
|
|
293
|
+
The tag-only `release` environment job waits for all five builds and the patch,
|
|
294
|
+
downloads only its own run's outputs and runs `prepare-release.sh`. It requires
|
|
295
|
+
the existing organization secret `BITCOIN_ROOTS_GPG_SK`, confined to the signing
|
|
296
|
+
step, and verifies checked-in public-key fingerprint
|
|
297
|
+
`5EADD53F2CD1F0B7AEEE920D25FC5C29CD528E32`. Missing signing capability fails.
|
|
298
|
+
`create-ci-draft.py` independently verifies the detached manifest signature,
|
|
299
|
+
packet/source/patch and fresh remote identities, and creates only a new draft
|
|
300
|
+
with exactly eight assets: five archives, patch, SHA512SUMS and SHA512SUMS.asc.
|
|
301
|
+
Every existing draft/public release blocks creation. There is no update,
|
|
302
|
+
clobber, deletion or replacement branch; interrupted creation requires operator
|
|
303
|
+
inspection, never an automatic retry that replaces partial assets.
|
|
304
|
+
|
|
305
|
+
Curated notes retain contributor credit, including #24/#25, and the CI draft
|
|
306
|
+
adds the actual fresh run/source identity and signing disclosures. Manifest
|
|
307
|
+
signing is separate from Git-tag and platform-code signing. Independently
|
|
308
|
+
download and verify all eight draft assets and notes before separately authorized
|
|
309
|
+
visibility-only publication. Verify the public release again unauthenticated.
|
|
310
|
+
Never replace published tags/assets; maintenance uses a reviewed new release.
|