Add CI using GitHub Action
authorFranck Royer <franck@royer.one>
Tue, 21 Apr 2020 10:24:39 +0000 (20:24 +1000)
committerFranck Royer <franck@royer.one>
Fri, 24 Apr 2020 04:49:22 +0000 (14:49 +1000)
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 [new file with mode: 0644]

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644 (file)
index 0000000..43ed94d
--- /dev/null
@@ -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