--- # rust-bitcoin CI: If you edit this file please update README.md on: # yamllint disable-line rule:truthy push: branches: - master - 'test-ci/**' pull_request: name: Continuous integration jobs: Prepare: runs-on: ubuntu-24.04 outputs: nightly_version: ${{ steps.read_toolchain.outputs.nightly_version }} steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Read nightly version" id: read_toolchain run: echo "nightly_version=$(cat nightly-version)" >> $GITHUB_OUTPUT Stable: # 2 jobs, one per manifest. name: Test - stable toolchain runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: dep: [minimal, recent] steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Checkout maintainer tools" uses: actions/checkout@v4 with: repository: rust-bitcoin/rust-bitcoin-maintainer-tools ref: c3324024ced9bb1eb854397686919c3ff7d97e1e path: maintainer-tools - name: "Select toolchain" uses: dtolnay/rust-toolchain@stable - name: "Set dependencies" run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock - name: "Run test script" run: ./maintainer-tools/ci/run_task.sh stable Nightly: # 2 jobs, one per manifest. name: Test - nightly toolchain needs: Prepare runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: dep: [minimal, recent] steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Checkout maintainer tools" uses: actions/checkout@v4 with: repository: rust-bitcoin/rust-bitcoin-maintainer-tools ref: c3324024ced9bb1eb854397686919c3ff7d97e1e path: maintainer-tools - name: "Select toolchain" uses: dtolnay/rust-toolchain@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 MSRV: # 2 jobs, one per manifest. name: Test - MSRV toolchain runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: dep: [minimal, recent] steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Checkout maintainer tools" uses: actions/checkout@v4 with: repository: rust-bitcoin/rust-bitcoin-maintainer-tools ref: c3324024ced9bb1eb854397686919c3ff7d97e1e path: maintainer-tools - name: "Select toolchain" uses: dtolnay/rust-toolchain@stable with: toolchain: "1.63.0" - name: "Set dependencies" run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock - name: "Run test script" run: ./maintainer-tools/ci/run_task.sh msrv Lint: name: Lint - nightly toolchain needs: Prepare runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: dep: [recent] steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Checkout maintainer tools" uses: actions/checkout@v4 with: repository: rust-bitcoin/rust-bitcoin-maintainer-tools ref: c3324024ced9bb1eb854397686919c3ff7d97e1e path: maintainer-tools - name: "Select toolchain" uses: dtolnay/rust-toolchain@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 Docs: name: Docs - stable toolchain runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: dep: [recent] steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Checkout maintainer tools" uses: actions/checkout@v4 with: repository: rust-bitcoin/rust-bitcoin-maintainer-tools ref: c3324024ced9bb1eb854397686919c3ff7d97e1e path: maintainer-tools - name: "Select toolchain" uses: dtolnay/rust-toolchain@stable - name: "Set dependencies" run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock - name: "Run test script" run: ./maintainer-tools/ci/run_task.sh docs Docsrs: name: Docs - nightly toolchain needs: Prepare runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: dep: [recent] steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Checkout maintainer tools" uses: actions/checkout@v4 with: repository: rust-bitcoin/rust-bitcoin-maintainer-tools ref: c3324024ced9bb1eb854397686919c3ff7d97e1e path: maintainer-tools - name: "Select toolchain" uses: dtolnay/rust-toolchain@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 docsrs Bench: name: Bench - nightly toolchain needs: Prepare runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: dep: [recent] steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Checkout maintainer tools" uses: actions/checkout@v4 with: repository: rust-bitcoin/rust-bitcoin-maintainer-tools ref: c3324024ced9bb1eb854397686919c3ff7d97e1e path: maintainer-tools - name: "Select toolchain" uses: dtolnay/rust-toolchain@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 Arch32bit: name: Test 32-bit version runs-on: ubuntu-24.04 steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Select toolchain" uses: dtolnay/rust-toolchain@stable - name: "Add architecture i386" run: sudo dpkg --add-architecture i386 - name: "Install i686 gcc" run: sudo apt-get update -y && sudo apt-get install -y gcc-multilib - name: "Install target" run: rustup target add i686-unknown-linux-gnu - name: "Run test on i686" run: cargo test --target i686-unknown-linux-gnu Cross: name: Cross test - stable toolchain if: ${{ !github.event.act }} runs-on: ubuntu-24.04 steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Select toolchain" uses: dtolnay/rust-toolchain@stable - name: "Install target" run: rustup target add s390x-unknown-linux-gnu - name: "Install cross" run: cargo install cross --locked - name: "Run cross test" run: cross test --target s390x-unknown-linux-gnu Embedded: name: Embedded - nightly toolchain needs: Prepare runs-on: ubuntu-24.04 env: RUSTFLAGS: "-C link-arg=-Tlink.x" CARGO_TARGET_THUMBV7M_NONE_EABI_RUNNER: "qemu-system-arm -cpu cortex-m3 -machine mps2-an385 -nographic -semihosting-config enable=on,target=native -kernel" steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Set up QEMU" run: sudo apt update && sudo apt install -y qemu-system-arm gcc-arm-none-eabi - name: "Select toolchain" uses: dtolnay/rust-toolchain@v1 with: toolchain: ${{ needs.Prepare.outputs.nightly_version }} targets: thumbv7m-none-eabi - name: "Install rust-src" run: rustup component add rust-src - name: "Run bitcoin/embedded" run: cd bitcoin/embedded && cargo run --target thumbv7m-none-eabi - name: "Run hashes/embedded no alloc" run: cd hashes/embedded && cargo run --target thumbv7m-none-eabi - name: "Run hashes/embedded with alloc and no hex" run: cd hashes/embedded && cargo run --target thumbv7m-none-eabi --features=alloc - name: "Run hashes/embedded with alloc and hex" run: cd hashes/embedded && cargo run --target thumbv7m-none-eabi --features=alloc,hex ASAN: # hashes crate only. name: ASAN - nightly toolchain needs: Prepare runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: dep: [recent] steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Select toolchain" uses: dtolnay/rust-toolchain@v1 with: toolchain: ${{ needs.Prepare.outputs.nightly_version }} - name: "Install rust-src" run: rustup component add rust-src - name: "Set dependencies" run: cp Cargo-${{ matrix.dep }}.lock Cargo.lock - name: "Run sanitizer script" run: cd ./hashes && ./contrib/sanitizer.sh WASM: # hashes crate only. name: WASM - stable toolchain runs-on: ubuntu-24.04 strategy: fail-fast: false # Note we do not use the recent lock file for wasm testing. steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Select toolchain" uses: dtolnay/rust-toolchain@stable - name: "Run wasm script" run: cd hashes && ./contrib/wasm.sh Kani: name: Kani codegen - stable toolchain runs-on: ubuntu-24.04 steps: - name: "Checkout repo" uses: actions/checkout@v4 - name: "Build Kani proofs" uses: model-checking/kani-github-action@v1.1 with: args: "--only-codegen"