on: [push, pull_request] name: CI jobs: build-test: name: Build and test runs-on: ubuntu-latest strategy: matrix: rust: - 1.53.0 # STABLE - 1.46.0 # MSRV features: - default - minimal - all-keys - minimal,esplora - key-value-db - electrum - compact_filters - esplora,key-value-db,electrum - compiler - rpc steps: - name: checkout uses: actions/checkout@v2 - name: Generate cache key run: echo "${{ matrix.rust }} ${{ matrix.features }}" | tee .cache_key - name: cache uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('.cache_key') }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }} - name: Set default toolchain run: rustup default ${{ matrix.rust }} - name: Set profile run: rustup set profile minimal - name: Add clippy run: rustup component add clippy - name: Update toolchain run: rustup update - name: Build run: cargo build --features ${{ matrix.features }} --no-default-features - name: Clippy run: cargo clippy --all-targets --features ${{ matrix.features }} --no-default-features -- -D warnings - name: Test run: cargo test --features ${{ matrix.features }} --no-default-features test-readme-examples: name: Test README.md examples runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v2 - name: cache uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-test-md-docs-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }} - name: Set default toolchain run: rustup default nightly - name: Set profile run: rustup set profile minimal - name: Update toolchain run: rustup update - name: Test run: cargo test --features test-md-docs --no-default-features -- doctest::ReadmeDoctests test-blockchains: name: Test ${{ matrix.blockchain.name }} runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: blockchain: - name: electrum - name: rpc - name: esplora env: BITCOIN_VER: 0.21.0 ELECTRS_RELEASE_URL: https://github.com/RCasatta/electrsd/releases/download/release_0.3.0 ELECTRS_VER: electrs_ubuntu-20.04_v0.8.10.zip ELECTRS_ESPLORA_VER: electrs_esplora_ubuntu-20.04_a33e97e1a1fc63fa9c20a116bb92579bbf43b254.zip steps: - name: Checkout uses: actions/checkout@v2 - name: Cache uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ github.job }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }} - name: Setup rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: Download electrs run: wget ${{ env.ELECTRS_RELEASE_URL }}/${{ env.ELECTRS_VER }} && unzip ${{ env.ELECTRS_VER }} && chmod +x ./electrs if: ${{ matrix.blockchain.name != 'esplora' }} - name: Download electrs esplora run: wget ${{ env.ELECTRS_RELEASE_URL }}/${{ env.ELECTRS_ESPLORA_VER }} && unzip ${{ env.ELECTRS_ESPLORA_VER }} && chmod +x ./electrs if: ${{ matrix.blockchain.name == 'esplora' }} - name: Set ELECTRS_EXE env run: echo "ELECTRS_EXE=${{ github.workspace }}/electrs" >> $GITHUB_ENV - name: Show electrs options run: ${{ env.ELECTRS_EXE }} --help - name: Set BITCOIND_EXE env run: echo "BITCOIND_EXE=${{ github.workspace }}/bitcoin-${{ env.BITCOIN_VER }}/bin/bitcoind" >> $GITHUB_ENV - name: Install bitcoind run: curl https://bitcoincore.org/bin/bitcoin-core-$BITCOIN_VER/bitcoin-$BITCOIN_VER-x86_64-linux-gnu.tar.gz | tar -xvz bitcoin-$BITCOIN_VER/bin/bitcoind - name: Test run: $HOME/.cargo/bin/cargo test --features test-${{ matrix.blockchain.name }},test-blockchains --no-default-features ${{ matrix.blockchain.name }}::bdk_blockchain_tests check-wasm: name: Check WASM runs-on: ubuntu-16.04 env: CC: clang-10 CFLAGS: -I/usr/include steps: - name: Checkout uses: actions/checkout@v2 - name: Cache uses: actions/cache@v2 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/xenial/ llvm-toolchain-xenial-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: Set default toolchain run: rustup default 1.53.0 # STABLE - name: Set profile run: rustup set profile minimal - name: Add target wasm32 run: rustup target add wasm32-unknown-unknown - name: Update toolchain run: rustup update - name: Check run: cargo check --target wasm32-unknown-unknown --features esplora --no-default-features fmt: name: Rust fmt runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Set default toolchain run: rustup default nightly - name: Set profile run: rustup set profile minimal - name: Add rustfmt run: rustup component add rustfmt - name: Update toolchain run: rustup update - name: Check fmt run: cargo fmt --all -- --config format_code_in_doc_comments=true --check