rust-lightning/.github/workflows/build.yml
Franck Royer 355dbbcde9
Add CI using GitHub Action
Same setup than Travis except for removing
`rm -f target/debug/lightning-*` as I do not believe
such file would exist on a fresh run.

I have not setup caching at this stage. The library is
small so I don't think it'd be that necessary/helpful.

I'd recommend to let both CI run for a bit to compare
performance and stability. The CI setup is straightforward
so I do not foresee any issue with GitHub actions.

Once happy, Travis file can be removed and branch
protection checks can be updated to block on the GitHub
actions.

You can also check the [Coverage report](752a58bc04/lightning/src/chain) to ensure it is as expected.
2020-04-24 14:49:22 +10:00

97 lines
3.4 KiB
YAML

name: Continuous Integration Checks
on:
push:
jobs:
build:
strategy:
matrix:
toolchain: [ stable,
beta,
# 1.22.0 is MSRV for rust-lightning in general:
1.22.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: beta
build-net-tokio: true
- toolchain: 1.39.0
build-net-tokio: true
coverage: true
runs-on: ubuntu-latest
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
run: RUSTFLAGS="-C link-dead-code" cargo build --verbose
- name: Build on Rust ${{ matrix.toolchain }}
if: "! matrix.build-net-tokio"
run: RUSTFLAGS="-C link-dead-code" cargo build --verbose -p lightning
- name: Test on Rust ${{ matrix.toolchain }} with net-tokio
if: matrix.build-net-tokio
run: RUSTFLAGS="-C link-dead-code" cargo test --verbose
- name: Test on Rust ${{ matrix.toolchain }}
if: "! matrix.build-net-tokio"
run: RUSTFLAGS="-C link-dead-code" cargo test --verbose -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:
fail_ci_if_error: true
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: Fuzz test on Rust ${{ matrix.TOOLCHAIN }}
run: cd fuzz && cargo test --verbose
- name: Generate fuzz report
run: cd fuzz && ./ci-fuzz.sh