From 355dbbcde9289666a67728797d19535f50328518 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 21 Apr 2020 20:24:39 +1000 Subject: [PATCH] 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](https://codecov.io/gh/D4nte/rust-lightning/tree/752a58bc0441a49a0513f2cad979ad9e2621312a/lightning/src/chain) to ensure it is as expected. --- .github/workflows/build.yml | 97 +++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..43ed94dd --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,97 @@ +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 -- 2.30.2