Remove v1 peer state channel maps & refactor with ChannelPhase #520
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: | |
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 | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain ${{ matrix.toolchain }} | |
rustup override set ${{ matrix.toolchain }} | |
- 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 | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain ${{ env.TOOLCHAIN }} | |
rustup override set ${{ env.TOOLCHAIN }} | |
- 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: stable | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install Rust ${{ env.TOOLCHAIN }} toolchain | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain ${{ env.TOOLCHAIN }} | |
rustup override set ${{ env.TOOLCHAIN }} | |
- 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 | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain ${{ env.TOOLCHAIN }} | |
rustup override set ${{ env.TOOLCHAIN }} | |
- 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 | |
- 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=taproot' | |
RUSTDOCFLAGS: '--cfg=taproot' | |
fuzz: | |
runs-on: ubuntu-latest | |
env: | |
TOOLCHAIN: 1.58 | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Install Rust ${{ env.TOOLCHAIN }} toolchain | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain ${{ env.TOOLCHAIN }} | |
rustup override set ${{ env.TOOLCHAIN }} | |
- 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 | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain ${{ env.TOOLCHAIN }} | |
rustup override set ${{ env.TOOLCHAIN }} | |
- 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 |