What changed, and why it matters
This commit is a routine update to the project's automated testing setup. It replaces a set of shell scripts with a new Rust tool called `cargo rbmt` for running tests and lints in CI. There are no changes to the actual Bitcoin library code that users interact with, and no security issue is evident.
No security action required. Reviewers may optionally verify that the pinned `rbmt-version` and the `actions-rust-lang/setup-rust-toolchain` commit hash match expected trusted revisions, but this is standard supply-chain hygiene rather than a response to a vulnerability.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit refactors the GitHub Actions CI pipeline and per-crate test configuration. It removes contrib/test_vars.sh, contrib/extra_lints.sh, and bitcoin/contrib/extra_tests.sh files across multiple crates, replacing them with rbmt.toml configuration files. A new composite action installs cargo-rbmt from the rust-bitcoin-maintainer-tools repository at a pinned revision. Workflow jobs are simplified to call cargo rbmt test|lint|docs|bench instead of invoking shell scripts from a separately checked-out maintainer-tools repo. No source code, dependencies, or cryptographic logic in the published crates are modified.
Changed components
.github/workflows/rust.yml.github/actions/prepare/action.ymladdresses/rbmt.tomlbase58/rbmt.tomlbip158/rbmt.tomlbitcoin/rbmt.tomlchacha20_poly1305/rbmt.tomlconsensus_encoding/rbmt.tomlcrypto/rbmt.tomlfuzz/rbmt.tomlhashes/rbmt.tomlinternals/rbmt.tomlio/rbmt.tomlnetwork/rbmt.tomlp2p/rbmt.tomlprimitives/rbmt.tomlunits/rbmt.tomlInspect captured patch +297 / −384
diff --git a/.github/actions/prepare/action.yml b/.github/actions/prepare/action.yml
new file mode 100644
index 00000000..ff615d17
--- /dev/null
+++ b/.github/actions/prepare/action.yml
@@ -0,0 +1,36 @@
+name: 'Prepare Rust Environment'
+description: 'Setup Rust toolchain and install RBMT'
+inputs:
+ toolchain:
+ description: 'Rust toolchain to use (nightly reads from nightly-version file)'
+ required: false
+ default: 'stable'
+ components:
+ description: 'Rust components to install (e.g., clippy, rustfmt)'
+ required: false
+ default: ''
+runs:
+ using: "composite"
+ steps:
+ - name: "Determine toolchain"
+ id: toolchain
+ shell: bash
+ run: |
+ if [ "${INPUTS_TOOLCHAIN}" = "nightly" ]; then
+ TOOLCHAIN="$(cat nightly-version)"
+ else
+ TOOLCHAIN="${INPUTS_TOOLCHAIN}"
+ fi
+ echo "version=$TOOLCHAIN" >> $GITHUB_OUTPUT
+ env:
+ INPUTS_TOOLCHAIN: ${{ inputs.toolchain }}
+
+ - name: "Setup requested toolchain"
+ uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # v1.15.2
+ with:
+ toolchain: stable,${{ steps.toolchain.outputs.version }}
+ components: ${{ inputs.components }}
+
+ - name: "Install RBMT"
+ shell: bash
+ run: cargo +stable install --git https://github.com/rust-bitcoin/rust-bitcoin-maintainer-tools.git --rev "$(cat rbmt-version)" cargo-rbmt --locked
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index b6a9f5e6..f1bd4283 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -17,7 +17,6 @@ jobs:
contents: read
outputs:
nightly_version: ${{ steps.read_toolchain.outputs.nightly_version }}
- maintainer_tools_version: ${{ steps.read_toolchain.outputs.maintainer_tools_version }}
steps:
- name: "Checkout repo"
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
@@ -27,11 +26,9 @@ jobs:
id: read_toolchain
run: |
echo "nightly_version=$(cat nightly-version)" >> $GITHUB_OUTPUT
- echo "maintainer_tools_version=$(cat maintainer-tools-version)" >> $GITHUB_OUTPUT
Stable: # 2 jobs, one per manifest.
name: Test - stable toolchain
- needs: Prepare
runs-on: ubuntu-24.04
permissions:
contents: read
@@ -40,27 +37,17 @@ jobs:
matrix:
dep: [minimal, recent]
steps:
- - name: "Checkout repo"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - name: "Checkout maintainer tools"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: ./.github/actions/prepare
with:
- repository: rust-bitcoin/rust-bitcoin-maintainer-tools
- ref: ${{ needs.Prepare.outputs.maintainer_tools_version }}
- path: maintainer-tools
- persist-credentials: false
- - name: "Select toolchain"
- uses: dtolnay/rust-toolchain@5d458579430fc14a04a08a1e7d3694f545e91ce6 # stable
- - name: "Set dependencies"
- run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock
- - name: "Run test script"
- run: ./maintainer-tools/ci/run_task.sh stable
+ toolchain: stable
+ - name: "Run tests"
+ run: cargo rbmt test stable --lock-file ${{ matrix.dep }}
Nightly: # 2 jobs, one per manifest.
name: Test - nightly toolchain
- needs: Prepare
runs-on: ubuntu-24.04
permissions:
contents: read
@@ -69,29 +56,17 @@ jobs:
matrix:
dep: [minimal, recent]
steps:
- - name: "Checkout repo"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - name: "Checkout maintainer tools"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: ./.github/actions/prepare
with:
- repository: rust-bitcoin/rust-bitcoin-maintainer-tools
- ref: ${{ needs.Prepare.outputs.maintainer_tools_version }}
- path: maintainer-tools
- persist-credentials: false
- - name: "Select toolchain"
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
- with:
- toolchain: ${{ needs.Prepare.outputs.nightly_version }}
- - name: "Set dependencies"
- run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock
- - name: "Run test script"
- run: ./maintainer-tools/ci/run_task.sh nightly
+ toolchain: nightly
+ - name: "Run tests"
+ run: cargo rbmt test nightly --lock-file ${{ matrix.dep }}
MSRV: # 2 jobs, one per manifest.
name: Test - MSRV toolchain
- needs: Prepare
runs-on: ubuntu-24.04
permissions:
contents: read
@@ -100,35 +75,17 @@ jobs:
matrix:
dep: [minimal, recent]
steps:
- - name: "Checkout repo"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - name: "Checkout maintainer tools"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- repository: rust-bitcoin/rust-bitcoin-maintainer-tools
- ref: ${{ needs.Prepare.outputs.maintainer_tools_version }}
- path: maintainer-tools
- persist-credentials: false
- - name: "Free disk space"
- uses: endersonmenezes/free-disk-space@6c4664f43348c8c7011b53488d5ca65e9fc5cd1a # v3.0.0
- with:
- remove_android: true
- remove_dotnet: true
- remove_haskell: true
- - name: "Select toolchain"
- uses: dtolnay/rust-toolchain@5d458579430fc14a04a08a1e7d3694f545e91ce6 # stable
+ - uses: ./.github/actions/prepare
with:
toolchain: "1.74.0"
- - name: "Set dependencies"
- run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock
- - name: "Run test script"
- run: ./maintainer-tools/ci/run_task.sh msrv
+ - name: "Run tests"
+ run: cargo rbmt test msrv --lock-file ${{ matrix.dep }}
Lint:
name: Lint - nightly toolchain
- needs: Prepare
runs-on: ubuntu-24.04
permissions:
contents: read
@@ -137,31 +94,18 @@ jobs:
matrix:
dep: [recent]
steps:
- - name: "Checkout repo"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - name: "Checkout maintainer tools"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: ./.github/actions/prepare
with:
- repository: rust-bitcoin/rust-bitcoin-maintainer-tools
- ref: ${{ needs.Prepare.outputs.maintainer_tools_version }}
- path: maintainer-tools
- persist-credentials: false
- - name: "Select toolchain"
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
- with:
- toolchain: ${{ needs.Prepare.outputs.nightly_version }}
- - name: "Install clippy"
- run: rustup component add clippy
- - name: "Set dependencies"
- run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock
- - name: "Run test script"
- run: ./maintainer-tools/ci/run_task.sh lint
+ toolchain: nightly
+ components: clippy
+ - name: "Run lint"
+ run: cargo rbmt lint
Docs:
name: Docs - stable toolchain
- needs: Prepare
runs-on: ubuntu-24.04
permissions:
contents: read
@@ -170,27 +114,17 @@ jobs:
matrix:
dep: [recent]
steps:
- - name: "Checkout repo"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - name: "Checkout maintainer tools"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: ./.github/actions/prepare
with:
- repository: rust-bitcoin/rust-bitcoin-maintainer-tools
- ref: ${{ needs.Prepare.outputs.maintainer_tools_version }}
- path: maintainer-tools
- persist-credentials: false
- - name: "Select toolchain"
- uses: dtolnay/rust-toolchain@5d458579430fc14a04a08a1e7d3694f545e91ce6 # stable
- - name: "Set dependencies"
- run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock
- - name: "Run test script"
- run: ./maintainer-tools/ci/run_task.sh docs
+ toolchain: stable
+ - name: "Build docs"
+ run: cargo rbmt docs
Docsrs:
name: Docs - nightly toolchain
- needs: Prepare
runs-on: ubuntu-24.04
permissions:
contents: read
@@ -199,29 +133,17 @@ jobs:
matrix:
dep: [recent]
steps:
- - name: "Checkout repo"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- persist-credentials: false
- - name: "Checkout maintainer tools"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
- repository: rust-bitcoin/rust-bitcoin-maintainer-tools
- ref: ${{ needs.Prepare.outputs.maintainer_tools_version }}
- path: maintainer-tools
persist-credentials: false
- - name: "Select toolchain"
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
+ - uses: ./.github/actions/prepare
with:
- toolchain: ${{ needs.Prepare.outputs.nightly_version }}
- - name: "Set dependencies"
- run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock
- - name: "Run test script"
- run: ./maintainer-tools/ci/run_task.sh docsrs
+ toolchain: nightly
+ - name: "Build docs.rs docs"
+ run: cargo rbmt docsrs
Bench:
name: Bench - nightly toolchain
- needs: Prepare
runs-on: ubuntu-24.04
permissions:
contents: read
@@ -230,25 +152,14 @@ jobs:
matrix:
dep: [recent]
steps:
- - name: "Checkout repo"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- - name: "Checkout maintainer tools"
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - uses: ./.github/actions/prepare
with:
- repository: rust-bitcoin/rust-bitcoin-maintainer-tools
- ref: ${{ needs.Prepare.outputs.maintainer_tools_version }}
- path: maintainer-tools
- persist-credentials: false
- - name: "Select toolchain"
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
- with:
- toolchain: ${{ needs.Prepare.outputs.nightly_version }}
- - name: "Set dependencies"
- run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock
- - name: "Run test script"
- run: ./maintainer-tools/ci/run_task.sh bench
+ toolchain: nightly
+ - name: "Run benches"
+ run: cargo rbmt bench --lock-file ${{ matrix.dep }}
Arch32bit:
name: Test 32-bit version
@@ -444,7 +355,7 @@ jobs:
contrib/generate-primitives-re-export-test.sh && (cd ./primitives && cargo test --all-features)
contrib/generate-bitcoin-re-export-test.sh && (cd ./bitcoin && cargo test --all-features)
- DiffMutants:
+ DiffMutants:
name: Check cargo mutants in diff - stable toolchain
runs-on: ubuntu-24.04
steps:
diff --git a/addresses/contrib/extra_lints.sh b/addresses/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/addresses/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/addresses/contrib/test_vars.sh b/addresses/contrib/test_vars.sh
deleted file mode 100644
index 92dc0940..00000000
--- a/addresses/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD=""
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/addresses/rbmt.toml b/addresses/rbmt.toml
new file mode 100644
index 00000000..a44a78fd
--- /dev/null
+++ b/addresses/rbmt.toml
@@ -0,0 +1,14 @@
+# 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/contrib/extra_lints.sh b/base58/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/base58/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/base58/contrib/test_vars.sh b/base58/contrib/test_vars.sh
deleted file mode 100644
index 92dc0940..00000000
--- a/base58/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD=""
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/base58/rbmt.toml b/base58/rbmt.toml
new file mode 100644
index 00000000..a44a78fd
--- /dev/null
+++ b/base58/rbmt.toml
@@ -0,0 +1,14 @@
+# 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/bip158/contrib/extra_lints.sh b/bip158/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/bip158/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/bip158/contrib/test_vars.sh b/bip158/contrib/test_vars.sh
deleted file mode 100644
index 88e2d26e..00000000
--- a/bip158/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD=""
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD=""
-
-# Run these examples.
-EXAMPLES=""
diff --git a/bip158/rbmt.toml b/bip158/rbmt.toml
new file mode 100644
index 00000000..293e798c
--- /dev/null
+++ b/bip158/rbmt.toml
@@ -0,0 +1,14 @@
+# 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/contrib/extra_lints.sh b/bitcoin/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/bitcoin/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/bitcoin/contrib/extra_tests.sh b/bitcoin/contrib/extra_tests.sh
deleted file mode 100755
index d4c785c6..00000000
--- a/bitcoin/contrib/extra_tests.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-
-set -ex
-
-cargo run --locked --example bip32 7934c09359b234e076b9fa5a1abfd38e3dc2a9939745b7cc3c22a48d831d14bd
-cargo run --locked --no-default-features --example bip32 7934c09359b234e076b9fa5a1abfd38e3dc2a9939745b7cc3c22a48d831d14bd
diff --git a/bitcoin/contrib/test_vars.sh b/bitcoin/contrib/test_vars.sh
deleted file mode 100644
index 6b2d09e8..00000000
--- a/bitcoin/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD="rand serde secp-recovery bitcoinconsensus base64 arbitrary"
-
-# Test all these features without "std" or "alloc" enabled.
-FEATURES_WITHOUT_STD="rand serde secp-recovery bitcoinconsensus base64 arbitrary"
-
-# Run these examples.
-EXAMPLES="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"
diff --git a/bitcoin/rbmt.toml b/bitcoin/rbmt.toml
new file mode 100644
index 00000000..d9c30d70
--- /dev/null
+++ b/bitcoin/rbmt.toml
@@ -0,0 +1,28 @@
+# 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",
+]
diff --git a/chacha20_poly1305/contrib/extra_lints.sh b/chacha20_poly1305/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/chacha20_poly1305/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/chacha20_poly1305/contrib/test_vars.sh b/chacha20_poly1305/contrib/test_vars.sh
deleted file mode 100644
index 7aeb1ecc..00000000
--- a/chacha20_poly1305/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test these features with "std" enabled.
-FEATURES_WITH_STD=""
-
-# Test these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/chacha20_poly1305/rbmt.toml b/chacha20_poly1305/rbmt.toml
new file mode 100644
index 00000000..a44a78fd
--- /dev/null
+++ b/chacha20_poly1305/rbmt.toml
@@ -0,0 +1,14 @@
+# 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/contrib/extra_lints.sh b/consensus_encoding/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/consensus_encoding/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/consensus_encoding/contrib/test_vars.sh b/consensus_encoding/contrib/test_vars.sh
deleted file mode 100644
index b7f17173..00000000
--- a/consensus_encoding/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD=""
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc"
-
-# Run these examples.
-EXAMPLES="encoder:alloc"
diff --git a/consensus_encoding/rbmt.toml b/consensus_encoding/rbmt.toml
new file mode 100644
index 00000000..d8d3d998
--- /dev/null
+++ b/consensus_encoding/rbmt.toml
@@ -0,0 +1,14 @@
+# 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"]
diff --git a/crypto/contrib/extra_lints.sh b/crypto/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/crypto/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/crypto/contrib/test_vars.sh b/crypto/contrib/test_vars.sh
deleted file mode 100644
index 92dc0940..00000000
--- a/crypto/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD=""
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/crypto/rbmt.toml b/crypto/rbmt.toml
new file mode 100644
index 00000000..a44a78fd
--- /dev/null
+++ b/crypto/rbmt.toml
@@ -0,0 +1,14 @@
+# 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/rbmt.toml b/fuzz/rbmt.toml
new file mode 100644
index 00000000..4b85446c
--- /dev/null
+++ b/fuzz/rbmt.toml
@@ -0,0 +1,4 @@
+[lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
diff --git a/hashes/contrib/extra_lints.sh b/hashes/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/hashes/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/hashes/contrib/test_vars.sh b/hashes/contrib/test_vars.sh
deleted file mode 100644
index efcd3dcf..00000000
--- a/hashes/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD="serde small-hash"
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc serde small-hash"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/hashes/rbmt.toml b/hashes/rbmt.toml
new file mode 100644
index 00000000..735cbbac
--- /dev/null
+++ b/hashes/rbmt.toml
@@ -0,0 +1,14 @@
+# 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"]
diff --git a/internals/contrib/extra_lints.sh b/internals/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/internals/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/internals/contrib/test_vars.sh b/internals/contrib/test_vars.sh
deleted file mode 100644
index ad0a3f27..00000000
--- a/internals/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD="serde"
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc serde"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/internals/rbmt.toml b/internals/rbmt.toml
new file mode 100644
index 00000000..4d5687c6
--- /dev/null
+++ b/internals/rbmt.toml
@@ -0,0 +1,14 @@
+# 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"]
diff --git a/io/contrib/extra_lints.sh b/io/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/io/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/io/contrib/test_vars.sh b/io/contrib/test_vars.sh
deleted file mode 100644
index 279c2507..00000000
--- a/io/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD="hashes"
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc hashes"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/io/rbmt.toml b/io/rbmt.toml
new file mode 100644
index 00000000..b47ff04c
--- /dev/null
+++ b/io/rbmt.toml
@@ -0,0 +1,14 @@
+# 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"]
diff --git a/maintainer-tools-version b/maintainer-tools-version
deleted file mode 100644
index f9a7d00f..00000000
--- a/maintainer-tools-version
+++ /dev/null
@@ -1 +0,0 @@
-e7ad5b2aa5f742093d8e07d4a2a7d415254cf6f4
diff --git a/network/contrib/extra_lints.sh b/network/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/network/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/network/contrib/test_vars.sh b/network/contrib/test_vars.sh
deleted file mode 100644
index 92dc0940..00000000
--- a/network/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD=""
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/network/rbmt.toml b/network/rbmt.toml
new file mode 100644
index 00000000..a44a78fd
--- /dev/null
+++ b/network/rbmt.toml
@@ -0,0 +1,14 @@
+# 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/contrib/extra_lints.sh b/p2p/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/p2p/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/p2p/contrib/test_vars.sh b/p2p/contrib/test_vars.sh
deleted file mode 100644
index 701c4c89..00000000
--- a/p2p/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD=""
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="arbitrary"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/p2p/rbmt.toml b/p2p/rbmt.toml
new file mode 100644
index 00000000..c8426f5a
--- /dev/null
+++ b/p2p/rbmt.toml
@@ -0,0 +1,19 @@
+# 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"]
+
+# Features to test without the `std` feature.
+# Tests each feature alone, all pairs, and all together.
+features_without_std = ["arbitrary"]
+
+[lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
diff --git a/primitives/contrib/extra_lints.sh b/primitives/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/primitives/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/primitives/contrib/test_vars.sh b/primitives/contrib/test_vars.sh
deleted file mode 100644
index 159713bb..00000000
--- a/primitives/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test these features with "std" enabled.
-FEATURES_WITH_STD="serde arbitrary"
-
-# Test these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc serde arbitrary"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/primitives/rbmt.toml b/primitives/rbmt.toml
new file mode 100644
index 00000000..183d3c95
--- /dev/null
+++ b/primitives/rbmt.toml
@@ -0,0 +1,19 @@
+# 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"]
+
+# Features to test without the `std` feature.
+# Tests each feature alone, all pairs, and all together.
+features_without_std = ["alloc", "serde", "arbitrary"]
+
+[lint]
+allowed_duplicates = [
+ "hex-conservative",
+]
diff --git a/rbmt-version b/rbmt-version
new file mode 100644
index 00000000..ed695f88
--- /dev/null
+++ b/rbmt-version
@@ -0,0 +1 @@
+b5a97cc14517f12db07caa4b90822ef28f7f2420
diff --git a/units/contrib/extra_lints.sh b/units/contrib/extra_lints.sh
deleted file mode 100755
index 5e7f0c94..00000000
--- a/units/contrib/extra_lints.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-
-cargo clippy --all-targets --no-default-features --keep-going -- -D warnings
diff --git a/units/contrib/test_vars.sh b/units/contrib/test_vars.sh
deleted file mode 100644
index 91030c5d..00000000
--- a/units/contrib/test_vars.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# No shebang, this file should not be executed.
-# shellcheck disable=SC2148
-#
-# disable verify unused vars, despite the fact that they are used when sourced
-# shellcheck disable=SC2034
-
-# Test all these features with "std" enabled.
-FEATURES_WITH_STD="serde arbitrary"
-
-# Test all these features without "std" enabled.
-FEATURES_WITHOUT_STD="alloc serde arbitrary"
-
-# Run these examples.
-EXAMPLES=""
diff --git a/units/rbmt.toml b/units/rbmt.toml
new file mode 100644
index 00000000..cd5e44fc
--- /dev/null
+++ b/units/rbmt.toml
@@ -0,0 +1,14 @@
+# 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"]
+
+# Features to test without the `std` feature.
+# Tests each feature alone, all pairs, and all together.
+features_without_std = ["alloc", "serde", "arbitrary"]
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.