From 11a0d266c5948378da1722bf341a24f4a1049f33 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 15 Mar 2023 18:08:35 +0000 Subject: [PATCH 1/6] Bump MSRV to 1.48 1.48.0 was released at the end of 2020, nearly 2.5 years ago. It has been the rustc available on Debian stable since bullseye, released in 2021. supporting Debian oldstable for more than a year seems more than sufficient time to give Debian folks to upgrade, and bullseye is set to become `oldstable` later this year with the release of `bookworm`, likely this summer. This also allows us to clean up our MSRV substantially, having a single MSRV across our crates rather than a number of separate ones. Sadly, windows already requires 1.49. --- .github/workflows/build.yml | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 100441d2be2..af861fcac12 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,12 +10,8 @@ jobs: platform: [ ubuntu-latest ] toolchain: [ stable, beta, - # 1.41.1 is MSRV for Rust-Lightning, lightning-invoice, and lightning-persister - 1.41.1, - # 1.45.2 is MSRV for lightning-net-tokio, lightning-block-sync, lightning-background-processor - 1.45.2, - # 1.47.0 will be the MSRV for no-std builds using hashbrown once core2 is updated - 1.47.0] + # 1.48.0 is the MSRV for all LDK crates except lightning-transaction-sync and Windows + 1.48.0] include: - toolchain: stable build-net-tokio: true @@ -56,18 +52,7 @@ jobs: build-tx-sync: true - toolchain: beta test-custom-message: true - - toolchain: 1.41.1 - build-no-std: false - test-log-variants: true - build-futures: false - build-tx-sync: false - - toolchain: 1.45.2 - build-net-old-tokio: true - build-net-tokio: true - build-no-std: false - build-futures: true - build-tx-sync: false - - toolchain: 1.47.0 + - toolchain: 1.48.0 build-futures: true build-no-std: true build-tx-sync: false From fb4f34cb2cc3259e812c9ebbb5c14db31feb2f91 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 15 Mar 2023 18:16:01 +0000 Subject: [PATCH 2/6] Remove `build-net-tokio` flag in CI since its now always true --- .github/workflows/build.yml | 36 ++++-------------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index af861fcac12..47780ee8c4a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,14 +14,12 @@ jobs: 1.48.0] include: - toolchain: stable - build-net-tokio: true build-no-std: true build-futures: true build-tx-sync: true coverage: true - toolchain: stable platform: macos-latest - build-net-tokio: true build-no-std: true build-futures: true build-tx-sync: true @@ -29,24 +27,20 @@ jobs: test-custom-message: true - toolchain: beta platform: macos-latest - build-net-tokio: true build-no-std: true build-futures: true build-tx-sync: true - toolchain: stable platform: windows-latest - build-net-tokio: true build-no-std: true build-futures: true build-tx-sync: false - toolchain: beta platform: windows-latest - build-net-tokio: true build-no-std: true build-futures: true build-tx-sync: false - toolchain: beta - build-net-tokio: true build-no-std: true build-futures: true build-tx-sync: true @@ -67,7 +61,6 @@ jobs: override: true profile: minimal - name: Pin tokio to 1.14 for Rust 1.45 - if: "matrix.build-net-old-tokio" run: cargo update -p tokio --precise "1.14.0" --verbose env: CARGO_NET_GIT_FETCH_WITH_CLI: "true" @@ -77,17 +70,11 @@ jobs: env: CARGO_NET_GIT_FETCH_WITH_CLI: "true" - name: Build on Rust ${{ matrix.toolchain }} with net-tokio - if: "matrix.build-net-tokio && !matrix.coverage" + if: "!matrix.coverage" run: cargo build --verbose --color always - name: Build on Rust ${{ matrix.toolchain }} with net-tokio, and full code-linking for coverage generation if: matrix.coverage run: RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always - - name: Build on Rust ${{ matrix.toolchain }} - if: "! matrix.build-net-tokio" - run: | - cargo build --verbose --color always -p lightning - cargo build --verbose --color always -p lightning-invoice - cargo build --verbose --color always -p lightning-persister - name: Build on Rust ${{ matrix.toolchain }} with all Log-Limiting features if: matrix.test-log-variants run: | @@ -96,7 +83,7 @@ jobs: cargo build --verbose --color always --features $FEATURE done - name: Build Block Sync Clients on Rust ${{ matrix.toolchain }} with features - if: "matrix.build-net-tokio && !matrix.coverage" + if: "!matrix.coverage" run: | cd lightning-block-sync cargo build --verbose --color always --features rest-client @@ -138,7 +125,7 @@ jobs: run: | cd lightning && RUST_BACKTRACE=1 cargo test --verbose --color always --features backtrace - name: Test on Rust ${{ matrix.toolchain }} with net-tokio - if: "matrix.build-net-tokio && !matrix.coverage" + if: "!matrix.coverage" run: cargo test --verbose --color always - name: Test on Rust ${{ matrix.toolchain }} with net-tokio, and full code-linking for coverage generation if: matrix.coverage @@ -186,23 +173,8 @@ jobs: run: | cd lightning-background-processor RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --no-default-features --features futures - - name: Test on Rust ${{ matrix.toolchain }} - if: "! matrix.build-net-tokio" - run: | - cargo test --verbose --color always -p lightning - cargo test --verbose --color always -p lightning-invoice - cargo test --verbose --color always -p lightning-rapid-gossip-sync - cargo test --verbose --color always -p lightning-persister - cargo test --verbose --color always -p lightning-background-processor - - name: Test C Bindings Modifications on Rust ${{ matrix.toolchain }} - if: "! matrix.build-net-tokio" - run: | - RUSTFLAGS="--cfg=c_bindings" cargo test --verbose --color always -p lightning - RUSTFLAGS="--cfg=c_bindings" cargo test --verbose --color always -p lightning-invoice - RUSTFLAGS="--cfg=c_bindings" cargo build --verbose --color always -p lightning-persister - RUSTFLAGS="--cfg=c_bindings" cargo build --verbose --color always -p lightning-background-processor - name: Test Block Sync Clients on Rust ${{ matrix.toolchain }} with features - if: "matrix.build-net-tokio && !matrix.coverage" + if: "!matrix.coverage" run: | cd lightning-block-sync cargo test --verbose --color always --features rest-client From 263173f06cdafab8a1fdfde06c5d875594d30377 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 15 Mar 2023 18:17:02 +0000 Subject: [PATCH 3/6] Remove `build-no-std` CI flag now that its always true --- .github/workflows/build.yml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 47780ee8c4a..42d01615de2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,41 +14,34 @@ jobs: 1.48.0] include: - toolchain: stable - build-no-std: true build-futures: true build-tx-sync: true coverage: true - toolchain: stable platform: macos-latest - build-no-std: true build-futures: true build-tx-sync: true - toolchain: stable test-custom-message: true - toolchain: beta platform: macos-latest - build-no-std: true build-futures: true build-tx-sync: true - toolchain: stable platform: windows-latest - build-no-std: true build-futures: true build-tx-sync: false - toolchain: beta platform: windows-latest - build-no-std: true build-futures: true build-tx-sync: false - toolchain: beta - build-no-std: true build-futures: true build-tx-sync: true - toolchain: beta test-custom-message: true - toolchain: 1.48.0 build-futures: true - build-no-std: true build-tx-sync: false runs-on: ${{ matrix.platform }} steps: @@ -131,7 +124,7 @@ jobs: if: matrix.coverage run: RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always - name: Test no-std builds on Rust ${{ matrix.toolchain }} - if: "matrix.build-no-std && !matrix.coverage" + if: "!matrix.coverage" shell: bash # Default on Winblows is powershell run: | for DIR in lightning lightning-invoice lightning-rapid-gossip-sync; do @@ -150,14 +143,14 @@ jobs: cd no-std-check cargo check --verbose --color always --features lightning-transaction-sync - name: Build no-std-check on Rust ${{ matrix.toolchain }} for ARM Embedded - if: "matrix.build-no-std && matrix.platform == 'ubuntu-latest'" + if: "matrix.platform == 'ubuntu-latest'" run: | cd no-std-check rustup target add thumbv7m-none-eabi sudo apt-get -y install gcc-arm-none-eabi cargo build --target=thumbv7m-none-eabi - name: Test on no-std builds Rust ${{ matrix.toolchain }} and full code-linking for coverage generation - if: "matrix.build-no-std && matrix.coverage" + if: "matrix.coverage" run: | cd lightning RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --no-default-features --features no-std From 4e32de71df66a23074bd3e2215a2a1b413c8fb55 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 15 Mar 2023 18:18:01 +0000 Subject: [PATCH 4/6] Remove `build-features` CI flag now that its always true --- .github/workflows/build.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 42d01615de2..d075326f54c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,34 +14,27 @@ jobs: 1.48.0] include: - toolchain: stable - build-futures: true build-tx-sync: true coverage: true - toolchain: stable platform: macos-latest - build-futures: true build-tx-sync: true - toolchain: stable test-custom-message: true - toolchain: beta platform: macos-latest - build-futures: true build-tx-sync: true - toolchain: stable platform: windows-latest - build-futures: true build-tx-sync: false - toolchain: beta platform: windows-latest - build-futures: true build-tx-sync: false - toolchain: beta - build-futures: true build-tx-sync: true - toolchain: beta test-custom-message: true - toolchain: 1.48.0 - build-futures: true build-tx-sync: false runs-on: ${{ matrix.platform }} steps: @@ -155,13 +148,13 @@ jobs: cd lightning RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --no-default-features --features no-std - name: Test futures builds on Rust ${{ matrix.toolchain }} - if: "matrix.build-futures && !matrix.coverage" + if: "!matrix.coverage" shell: bash # Default on Winblows is powershell run: | cd lightning-background-processor cargo test --verbose --color always --no-default-features --features futures - name: Test futures builds on Rust ${{ matrix.toolchain }} and full code-linking for coverage generation - if: "matrix.build-futures && matrix.coverage" + if: "matrix.coverage" shell: bash # Default on Winblows is powershell run: | cd lightning-background-processor From 28cc71f9801abd709fdd1481b5fefe748f0e358e Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 15 Mar 2023 19:19:49 +0000 Subject: [PATCH 5/6] Fix onion_message functional_tests `no-std` build --- lightning/src/onion_message/functional_tests.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lightning/src/onion_message/functional_tests.rs b/lightning/src/onion_message/functional_tests.rs index aee7f562def..a2f045c3691 100644 --- a/lightning/src/onion_message/functional_tests.rs +++ b/lightning/src/onion_message/functional_tests.rs @@ -20,6 +20,7 @@ use bitcoin::network::constants::Network; use bitcoin::secp256k1::{PublicKey, Secp256k1}; use crate::io; +use crate::io_extras::read_to_end; use crate::sync::Arc; struct MessengerNode { @@ -59,8 +60,7 @@ impl CustomOnionMessageHandler for TestCustomMessageHandler { fn handle_custom_message(&self, _msg: Self::CustomMessage) {} fn read_custom_message(&self, message_type: u64, buffer: &mut R) -> Result, DecodeError> where Self: Sized { if message_type == CUSTOM_MESSAGE_TYPE { - let mut buf = Vec::new(); - buffer.read_to_end(&mut buf)?; + let buf = read_to_end(buffer)?; assert_eq!(buf, CUSTOM_MESSAGE_CONTENTS); return Ok(Some(TestCustomMessage {})) } From 6558b510cf2cd2c697dfa4b09a59f07947254ba4 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 15 Mar 2023 19:20:08 +0000 Subject: [PATCH 6/6] Replace the bulk of CI with a (much simpler) bash script --- .github/workflows/build.yml | 174 +++++------------------------------- ci/ci-tests.sh | 91 +++++++++++++++++++ 2 files changed, 113 insertions(+), 152 deletions(-) create mode 100755 ci/ci-tests.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d075326f54c..881e4f24749 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,35 +7,21 @@ jobs: strategy: fail-fast: false matrix: - platform: [ ubuntu-latest ] - toolchain: [ stable, - beta, - # 1.48.0 is the MSRV for all LDK crates except lightning-transaction-sync and Windows - 1.48.0] + platform: [ ubuntu-latest, windows-latest, macos-latest ] + toolchain: [ stable, beta ] include: - toolchain: stable - build-tx-sync: true + platform: ubuntu-latest coverage: true - - toolchain: stable - platform: macos-latest - build-tx-sync: true - - toolchain: stable - test-custom-message: true - - toolchain: beta - platform: macos-latest - build-tx-sync: true - - toolchain: stable - platform: windows-latest - build-tx-sync: false - - toolchain: beta - platform: windows-latest - build-tx-sync: false - - toolchain: beta - build-tx-sync: true - - toolchain: beta - test-custom-message: true + # 1.48.0 is the MSRV for all crates except lightning-transaction-sync and Win/Mac - toolchain: 1.48.0 - build-tx-sync: false + platform: ubuntu-latest + # Windows requires 1.49.0 because that's the MSRV for supported Tokio + - toolchain: 1.49.0 + platform: windows-latest + # MacOS-latest requires 1.54.0 because that's what's required for linking to work properly + - toolchain: 1.54.0 + platform: macos-latest runs-on: ${{ matrix.platform }} steps: - name: Checkout source code @@ -46,140 +32,24 @@ jobs: toolchain: ${{ matrix.toolchain }} override: true profile: minimal - - name: Pin tokio to 1.14 for Rust 1.45 - run: cargo update -p tokio --precise "1.14.0" --verbose - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" - - name: Pin tokio to 1.26 for Windows - if: "matrix.platform == 'windows-latest'" - run: cargo update -p tokio --precise "1.26.0" --verbose - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" - - name: Build on Rust ${{ matrix.toolchain }} with net-tokio - if: "!matrix.coverage" - run: cargo build --verbose --color always - - name: Build on Rust ${{ matrix.toolchain }} with net-tokio, and full code-linking for coverage generation - if: matrix.coverage - run: RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always - - name: Build on Rust ${{ matrix.toolchain }} with all Log-Limiting features - if: matrix.test-log-variants - run: | - cd lightning - for FEATURE in $(cat Cargo.toml | grep '^max_level_' | awk '{ print $1 }'); do - cargo build --verbose --color always --features $FEATURE - done - - name: Build Block Sync Clients on Rust ${{ matrix.toolchain }} with features - if: "!matrix.coverage" - run: | - cd lightning-block-sync - cargo build --verbose --color always --features rest-client - cargo build --verbose --color always --features rpc-client - cargo build --verbose --color always --features rpc-client,rest-client - cargo build --verbose --color always --features rpc-client,rest-client,tokio - - name: Build Block Sync Clients on Rust ${{ matrix.toolchain }} with features and full code-linking for coverage generation - if: matrix.coverage - run: | - cd lightning-block-sync - RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features rest-client - RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features rpc-client - RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features rpc-client,rest-client - RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features rpc-client,rest-client,tokio - - name: Build Transaction Sync Clients on Rust ${{ matrix.toolchain }} with features - if: "matrix.build-tx-sync && !matrix.coverage" - run: | - cd lightning-transaction-sync - cargo build --verbose --color always --features esplora-blocking - cargo build --verbose --color always --features esplora-async - cargo build --verbose --color always --features esplora-async-https - - name: Build transaction sync clients on Rust ${{ matrix.toolchain }} with features and full code-linking for coverage generation - if: "matrix.build-tx-sync && matrix.coverage" - run: | - cd lightning-transaction-sync - RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features esplora-blocking - RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features esplora-async - RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features esplora-async-https - - name: Test transaction sync clients on Rust ${{ matrix.toolchain }} with features - if: "matrix.build-tx-sync" - run: | - cd lightning-transaction-sync - cargo test --verbose --color always --features esplora-blocking - cargo test --verbose --color always --features esplora-async - cargo test --verbose --color always --features esplora-async-https - - name: Test backtrace-debug builds on Rust ${{ matrix.toolchain }} - if: "matrix.toolchain == 'stable'" - shell: bash # Default on Winblows is powershell - run: | - cd lightning && RUST_BACKTRACE=1 cargo test --verbose --color always --features backtrace - - name: Test on Rust ${{ matrix.toolchain }} with net-tokio - if: "!matrix.coverage" - run: cargo test --verbose --color always - - name: Test on Rust ${{ matrix.toolchain }} with net-tokio, and full code-linking for coverage generation - if: matrix.coverage - run: RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always - - name: Test no-std builds on Rust ${{ matrix.toolchain }} - if: "!matrix.coverage" - shell: bash # Default on Winblows is powershell - run: | - for DIR in lightning lightning-invoice lightning-rapid-gossip-sync; do - cd $DIR - cargo test --verbose --color always --no-default-features --features no-std - # check if there is a conflict between no-std and the default std feature - cargo test --verbose --color always --features no-std - # check that things still pass without grind_signatures - # note that outbound_commitment_test only runs in this mode, because of hardcoded signature values - cargo test --verbose --color always --no-default-features --features std - # check if there is a conflict between no-std and the c_bindings cfg - RUSTFLAGS="--cfg=c_bindings" cargo test --verbose --color always --no-default-features --features=no-std - cd .. - done - # check no-std compatibility across dependencies - cd no-std-check - cargo check --verbose --color always --features lightning-transaction-sync - - name: Build no-std-check on Rust ${{ matrix.toolchain }} for ARM Embedded + - name: Install no-std-check dependencies for ARM Embedded if: "matrix.platform == 'ubuntu-latest'" run: | - cd no-std-check rustup target add thumbv7m-none-eabi sudo apt-get -y install gcc-arm-none-eabi - cargo build --target=thumbv7m-none-eabi - - name: Test on no-std builds Rust ${{ matrix.toolchain }} and full code-linking for coverage generation - if: "matrix.coverage" - run: | - cd lightning - RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --no-default-features --features no-std - - name: Test futures builds on Rust ${{ matrix.toolchain }} - if: "!matrix.coverage" - shell: bash # Default on Winblows is powershell + - name: shellcheck the CI script + if: "matrix.platform == 'ubuntu-latest'" run: | - cd lightning-background-processor - cargo test --verbose --color always --no-default-features --features futures - - name: Test futures builds on Rust ${{ matrix.toolchain }} and full code-linking for coverage generation - if: "matrix.coverage" + sudo apt-get -y install shellcheck + shellcheck ci/ci-tests.sh + - name: Run CI script with coverage generation + if: matrix.coverage shell: bash # Default on Winblows is powershell - run: | - cd lightning-background-processor - RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --no-default-features --features futures - - name: Test Block Sync Clients on Rust ${{ matrix.toolchain }} with features + run: LDK_COVERAGE_BUILD=true ./ci/ci-tests.sh + - name: Run CI script if: "!matrix.coverage" - run: | - cd lightning-block-sync - cargo test --verbose --color always --features rest-client - cargo test --verbose --color always --features rpc-client - cargo test --verbose --color always --features rpc-client,rest-client - cargo test --verbose --color always --features rpc-client,rest-client,tokio - - name: Test Block Sync Clients on Rust ${{ matrix.toolchain }} with features and full code-linking for coverage generation - if: matrix.coverage - run: | - cd lightning-block-sync - RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --features rest-client - RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --features rpc-client - RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --features rpc-client,rest-client - RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --features rpc-client,rest-client,tokio - - name: Test Custom Message Macros on Rust ${{ matrix.toolchain }} - if: "matrix.test-custom-message" - run: | - cd lightning-custom-message - cargo test --verbose --color always + shell: bash # Default on Winblows is powershell + run: ./ci/ci-tests.sh - name: Install deps for kcov if: matrix.coverage run: | diff --git a/ci/ci-tests.sh b/ci/ci-tests.sh new file mode 100755 index 00000000000..7b0beb90fa9 --- /dev/null +++ b/ci/ci-tests.sh @@ -0,0 +1,91 @@ +#!/bin/bash +set -eox pipefail + +RUSTC_MINOR_VERSION=$(rustc --version | awk '{ split($2,a,"."); print a[2] }') +HOST_PLATFORM="$(rustc --version --verbose | grep "host:" | awk '{ print $2 }')" + +# Tokio MSRV on versions newer than 1.14 is rustc 1.49 +[ "$RUSTC_MINOR_VERSION" -lt 49 ] && cargo update -p tokio --precise "1.14.0" --verbose +[ "$LDK_COVERAGE_BUILD" != "" ] && export RUSTFLAGS="-C link-dead-code" + +export RUST_BACKTRACE=1 + +echo -e "\n\nBuilding and testing all workspace crates..." +cargo build --verbose --color always +cargo test --verbose --color always + +echo -e "\n\nBuilding with all Log-Limiting features" +pushd lightning +grep '^max_level_' Cargo.toml | awk '{ print $1 }'| while read -r FEATURE; do + cargo build --verbose --color always --features "$FEATURE" +done +popd + +if [ "$RUSTC_MINOR_VERSION" -gt 51 ]; then # Current `object` MSRV, subject to change + echo -e "\n\nTest backtrace-debug builds" + pushd lightning + cargo test --verbose --color always --features backtrace + popd +fi + +echo -e "\n\nTesting no-std flags in various combinations" +for DIR in lightning lightning-invoice lightning-rapid-gossip-sync; do + pushd $DIR + cargo test --verbose --color always --no-default-features --features no-std + # check if there is a conflict between no-std and the default std feature + cargo test --verbose --color always --features no-std + # check that things still pass without grind_signatures + # note that outbound_commitment_test only runs in this mode, because of hardcoded signature values + cargo test --verbose --color always --no-default-features --features std + # check if there is a conflict between no-std and the c_bindings cfg + RUSTFLAGS="--cfg=c_bindings" cargo test --verbose --color always --no-default-features --features=no-std + popd +done + +echo -e "\n\nTesting no-std build on a downstream no-std crate" +# check no-std compatibility across dependencies +pushd no-std-check +cargo check --verbose --color always --features lightning-transaction-sync +popd + +if [ -f "$(which arm-none-eabi-gcc)" ]; then + pushd no-std-check + cargo build --target=thumbv7m-none-eabi + popd +fi + +echo -e "\n\nBuilding and testing Block Sync Clients with features" +pushd lightning-block-sync +cargo build --verbose --color always --features rest-client +cargo test --verbose --color always --features rest-client +cargo build --verbose --color always --features rpc-client +cargo test --verbose --color always --features rpc-client +cargo build --verbose --color always --features rpc-client,rest-client +cargo test --verbose --color always --features rpc-client,rest-client +cargo build --verbose --color always --features rpc-client,rest-client,tokio +cargo test --verbose --color always --features rpc-client,rest-client,tokio +popd + +if [[ $RUSTC_MINOR_VERSION -gt 67 && "$HOST_PLATFORM" != *windows* ]]; then + echo -e "\n\nBuilding and testing Transaction Sync Clients with features" + pushd lightning-transaction-sync + cargo build --verbose --color always --features esplora-blocking + cargo test --verbose --color always --features esplora-blocking + cargo build --verbose --color always --features esplora-async + cargo test --verbose --color always --features esplora-async + cargo build --verbose --color always --features esplora-async-https + cargo test --verbose --color always --features esplora-async-https + popd +fi + +echo -e "\n\nTest futures builds" +pushd lightning-background-processor +cargo test --verbose --color always --no-default-features --features futures +popd + +if [ "$RUSTC_MINOR_VERSION" -gt 55 ]; then + echo -e "\n\nTest Custom Message Macros" + pushd lightning-custom-message + cargo test --verbose --color always + popd +fi