bdk 0.30.2

A modern, lightweight, descriptor-based wallet library
Documentation
on:
  push:
    branches:
      - 'master'
      - 'release/*'
  pull_request:
    branches:
      - 'master'
      - 'release/*'

name: CI

jobs:

  build-test:
    name: Build and test
    runs-on: ubuntu-20.04
    strategy:
      matrix:
        rust:
          - version: stable
            clippy: true
          - version: 1.63.0 # MSRV
        features:
          - default
          - minimal
          - all-keys
          - minimal,use-esplora-blocking
          - key-value-db
          - electrum
          - compact_filters
          - use-esplora-blocking,key-value-db,electrum
          - compiler
          - rpc
          - verify
          - async-interface
          - use-esplora-async
          - sqlite
          - sqlite-bundled
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: Generate cache key
        run: echo "${{ matrix.rust.version }} ${{ matrix.features }}" | tee .cache_key
      - name: cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('.cache_key') }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}
      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust.version }}
          components: clippy
      - name: Pin dependencies for MSRV
        if: matrix.rust.version == '1.63.0'
        run: ./ci/pin-msrv.sh
      - name: Build
        run: cargo build --features bitcoin/std,miniscript/std,${{ matrix.features }} --no-default-features
      - name: Clippy
        if: ${{ matrix.rust.clippy }}
        run: cargo clippy --all-targets --features bitcoin/std,miniscript/std,${{ matrix.features }} --no-default-features -- -D warnings
      - name: Test
        run: cargo test --features bitcoin/std,miniscript/std,${{ matrix.features }} --no-default-features

  test-readme-examples:
    name: Test README.md examples
    runs-on: ubuntu-20.04
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-test-md-docs-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}
      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: clippy
      - name: Test
        run: cargo test --features bitcoin/std,miniscript/std,test-md-docs --no-default-features -- doctest::ReadmeDoctests

  test-blockchains:
    name: Blockchain ${{ matrix.blockchain.features }}
    if: false # disabled
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false
      max-parallel: 1
      matrix:
        blockchain:
          - name: electrum
            testprefix: blockchain::electrum::test
            features: test-electrum,verify,bitcoin/std,miniscript/std
          - name: rpc
            testprefix: blockchain::rpc::test
            features: test-rpc,bitcoin/std,miniscript/std
          - name: rpc-legacy
            testprefix: blockchain::rpc::test
            features: test-rpc-legacy,bitcoin/std,miniscript/std
          - name: esplora
            testprefix: esplora
            features: test-esplora,use-esplora-async,verify,bitcoin/std,miniscript/std
          - name: esplora
            testprefix: esplora
            features: test-esplora,use-esplora-blocking,verify,bitcoin/std,miniscript/std
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ github.job }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}
      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
      - name: Test
        run: cargo test --no-default-features --features bitcoin/std,miniscript/std,${{ matrix.blockchain.features }} ${{ matrix.blockchain.testprefix }}::bdk_blockchain_tests -- --test-threads=1

  check-wasm:
    name: Check WASM
    runs-on: ubuntu-20.04
    env:
      CC: clang-10
      CFLAGS: -I/usr/include
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ github.job }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}
        # Install a recent version of clang that supports wasm32
      - run: wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - || exit 1
      - run: sudo apt-add-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-10 main" || exit 1
      - run: sudo apt-get update || exit 1
      - run: sudo apt-get install -y libclang-common-10-dev clang-10 libc6-dev-i386 || exit 1
      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
      - name: Add target wasm32
        run: rustup target add wasm32-unknown-unknown
      - name: Check
        run: cargo check --target wasm32-unknown-unknown --features bitcoin/no-std,miniscript/no-std,async-interface,use-esplora-async,dev-getrandom-wasm --no-default-features

  fmt:
    name: Rust fmt
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - name: Check fmt
        run: cargo fmt --all -- --config format_code_in_doc_comments=true --check

  test_hardware_wallet:
    runs-on: ubuntu-20.04
    strategy:
      matrix:
        rust:
          - version: stable
          - version: 1.63.0 # MSRV
    steps:
    - name: Checkout
      uses: actions/checkout@v3
    - name: Build simulator image
      run: docker build -t hwi/ledger_emulator ./ci -f ci/Dockerfile.ledger
    - name: Run simulator image
      run: docker run --name simulator --network=host hwi/ledger_emulator &
    - name: Install Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.9'
    - name: Install python dependencies
      run: pip install hwi==2.1.1 protobuf==3.20.1
    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@master
      with:
        toolchain: ${{ matrix.rust.version }}
    - name: Pin dependencies for MSRV
      if: matrix.rust.version == '1.63.0'
      run: ./ci/pin-msrv.sh
    - name: Test
      run: cargo test --features test-hardware-signer