From: Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> Date: Fri, 24 Apr 2020 18:14:55 +0000 (+0000) Subject: Merge pull request #601 from D4nte/ci-in-github-action X-Git-Tag: v0.0.12~77 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=86a2607b008ed9bf95e89562a1822bcbfcfdcdb0;hp=5b24d3e3275b8ca7f0ea064cc1626c8e1def2ccb;p=rust-lightning Merge pull request #601 from D4nte/ci-in-github-action Add GitHub Action to build the project --- diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..98f4f19a --- /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 --color always + - name: Build on Rust ${{ matrix.toolchain }} + if: "! matrix.build-net-tokio" + run: RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always -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 --color always + - name: Test on Rust ${{ matrix.toolchain }} + if: "! matrix.build-net-tokio" + run: RUSTFLAGS="-C link-dead-code" 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: + 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 --color always + - name: Generate fuzz report + run: cd fuzz && ./ci-fuzz.sh diff --git a/.travis.yml b/.travis.yml index cc42b06c..0c36806c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,7 @@ script: - if [ "$BUILD_NET_TOKIO" == "1" ]; then RUSTFLAGS="-C link-dead-code" cargo test --verbose; fi - if [ "$BUILD_NET_TOKIO" != "1" ]; then RUSTFLAGS="-C link-dead-code" cargo test --verbose -p lightning; fi # Run lightning workspace fuzz tests on Rust stable - - if [ "$(rustup show | grep default | grep stable)" != "" ]; then cd fuzz && cargo test --verbose && ./travis-fuzz.sh; fi + - if [ "$(rustup show | grep default | grep stable)" != "" ]; then cd fuzz && cargo test --verbose && ./ci-fuzz.sh; fi # Generate code cov information on Rust 1.39.0 - if [ "$(rustup show | grep default | grep 1.39.0)" != "" ]; then wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && diff --git a/fuzz/ci-fuzz.sh b/fuzz/ci-fuzz.sh new file mode 100755 index 00000000..57e32647 --- /dev/null +++ b/fuzz/ci-fuzz.sh @@ -0,0 +1,36 @@ +#!/bin/bash +set -e + +pushd src/msg_targets +rm msg_*.rs +./gen_target.sh +[ "$(git diff)" != "" ] && exit 1 +popd +pushd src/bin +rm *_target.rs +./gen_target.sh +[ "$(git diff)" != "" ] && exit 1 +popd + +cargo install --force honggfuzz +sed -i 's/lto = true//' Cargo.toml +HFUZZ_BUILD_ARGS="--features honggfuzz_fuzz" cargo hfuzz build +for TARGET in src/bin/*.rs; do + FILENAME=$(basename $TARGET) + FILE="${FILENAME%.*}" + HFUZZ_RUN_ARGS="--exit_upon_crash -v -n2" + if [ "$FILE" = "chanmon_consistency_target" ]; then + HFUZZ_RUN_ARGS="$HFUZZ_RUN_ARGS -F 64 -N100000" + else + HFUZZ_RUN_ARGS="$HFUZZ_RUN_ARGS -N1000000" + fi + export HFUZZ_RUN_ARGS + HFUZZ_BUILD_ARGS="--features honggfuzz_fuzz" cargo hfuzz run $FILE + if [ -f hfuzz_workspace/$FILE/HONGGFUZZ.REPORT.TXT ]; then + cat hfuzz_workspace/$FILE/HONGGFUZZ.REPORT.TXT + for CASE in hfuzz_workspace/$FILE/SIG*; do + cat $CASE | xxd -p + done + exit 1 + fi +done diff --git a/fuzz/travis-fuzz.sh b/fuzz/travis-fuzz.sh deleted file mode 100755 index 57e32647..00000000 --- a/fuzz/travis-fuzz.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -set -e - -pushd src/msg_targets -rm msg_*.rs -./gen_target.sh -[ "$(git diff)" != "" ] && exit 1 -popd -pushd src/bin -rm *_target.rs -./gen_target.sh -[ "$(git diff)" != "" ] && exit 1 -popd - -cargo install --force honggfuzz -sed -i 's/lto = true//' Cargo.toml -HFUZZ_BUILD_ARGS="--features honggfuzz_fuzz" cargo hfuzz build -for TARGET in src/bin/*.rs; do - FILENAME=$(basename $TARGET) - FILE="${FILENAME%.*}" - HFUZZ_RUN_ARGS="--exit_upon_crash -v -n2" - if [ "$FILE" = "chanmon_consistency_target" ]; then - HFUZZ_RUN_ARGS="$HFUZZ_RUN_ARGS -F 64 -N100000" - else - HFUZZ_RUN_ARGS="$HFUZZ_RUN_ARGS -N1000000" - fi - export HFUZZ_RUN_ARGS - HFUZZ_BUILD_ARGS="--features honggfuzz_fuzz" cargo hfuzz run $FILE - if [ -f hfuzz_workspace/$FILE/HONGGFUZZ.REPORT.TXT ]; then - cat hfuzz_workspace/$FILE/HONGGFUZZ.REPORT.TXT - for CASE in hfuzz_workspace/$FILE/SIG*; do - cat $CASE | xxd -p - done - exit 1 - fi -done