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
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: |
--- /dev/null
+#!/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