rust-lightning/.github/workflows/build.yml
Valentine Wallace ce1f4562f5
Update CI to run build and tests on Macos and Windows in addition to Ubuntu.
We only run Macos and Windows on Rust stable, for efficient CI.
2020-09-17 16:07:39 -04:00

184 lines
7.9 KiB
YAML

name: Continuous Integration Checks
on: [push, pull_request]
jobs:
build:
strategy:
matrix:
platform: [ ubuntu-latest ]
toolchain: [ stable,
beta,
# 1.30.0 is MSRV for Rust-Lightning
1.30.0,
# 1.34.2 is Debian stable
1.34.2,
# 1.39.0 is MSRV for lightning-net-tokio and generates coverage
1.39.0]
include:
- toolchain: stable
build-net-tokio: true
- toolchain: stable
platform: macos-latest
build-net-tokio: true
- toolchain: stable
platform: windows-latest
build-net-tokio: true
- toolchain: beta
build-net-tokio: true
- toolchain: 1.39.0
build-net-tokio: true
coverage: true
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout source code
uses: actions/checkout@v2
- name: Install Rust ${{ matrix.toolchain }} toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
profile: minimal
- 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
- 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 on Rust ${{ matrix.toolchain }}
if: "! matrix.build-net-tokio"
run: cargo test --verbose --color always -p lightning
- 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/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@v1
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
check_commits:
runs-on: ubuntu-latest
env:
TOOLCHAIN: stable
steps:
- name: Checkout source code
uses: actions/checkout@v2
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/rust-bitcoin/rust-lightning
git fetch upstream
git rebase upstream/main
- name: For each commit, run cargo check (including in fuzz)
run: ci/check-each-commit.sh upstream/main
fuzz:
runs-on: ubuntu-latest
env:
TOOLCHAIN: stable
steps:
- name: Checkout source code
uses: actions/checkout@v2
- name: Install Rust ${{ env.TOOLCHAIN }} toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.TOOLCHAIN }}
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 && cargo test --verbose --color always
- name: Run fuzzers
run: cd fuzz && ./ci-fuzz.sh
check_bindings:
runs-on: ubuntu-latest
# Ubuntu's version of rustc uses its own LLVM instead of being a real native package.
# This leaves us with an incompatible LLVM version when linking. Instead, use a real OS.
# We further (temporarily) use Debian experimental since testing links rustc against the
# brand-new llvm-10, but clang/llvm still default to LLVM 9.
container: debian:experimental
env:
TOOLCHAIN: stable
steps:
- name: Install native Rust toolchain, Valgrind, and build utilitis
run: |
echo 'Package: llvm llvm-runtime clang lld' > /etc/apt/preferences.d/99-llvm10
echo 'Pin: release n=experimental' >> /etc/apt/preferences.d/99-llvm10
echo 'Pin-Priority: 995' >> /etc/apt/preferences.d/99-llvm10
apt-get update
apt-get -y dist-upgrade
apt-get -y install cargo valgrind lld git g++ clang
- name: Checkout source code
uses: actions/checkout@v2
- name: Sanity test bindings
working-directory: lightning-c-bindings
run: cargo check
- name: Install cbindgen
run: cargo install --force cbindgen
- name: Rebuild bindings, and check the sample app builds + links
run: ./genbindings.sh
- name: Check that the latest bindings are in git
run: |
if [ "$(git diff)" != "" ]; then
# cbindgen's bindings output order can be FS-dependant, so check that the lines are all the same:
mv lightning-c-bindings/include/lightning.h lightning-c-bindings/include/lightning.h.new
git checkout lightning-c-bindings/include/lightning.h
cat lightning-c-bindings/include/lightning.h | sort > lightning-c-bindings/include/lightning.h.sorted
cat lightning-c-bindings/include/lightning.h.new | sort > lightning-c-bindings/include/lightning.h.new.sorted
diff lightning-c-bindings/include/lightning.h.sorted lightning-c-bindings/include/lightning.h.new.sorted
#
mv lightning-c-bindings/include/lightningpp.hpp lightning-c-bindings/include/lightningpp.hpp.new
git checkout lightning-c-bindings/include/lightningpp.hpp
cat lightning-c-bindings/include/lightningpp.hpp | sort > lightning-c-bindings/include/lightningpp.hpp.sorted
cat lightning-c-bindings/include/lightningpp.hpp.new | sort > lightning-c-bindings/include/lightningpp.hpp.new.sorted
diff lightning-c-bindings/include/lightningpp.hpp.sorted lightning-c-bindings/include/lightningpp.hpp.new.sorted
#
[ "$(diff lightning-c-bindings/include/lightning.h.sorted lightning-c-bindings/include/lightning.h.new.sorted)" != "" ] && exit 2
[ "$(diff lightning-c-bindings/include/lightningpp.hpp.sorted lightning-c-bindings/include/lightningpp.hpp.new.sorted)" != "" ] && exit 3
git diff --exit-code
fi