Merge pull request #8 from p2pderivatives/channel-keys-to-channel-det… #240
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Continuous Integration Checks | |
on: [push, pull_request] | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
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] | |
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 | |
- toolchain: stable | |
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 | |
- 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 | |
build-futures: true | |
build-no-std: true | |
build-tx-sync: false | |
runs-on: ${{ matrix.platform }} | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Install Rust ${{ matrix.toolchain }} toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ matrix.toolchain }} | |
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" | |
- name: Build on Rust ${{ matrix.toolchain }} with net-tokio | |
if: "matrix.build-net-tokio && !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: | | |
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.build-net-tokio && !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 | |
- 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 | |
- 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 | |
- 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.build-net-tokio && !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.build-no-std && !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 | |
if: "matrix.build-no-std && 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" | |
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.build-futures && !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" | |
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 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" | |
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 | |
- name: Install deps for kcov | |
if: matrix.coverage | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev | |
- name: Install kcov | |
if: matrix.coverage | |
run: | | |
wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz | |
tar xzf master.tar.gz | |
cd kcov-master && mkdir build && cd build | |
cmake .. | |
make | |
make install DESTDIR=../../kcov-build | |
cd ../.. && rm -rf kcov-master master.tar.gz | |
- name: Generate coverage report | |
if: matrix.coverage | |
run: | | |
for file in target/debug/deps/lightning*; do | |
[ -x "${file}" ] || continue; | |
mkdir -p "target/cov/$(basename $file)"; | |
./kcov-build/usr/local/bin/kcov --exclude-pattern=/.cargo,/usr/lib --verify "target/cov/$(basename $file)" "$file"; | |
done | |
- name: Upload coverage | |
if: matrix.coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
# Could you use this to fake the coverage report for your PR? Sure. | |
# Will anyone be impressed by your amazing coverage? No | |
# Maybe if codecov wasn't broken we wouldn't need to do this... | |
token: f421b687-4dc2-4387-ac3d-dc3b2528af57 | |
fail_ci_if_error: true | |
benchmark: | |
runs-on: ubuntu-latest | |
env: | |
TOOLCHAIN: stable | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Install Rust ${{ env.TOOLCHAIN }} toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ env.TOOLCHAIN }} | |
override: true | |
profile: minimal | |
- name: Cache routing graph snapshot | |
id: cache-graph | |
uses: actions/cache@v3 | |
with: | |
path: lightning/net_graph-2023-01-18.bin | |
key: ldk-net_graph-v0.0.113-2023-01-18.bin | |
- name: Fetch routing graph snapshot | |
if: steps.cache-graph.outputs.cache-hit != 'true' | |
run: | | |
curl --verbose -L -o lightning/net_graph-2023-01-18.bin https://bitcoin.ninja/ldk-net_graph-v0.0.113-2023-01-18.bin | |
echo "Sha sum: $(sha256sum lightning/net_graph-2023-01-18.bin | awk '{ print $1 }')" | |
if [ "$(sha256sum lightning/net_graph-2023-01-18.bin | awk '{ print $1 }')" != "${EXPECTED_ROUTING_GRAPH_SNAPSHOT_SHASUM}" ]; then | |
echo "Bad hash" | |
exit 1 | |
fi | |
env: | |
EXPECTED_ROUTING_GRAPH_SNAPSHOT_SHASUM: da6066f2bddcddbe7d8a6debbd53545697137b310bbb8c4911bc8c81fc5ff48c | |
- name: Fetch rapid graph sync reference input | |
run: | | |
curl --verbose -L -o lightning-rapid-gossip-sync/res/full_graph.lngossip https://bitcoin.ninja/ldk-compressed_graph-285cb27df79-2022-07-21.bin | |
echo "Sha sum: $(sha256sum lightning-rapid-gossip-sync/res/full_graph.lngossip | awk '{ print $1 }')" | |
if [ "$(sha256sum lightning-rapid-gossip-sync/res/full_graph.lngossip | awk '{ print $1 }')" != "${EXPECTED_RAPID_GOSSIP_SHASUM}" ]; then | |
echo "Bad hash" | |
exit 1 | |
fi | |
env: | |
EXPECTED_RAPID_GOSSIP_SHASUM: e0f5d11641c11896d7af3a2246d3d6c3f1720b7d2d17aab321ecce82e6b7deb8 | |
- name: Test with Network Graph on Rust ${{ matrix.toolchain }} | |
run: | | |
cd lightning | |
RUSTFLAGS="--cfg=require_route_graph_test" cargo test | |
RUSTFLAGS="--cfg=require_route_graph_test" cargo test --features hashbrown | |
cd .. | |
- name: Run benchmarks on Rust ${{ matrix.toolchain }} | |
run: | | |
RUSTC_BOOTSTRAP=1 cargo bench --features _bench_unstable | |
check_commits: | |
runs-on: ubuntu-latest | |
env: | |
TOOLCHAIN: 1.57.0 | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install Rust ${{ env.TOOLCHAIN }} toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ env.TOOLCHAIN }} | |
override: true | |
profile: minimal | |
- name: Fetch full tree and rebase on upstream | |
run: | | |
git remote add upstream https://github.com/lightningdevkit/rust-lightning | |
git fetch upstream | |
export GIT_COMMITTER_EMAIL="[email protected]" | |
export GIT_COMMITTER_NAME="RL CI" | |
git rebase upstream/main | |
- name: For each commit, run cargo check (including in fuzz) | |
run: ci/check-each-commit.sh upstream/main | |
check_release: | |
runs-on: ubuntu-latest | |
env: | |
TOOLCHAIN: stable | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install Rust ${{ env.TOOLCHAIN }} toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ env.TOOLCHAIN }} | |
override: true | |
profile: minimal | |
- name: Run cargo check for release build. | |
run: | | |
cargo check --release | |
cargo check --no-default-features --features=no-std --release | |
cargo check --no-default-features --features=futures --release | |
cargo doc --release | |
fuzz: | |
runs-on: ubuntu-latest | |
env: | |
TOOLCHAIN: stable | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Install Rust 1.58 toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: 1.58 | |
override: true | |
profile: minimal | |
- name: Install dependencies for honggfuzz | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install build-essential binutils-dev libunwind-dev | |
- name: Sanity check fuzz targets on Rust ${{ env.TOOLCHAIN }} | |
run: cd fuzz && RUSTFLAGS="--cfg=fuzzing" cargo test --verbose --color always | |
- name: Run fuzzers | |
run: cd fuzz && ./ci-fuzz.sh && cd .. | |
- name: Run lightning-invoice fuzzers | |
run: cd lightning-invoice/fuzz && RUSTFLAGS="--cfg=fuzzing" cargo test --verbose && ./ci-fuzz.sh | |
linting: | |
runs-on: ubuntu-latest | |
env: | |
TOOLCHAIN: stable | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Install Rust ${{ env.TOOLCHAIN }} toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ env.TOOLCHAIN }} | |
override: true | |
profile: minimal | |
- name: Install clippy | |
run: | | |
rustup component add clippy | |
- name: Run default clippy linting | |
run: | | |
cargo clippy -- -Aclippy::erasing_op -Aclippy::never_loop -Aclippy::if_same_then_else -Dclippy::try_err |