What changed, and why it matters
This commit is a routine maintenance update to the project's automated testing setup. It upgrades an internal tool called cargo-rbmt and moves its configuration from separate files into each crate's Cargo.toml package metadata. It also changes how nightly and stable Rust compiler versions are tracked, storing them in the workspace Cargo.toml instead of separate version files. There are no changes to the actual Bitcoin library code that users depend on, and no security-relevant behavior is modified.
No security action needed. This is a build/CI tooling refactor. Reviewers may optionally verify that the exact_features matrices preserve equivalent test coverage to the previous features_with_std/features_without_std configuration.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit upgrades cargo-rbmt (Rust Bitcoin Maintainer Tools) from revision 9de0de1f… to 64715bab… and migrates rbmt.toml configuration into [package.metadata.rbmt.*] sections of individual Cargo.toml files. The new rbmt version removed the previous features_with_std/features_without_std matrix generation keys, so the commit replicates important feature combinations using exact_features and relies on random sets for remaining coverage. CI workflows now read nightly/stable toolchain versions from workspace.metadata.rbmt.toolchains in Cargo.toml via cargo metadata and jq, rather than from nightly-version/stable-version files. The cron jobs that update toolchains now invoke cargo rbmt toolchains –update-nightly/–update-stable. No runtime code, cryptographic logic, or public API is changed.
Changed components
CI/GitHub Actions workflowscargo-rbmt maintainer tool configurationWorkspace Cargo.toml metadataInspect captured patch +204 / −319
diff --git a/.github/workflows/cron-weekly-update-nightly.yml b/.github/workflows/cron-weekly-update-nightly.yml
index 5363c666..c85c80b1 100644
--- a/.github/workflows/cron-weekly-update-nightly.yml
+++ b/.github/workflows/cron-weekly-update-nightly.yml
@@ -16,33 +16,20 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - uses: dtolnay/rust-toolchain@55d80eb3c5a4228eec5390a083c092095115c6f1 # nightly
- - name: Update rust.yml to use latest nightly
+ - name: Install cargo-rbmt
+ run: cargo install --git https://github.com/rust-bitcoin/rust-bitcoin-maintainer-tools.git --rev $(cat rbmt-version) cargo-rbmt
+ - name: Update nightly toolchain in Cargo.toml
run: |
- set -x
- # Not every night has a nightly, so extract the date from whatever
- # version of the compiler dtolnay/rust-toolchain gives us.
- NIGHTLY_DATE=$(rustc +nightly --verbose --version | sed -ne 's/^commit-date: //p')
- # Update the nightly version in the reference file.
- echo "nightly-${NIGHTLY_DATE}" > nightly-version
- echo "nightly_date=${NIGHTLY_DATE}" >> $GITHUB_ENV
- # Some days there is no new nightly. In this case don't make an empty PR.
- if ! git diff --exit-code > /dev/null; then
- echo "Updated nightly. Opening PR."
- echo "changes_made=true" >> $GITHUB_ENV
- else
- echo "Attempted to update nightly but the latest-nightly date did not change. Not opening any PR."
- echo "changes_made=false" >> $GITHUB_ENV
- fi
+ eval "$(cargo rbmt toolchains --update-nightly)"
+ echo "nightly_version=$RBMT_NIGHTLY" >> $GITHUB_ENV
- name: Create Pull Request
- if: env.changes_made == 'true'
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
with:
token: ${{ secrets.APOELSTRA_CREATE_PR_TOKEN }}
author: Update Nightly Rustc Bot <bot@example.com>
committer: Update Nightly Rustc Bot <bot@example.com>
- title: Automated daily update to rustc (to nightly-${{ env.nightly_date }})
+ title: Automated daily update to rustc (to ${{ env.nightly_version }})
body: |
- Automated update to Github CI workflow `rust.yml` by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action
- commit-message: Automated update to Github CI to rustc nightly-${{ env.nightly_date }}
+ Automated update to Cargo.toml workspace metadata by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action
+ commit-message: Automated update to rustc ${{ env.nightly_version }}
branch: create-pull-request/daily-nightly-update
diff --git a/.github/workflows/cron-weekly-update-stable.yml b/.github/workflows/cron-weekly-update-stable.yml
index 62732404..3ffd4e1d 100644
--- a/.github/workflows/cron-weekly-update-stable.yml
+++ b/.github/workflows/cron-weekly-update-stable.yml
@@ -15,25 +15,13 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - uses: dtolnay/rust-toolchain@5d458579430fc14a04a08a1e7d3694f545e91ce6 # stable
- - name: Update semver-checks.yml to use latest stable
+ - name: Install cargo-rbmt
+ run: cargo install --git https://github.com/rust-bitcoin/rust-bitcoin-maintainer-tools.git --rev $(cat rbmt-version) cargo-rbmt
+ - name: Update stable toolchain in Cargo.toml
run: |
- set -x
- # Extract the version of the compiler dtolnay/rust-toolchain gives us.
- STABLE_VERSION=$(rustc --version | sed -ne 's/^rustc //p' | cut -d ' ' -f1)
- # Update the stable version in the reference file.
- echo "${STABLE_VERSION}" > ./stable-version
- echo "stable_version=${STABLE_VERSION}" >> $GITHUB_ENV
- # If somehow the stable version has not changed. In this case don't make an empty PR.
- if ! git diff --exit-code > /dev/null; then
- echo "Updated stable. Opening PR."
- echo "changes_made=true" >> $GITHUB_ENV
- else
- echo "Attempted to update stable but the latest-stable date did not change. Not opening any PR."
- echo "changes_made=false" >> $GITHUB_ENV
- fi
+ eval "$(cargo rbmt toolchains --update-stable)"
+ echo "stable_version=$RBMT_STABLE" >> $GITHUB_ENV
- name: Create Pull Request
- if: env.changes_made == 'true'
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
with:
token: ${{ secrets.APOELSTRA_CREATE_PR_TOKEN }}
@@ -41,6 +29,6 @@ jobs:
committer: Update Stable Rustc Bot <bot@example.com>
title: Automated weekly update to rustc stable (to ${{ env.stable_version }})
body: |
- Automated update to Github CI workflow `semver-checks.yml` by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action
- commit-message: Automated update to Github CI to rustc stable-${{ env.stable_version }}
+ Automated update to Cargo.toml workspace metadata by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action
+ commit-message: Automated update to rustc stable-${{ env.stable_version }}
branch: create-pull-request/weekly-stable-update
diff --git a/.github/workflows/miri.yml b/.github/workflows/miri.yml
index 718bd0de..b22b0c65 100644
--- a/.github/workflows/miri.yml
+++ b/.github/workflows/miri.yml
@@ -25,7 +25,7 @@ jobs:
persist-credentials: false
- name: "Read nightly version"
id: read_toolchain
- run: echo "nightly_version=$(cat nightly-version)" >> $GITHUB_OUTPUT
+ run: echo "nightly_version=$(cargo metadata --format-version 1 | jq -r '.metadata.rbmt.toolchains.nightly')" >> $GITHUB_OUTPUT
- name: "Select toolchain"
uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
with:
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 3ef78537..1f848391 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -25,7 +25,7 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - uses: rust-bitcoin/rust-bitcoin-maintainer-tools/.github/actions/setup-rbmt@9de0de1f36f65a2cb9c617358d88aecd319282d9
+ - uses: rust-bitcoin/rust-bitcoin-maintainer-tools/.github/actions/setup-rbmt@64715bab0d6fa1f3ebd6f9be336c4c5089bb5eb9
- name: "Run tests"
run: cargo rbmt test --toolchain ${{ matrix.toolchain }} --lock-file ${{ matrix.dep }}
@@ -41,7 +41,7 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - uses: rust-bitcoin/rust-bitcoin-maintainer-tools/.github/actions/setup-rbmt@9de0de1f36f65a2cb9c617358d88aecd319282d9
+ - uses: rust-bitcoin/rust-bitcoin-maintainer-tools/.github/actions/setup-rbmt@64715bab0d6fa1f3ebd6f9be336c4c5089bb5eb9
- name: "Run ${{ matrix.task }}"
run: cargo rbmt ${{ matrix.task }}
@@ -56,7 +56,7 @@ jobs:
fetch-depth: 0 # History required for version bump detection.
- name: "Fetch master branch"
run: git fetch origin master:master
- - uses: rust-bitcoin/rust-bitcoin-maintainer-tools/.github/actions/setup-rbmt@9de0de1f36f65a2cb9c617358d88aecd319282d9
+ - uses: rust-bitcoin/rust-bitcoin-maintainer-tools/.github/actions/setup-rbmt@64715bab0d6fa1f3ebd6f9be336c4c5089bb5eb9
- name: "Run pre-release checks"
run: cargo rbmt prerelease
@@ -74,8 +74,7 @@ jobs:
persist-credentials: false
- name: "Read workspace versions"
id: read_toolchain
- run: |
- echo "nightly_version=$(cat nightly-version)" >> $GITHUB_OUTPUT
+ run: echo "nightly_version=$(cargo metadata --format-version 1 | jq -r '.metadata.rbmt.toolchains.nightly')" >> $GITHUB_OUTPUT
Arch32bit:
name: Test 32-bit version
diff --git a/Cargo.toml b/Cargo.toml
index 49dca5b5..85d63abb 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,6 +3,10 @@ members = ["addresses", "base58", "bip158", "bitcoin", "chacha20_poly1305", "con
exclude = ["benches"]
resolver = "2"
+[workspace.metadata.rbmt.toolchains]
+nightly = "nightly-2026-03-13"
+stable = "1.93.1"
+
[workspace.lints.rust]
unexpected_cfgs = { level = "deny", check-cfg = ['cfg(bench)', 'cfg(chacha20_poly1305_fuzz)', 'cfg(fuzzing)', 'cfg(hashes_fuzz)', 'cfg(kani)'] }
diff --git a/addresses/rbmt.toml b/addresses/rbmt.toml
deleted file mode 100644
index a44a78fd..00000000
--- a/addresses/rbmt.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = []
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc"]
diff --git a/base58/Cargo.toml b/base58/Cargo.toml
index f732def0..d1a6623d 100644
--- a/base58/Cargo.toml
+++ b/base58/Cargo.toml
@@ -30,3 +30,8 @@ rustdoc-args = ["--cfg", "docsrs"]
[lints]
workspace = true
+
+[package.metadata.rbmt.lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
diff --git a/base58/rbmt.toml b/base58/rbmt.toml
deleted file mode 100644
index f674c3e5..00000000
--- a/base58/rbmt.toml
+++ /dev/null
@@ -1,19 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = []
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc"]
-
-[lint]
-allowed_duplicates = [
- "hex-conservative",
-]
diff --git a/bip158/rbmt.toml b/bip158/rbmt.toml
deleted file mode 100644
index 293e798c..00000000
--- a/bip158/rbmt.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = []
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = []
diff --git a/bitcoin/Cargo.toml b/bitcoin/Cargo.toml
index 1b2885c4..b7c745af 100644
--- a/bitcoin/Cargo.toml
+++ b/bitcoin/Cargo.toml
@@ -106,3 +106,82 @@ unexpected_cfgs = { level = "deny", check-cfg = ['cfg(fuzzing)', 'cfg(kani)'] }
[lints.clippy]
redundant_clone = "warn"
use_self = "warn"
+
+[package.metadata.rbmt.test]
+examples = [
+ "bip32",
+ "bip32:-",
+ "ecdsa-psbt:std bitcoinconsensus",
+ "sign-tx-segwit-v0:rand std",
+ "sign-tx-taproot:rand std",
+ "taproot-psbt:bitcoinconsensus rand std",
+ "sighash:std",
+ "serde:std serde",
+]
+exact_features = [
+ ["base64", "bitcoinconsensus"],
+ ["base64", "rand"],
+ ["base64", "secp-recovery"],
+ ["base64", "serde"],
+ ["bitcoinconsensus", "rand"],
+ ["bitcoinconsensus", "secp-recovery"],
+ ["bitcoinconsensus", "serde"],
+ ["rand", "secp-recovery"],
+ ["rand", "serde"],
+ ["secp-recovery", "serde"],
+ ["std", "base64"],
+ ["std", "bitcoinconsensus"],
+ ["std", "rand"],
+ ["std", "secp-recovery"],
+ ["std", "serde"],
+ ["base64", "bitcoinconsensus", "rand"],
+ ["base64", "bitcoinconsensus", "secp-recovery"],
+ ["base64", "bitcoinconsensus", "serde"],
+ ["base64", "rand", "secp-recovery"],
+ ["base64", "rand", "serde"],
+ ["base64", "secp-recovery", "serde"],
+ ["bitcoinconsensus", "rand", "secp-recovery"],
+ ["bitcoinconsensus", "rand", "serde"],
+ ["bitcoinconsensus", "secp-recovery", "serde"],
+ ["rand", "secp-recovery", "serde"],
+ ["std", "base64", "bitcoinconsensus"],
+ ["std", "base64", "rand"],
+ ["std", "base64", "secp-recovery"],
+ ["std", "base64", "serde"],
+ ["std", "bitcoinconsensus", "rand"],
+ ["std", "bitcoinconsensus", "secp-recovery"],
+ ["std", "bitcoinconsensus", "serde"],
+ ["std", "rand", "secp-recovery"],
+ ["std", "rand", "serde"],
+ ["std", "secp-recovery", "serde"],
+ ["base64", "bitcoinconsensus", "rand", "secp-recovery"],
+ ["base64", "bitcoinconsensus", "rand", "serde"],
+ ["base64", "bitcoinconsensus", "secp-recovery", "serde"],
+ ["base64", "rand", "secp-recovery", "serde"],
+ ["bitcoinconsensus", "rand", "secp-recovery", "serde"],
+ ["std", "base64", "bitcoinconsensus", "rand"],
+ ["std", "base64", "bitcoinconsensus", "secp-recovery"],
+ ["std", "base64", "bitcoinconsensus", "serde"],
+ ["std", "base64", "rand", "secp-recovery"],
+ ["std", "base64", "rand", "serde"],
+ ["std", "base64", "secp-recovery", "serde"],
+ ["std", "bitcoinconsensus", "rand", "secp-recovery"],
+ ["std", "bitcoinconsensus", "rand", "serde"],
+ ["std", "bitcoinconsensus", "secp-recovery", "serde"],
+ ["std", "rand", "secp-recovery", "serde"],
+ ["base64", "bitcoinconsensus", "rand", "secp-recovery", "serde"],
+ ["std", "base64", "bitcoinconsensus", "rand", "secp-recovery"],
+ ["std", "base64", "bitcoinconsensus", "rand", "serde"],
+ ["std", "base64", "bitcoinconsensus", "secp-recovery", "serde"],
+ ["std", "base64", "rand", "secp-recovery", "serde"],
+ ["std", "bitcoinconsensus", "rand", "secp-recovery", "serde"],
+ ["std", "base64", "bitcoinconsensus", "rand", "secp-recovery", "serde"],
+]
+
+[package.metadata.rbmt.lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
+
+[package.metadata.rbmt.prerelease]
+enabled = true
diff --git a/bitcoin/rbmt.toml b/bitcoin/rbmt.toml
deleted file mode 100644
index 3e75057a..00000000
--- a/bitcoin/rbmt.toml
+++ /dev/null
@@ -1,31 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = [
- "bip32",
- "bip32:-",
- "ecdsa-psbt:std bitcoinconsensus",
- "sign-tx-segwit-v0:rand std",
- "sign-tx-taproot:rand std",
- "taproot-psbt:bitcoinconsensus rand std",
- "sighash:std",
- "serde:std serde",
-]
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = ["rand", "serde", "secp-recovery", "bitcoinconsensus", "base64", "arbitrary"]
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["rand", "serde", "secp-recovery", "bitcoinconsensus", "base64", "arbitrary"]
-
-[lint]
-allowed_duplicates = [
- "hex-conservative",
-]
-
-[prerelease]
-enabled = true
diff --git a/chacha20_poly1305/rbmt.toml b/chacha20_poly1305/rbmt.toml
deleted file mode 100644
index a44a78fd..00000000
--- a/chacha20_poly1305/rbmt.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = []
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc"]
diff --git a/consensus_encoding/Cargo.toml b/consensus_encoding/Cargo.toml
index 25558363..ae2e47da 100644
--- a/consensus_encoding/Cargo.toml
+++ b/consensus_encoding/Cargo.toml
@@ -35,3 +35,9 @@ required-features = ["alloc"]
[lints]
workspace = true
+
+[package.metadata.rbmt.test]
+examples = ["encoder:alloc"]
+
+[package.metadata.rbmt.prerelease]
+enabled = true
diff --git a/consensus_encoding/rbmt.toml b/consensus_encoding/rbmt.toml
deleted file mode 100644
index 72387c52..00000000
--- a/consensus_encoding/rbmt.toml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = ["encoder:alloc"]
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = []
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc"]
-
-[prerelease]
-enabled = true
diff --git a/contrib/check-for-api-changes.sh b/contrib/check-for-api-changes.sh
index 0d18cd41..88ce065b 100755
--- a/contrib/check-for-api-changes.sh
+++ b/contrib/check-for-api-changes.sh
@@ -9,7 +9,7 @@ set -euo pipefail
REPO_DIR=$(git rev-parse --show-toplevel)
API_DIR="$REPO_DIR/api"
-NIGHTLY=$(cat "$REPO_DIR/nightly-version")
+NIGHTLY=$(cargo metadata --format-version 1 | jq -r '.metadata.rbmt.toolchains.nightly')
# Our docs have broken intra doc links if all features are not enabled.
RUSTDOCFLAGS="-A rustdoc::broken_intra_doc_links"
diff --git a/crypto/rbmt.toml b/crypto/rbmt.toml
deleted file mode 100644
index a44a78fd..00000000
--- a/crypto/rbmt.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = []
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc"]
diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml
index f798ef5d..9654cec1 100644
--- a/fuzz/Cargo.toml
+++ b/fuzz/Cargo.toml
@@ -27,6 +27,11 @@ unexpected_cfgs = { level = "deny", check-cfg = ['cfg(fuzzing)'] }
redundant_clone = "warn"
use_self = "warn"
+[package.metadata.rbmt.lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
+
[[bin]]
name = "bitcoin_arbitrary_block"
path = "fuzz_targets/bitcoin/arbitrary_block.rs"
diff --git a/fuzz/rbmt.toml b/fuzz/rbmt.toml
deleted file mode 100644
index 4b85446c..00000000
--- a/fuzz/rbmt.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-[lint]
-allowed_duplicates = [
- "hex-conservative",
-]
diff --git a/hashes/Cargo.toml b/hashes/Cargo.toml
index 276c17f2..b1d5c14a 100644
--- a/hashes/Cargo.toml
+++ b/hashes/Cargo.toml
@@ -43,3 +43,22 @@ rustdoc-args = ["--cfg", "docsrs"]
[lints]
workspace = true
+
+[package.metadata.rbmt.test]
+exact_features = [
+ ["alloc", "serde"],
+ ["alloc", "small-hash"],
+ ["serde", "small-hash"],
+ ["std", "serde"],
+ ["std", "small-hash"],
+ ["alloc", "serde", "small-hash"],
+ ["std", "serde", "small-hash"],
+]
+
+[package.metadata.rbmt.lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
+
+[package.metadata.rbmt.prerelease]
+enabled = true
diff --git a/hashes/rbmt.toml b/hashes/rbmt.toml
deleted file mode 100644
index 95f796d1..00000000
--- a/hashes/rbmt.toml
+++ /dev/null
@@ -1,22 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = ["serde", "small-hash"]
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc", "serde", "small-hash"]
-
-[lint]
-allowed_duplicates = [
- "hex-conservative",
-]
-
-[prerelease]
-enabled = true
diff --git a/internals/Cargo.toml b/internals/Cargo.toml
index 6b0a247b..61385b66 100644
--- a/internals/Cargo.toml
+++ b/internals/Cargo.toml
@@ -36,3 +36,13 @@ rustdoc-args = ["--cfg", "docsrs"]
[lints]
workspace = true
+
+[package.metadata.rbmt.test]
+exclude_features = ["serde_json", "bincode"]
+exact_features = [
+ ["alloc", "serde"],
+ ["std", "serde"],
+]
+
+[package.metadata.rbmt.prerelease]
+enabled = true
diff --git a/internals/rbmt.toml b/internals/rbmt.toml
deleted file mode 100644
index aa0fee74..00000000
--- a/internals/rbmt.toml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = ["serde"]
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc", "serde"]
-
-[prerelease]
-enabled = true
diff --git a/io/Cargo.toml b/io/Cargo.toml
index 22dce150..00819f04 100644
--- a/io/Cargo.toml
+++ b/io/Cargo.toml
@@ -33,3 +33,14 @@ rustdoc-args = ["--cfg", "docsrs"]
[lints]
workspace = true
+
+[package.metadata.rbmt.test]
+exact_features = [
+ ["alloc", "hashes"],
+ ["std", "hashes"],
+]
+
+[package.metadata.rbmt.lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
diff --git a/io/rbmt.toml b/io/rbmt.toml
deleted file mode 100644
index 9b5f1a5b..00000000
--- a/io/rbmt.toml
+++ /dev/null
@@ -1,19 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = ["hashes"]
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc", "hashes"]
-
-[lint]
-allowed_duplicates = [
- "hex-conservative",
-]
diff --git a/key_expression/rbmt.toml b/key_expression/rbmt.toml
deleted file mode 100644
index a44a78fd..00000000
--- a/key_expression/rbmt.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = []
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc"]
diff --git a/network/rbmt.toml b/network/rbmt.toml
deleted file mode 100644
index a44a78fd..00000000
--- a/network/rbmt.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = []
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc"]
diff --git a/p2p/Cargo.toml b/p2p/Cargo.toml
index 0c104046..8d86f7f6 100644
--- a/p2p/Cargo.toml
+++ b/p2p/Cargo.toml
@@ -43,3 +43,13 @@ rustdoc-args = ["--cfg", "docsrs"]
[lints]
workspace = true
+
+[package.metadata.rbmt.test]
+exact_features = [
+ ["std", "serde"],
+]
+
+[package.metadata.rbmt.lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
diff --git a/p2p/rbmt.toml b/p2p/rbmt.toml
deleted file mode 100644
index ea6e6cda..00000000
--- a/p2p/rbmt.toml
+++ /dev/null
@@ -1,19 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = ["arbitrary", "serde"]
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["arbitrary", "serde"]
-
-[lint]
-allowed_duplicates = [
- "hex-conservative",
-]
diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml
index 7afe561e..dd18b154 100644
--- a/primitives/Cargo.toml
+++ b/primitives/Cargo.toml
@@ -42,3 +42,22 @@ rustdoc-args = ["--cfg", "docsrs"]
[lints]
workspace = true
+
+[package.metadata.rbmt.test]
+exact_features = [
+ ["alloc", "hex"],
+ ["alloc", "serde"],
+ ["hex", "serde"],
+ ["std", "hex"],
+ ["std", "serde"],
+ ["alloc", "hex", "serde"],
+ ["std", "hex", "serde"],
+]
+
+[package.metadata.rbmt.lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
+
+[package.metadata.rbmt.prerelease]
+enabled = true
diff --git a/primitives/rbmt.toml b/primitives/rbmt.toml
deleted file mode 100644
index b5d370c3..00000000
--- a/primitives/rbmt.toml
+++ /dev/null
@@ -1,22 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = ["serde", "arbitrary", "hex"]
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc", "serde", "arbitrary", "hex"]
-
-[lint]
-allowed_duplicates = [
- "hex-conservative",
-]
-
-[prerelease]
-enabled = true
diff --git a/rbmt-version b/rbmt-version
index ca561624..2cf36363 100644
--- a/rbmt-version
+++ b/rbmt-version
@@ -1 +1 @@
-9de0de1f36f65a2cb9c617358d88aecd319282d9
+64715bab0d6fa1f3ebd6f9be336c4c5089bb5eb9
diff --git a/units/Cargo.toml b/units/Cargo.toml
index 6ce31e5f..fa2a7d39 100644
--- a/units/Cargo.toml
+++ b/units/Cargo.toml
@@ -37,3 +37,17 @@ rustdoc-args = ["--cfg", "docsrs"]
[lints]
workspace = true
+
+[package.metadata.rbmt.test]
+exact_features = [
+ ["alloc", "encoding"],
+ ["alloc", "serde"],
+ ["encoding", "serde"],
+ ["std", "encoding"],
+ ["std", "serde"],
+ ["alloc", "encoding", "serde"],
+ ["std", "encoding", "serde"],
+]
+
+[package.metadata.rbmt.prerelease]
+enabled = true
diff --git a/units/rbmt.toml b/units/rbmt.toml
deleted file mode 100644
index 7f430b26..00000000
--- a/units/rbmt.toml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Configuration for rbmt (Rust Bitcoin Maintainer Tools)
-
-[test]
-# Examples to run with specific features enabled.
-# Format: "example_name:feature1 feature2"
-examples = []
-
-# Features to test with the conventional `std` feature enabled.
-# Tests each feature alone with std, all pairs, and all together.
-features_with_std = ["serde", "arbitrary", "encoding"]
-
-# Features to test without the `std` feature.
-# Tests each feature alone, all pairs, and all together.
-features_without_std = ["alloc", "serde", "arbitrary", "encoding"]
-
-[prerelease]
-enabled = true
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.