mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 15:20:24 +01:00
Rather than using the std benchmark framework (which isn't maintained and is unlikely to get any further maintenance), we swap for criterion, which at least gets us a variable number of test runs so our benchmarks don't take forever. We also fix the RGS benchmark to pass now that the file in use is stale compared to today's date.
250 lines
9.2 KiB
YAML
250 lines
9.2 KiB
YAML
name: Continuous Integration Checks
|
|
|
|
on:
|
|
push:
|
|
branches-ignore:
|
|
- master
|
|
pull_request:
|
|
branches-ignore:
|
|
- master
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
toolchain: [ stable, beta ]
|
|
include:
|
|
- toolchain: stable
|
|
platform: ubuntu-latest
|
|
coverage: true
|
|
# 1.48.0 is the MSRV for all crates except lightning-transaction-sync and Win/Mac
|
|
- toolchain: 1.48.0
|
|
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
|
|
uses: actions/checkout@v3
|
|
- name: Install Rust ${{ matrix.toolchain }} toolchain
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.toolchain }}
|
|
override: true
|
|
profile: minimal
|
|
- name: Install no-std-check dependencies for ARM Embedded
|
|
if: "matrix.platform == 'ubuntu-latest'"
|
|
run: |
|
|
rustup target add thumbv7m-none-eabi
|
|
sudo apt-get -y install gcc-arm-none-eabi
|
|
- name: shellcheck the CI script
|
|
if: "matrix.platform == 'ubuntu-latest'"
|
|
run: |
|
|
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: 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: |
|
|
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: |
|
|
cd bench
|
|
RUSTFLAGS="--cfg=ldk_bench --cfg=require_route_graph_test" cargo bench
|
|
- name: Run benchmarks with hashbrown on Rust ${{ matrix.toolchain }}
|
|
run: |
|
|
cd bench
|
|
RUSTFLAGS="--cfg=ldk_bench --cfg=require_route_graph_test" cargo bench --features hashbrown
|
|
|
|
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="rl-ci@example.com"
|
|
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
|
|
RUSTDOCFLAGS="--cfg=anchors" cargo doc --release
|
|
- name: Run cargo check for Taproot 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
|
|
env:
|
|
RUSTFLAGS: '--cfg=anchors --cfg=taproot'
|
|
RUSTDOCFLAGS: '--cfg=anchors --cfg=taproot'
|
|
|
|
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
|