Replace the bulk of CI with a (much simpler) bash script

This commit is contained in:
Matt Corallo 2023-03-15 19:20:08 +00:00
parent 28cc71f980
commit 6558b510cf
2 changed files with 114 additions and 153 deletions

View File

@ -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"
- name: shellcheck the CI script
if: "matrix.platform == 'ubuntu-latest'"
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
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"
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
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
sudo apt-get -y install shellcheck
shellcheck ci/ci-tests.sh
- name: Run CI script with 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: LDK_COVERAGE_BUILD=true ./ci/ci-tests.sh
- name: Run CI script
if: "!matrix.coverage"
shell: bash # Default on Winblows is powershell
run: ./ci/ci-tests.sh
- name: Install deps for kcov
if: matrix.coverage
run: |

91
ci/ci-tests.sh Executable file
View File

@ -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