miniscript 13.0.0

Miniscript: a subset of Bitcoin Script designed for analysis
Documentation
---   # rust-miniscript 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 lock file.
    name: Test - stable toolchain
    runs-on: ubuntu-latest
    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 lock file.
    name: Test - nightly toolchain
    needs: Prepare
    runs-on: ubuntu-latest
    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 lock file.
    name: Test - 1.63.0 toolchain
    runs-on: ubuntu-latest
    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-latest
    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-latest
    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-latest
    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-latest
    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

  Format:                       #  1 job, run cargo fmt directly.
    name: Format - nightly toolchain
    needs: Prepare
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
    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 rustfmt"
        run: rustup component add rustfmt
      - name: "Check formatting"
        run: cargo fmt --all -- --check

  Integration:                  # 1 job for each bitcoind version we support.
    name: Integration tests - stable toolchain
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        feature:
          [
            "26_0",
            "25_2",
            "25_1",
            "25_0",
            "24_2",
            "24_1",
            "24_0_1",
            "23_2",
            "23_1",
            "23_0",
            "22_1",
            "22_0",
            "0_21_2",
            "0_20_2",
            "0_19_1",
            "0_18_1",
            "0_17_1",
          ]
    steps:
      - name: "Checkout repo"
        uses: actions/checkout@v4
      - name: "Select toolchain"
        uses: dtolnay/rust-toolchain@stable
      - name: "Run integration tests"
        run: cd bitcoind-tests && cargo test --features=${{ matrix.feature }}

  Embedded:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up QEMU
        run: sudo apt update && sudo apt install -y qemu-system-arm gcc-arm-none-eabi
      - name: Checkout Toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: nightly
          override: true
          components: rust-src
          target: thumbv7m-none-eabi
      - name: Run
        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"
        run: cd embedded && cargo run --target thumbv7m-none-eabi --release