name: CI on: push: branches: - main pull_request: branches: - main jobs: test: name: Test on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v2.3.4 - uses: actions-rs/toolchain@v1.0.7 with: toolchain: nightly override: true - name: cargo fetch uses: actions-rs/cargo@v1 with: command: fetch - name: Test (+nightly) uses: actions-rs/cargo@v1 with: command: test args: --verbose --all - name: Build (+nightly) uses: actions-rs/cargo@v1 with: command: build args: --verbose --release doctest-nightly: name: Doctests (+nightly) runs-on: ubuntu-latest steps: - uses: actions/checkout@v2.3.4 # Because we use nightly features for building docs, # using --all-features will fail without nightly toolchain. - uses: actions-rs/toolchain@v1.0.7 with: toolchain: nightly override: true - uses: actions-rs/cargo@v1 with: command: test args: --all-features --all-targets clippy: name: Clippy (+nightly) runs-on: ubuntu-latest steps: - uses: actions/checkout@v2.3.4 - uses: actions-rs/toolchain@v1.0.7 with: toolchain: nightly components: clippy override: true - name: Run clippy uses: actions-rs/clippy-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} args: --all-features --all-targets -- -D warnings coverage: name: Coverage (+nightly) # The large timeout is to accommodate nightly builds timeout-minutes: 45 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2.3.4 with: persist-credentials: false - uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true profile: minimal components: llvm-tools-preview - name: Install rustfilt symbol demangler run: | cargo install rustfilt - name: Rerun tests for coverage env: RUSTFLAGS: -Zinstrument-coverage -C link-dead-code -C debuginfo=2 LLVM_PROFILE_FILE: "${{ github.workspace }}/test.%p.profraw" ZEBRA_SKIP_NETWORK_TESTS: 1 CARGO_INCREMENTAL: 0 run: | cargo test cargo test --no-run --message-format=json | jq -r "select(.profile.test == true) | .filenames[]" | grep -v dSYM - > filenames.txt - name: Merge coverage data run: | $(rustc --print target-libdir)/../bin/llvm-profdata merge test.*.profraw -o test.profdata - name: Generate detailed html coverage report for github artifact run: | $(rustc --print target-libdir)/../bin/llvm-cov show -format=html -ignore-filename-regex=".*/.cargo/registry/.*" -ignore-filename-regex=".*/.cargo/git/.*" -ignore-filename-regex=".*/.rustup/.*" -Xdemangler=rustfilt -show-instantiations -output-dir=./coverage -instr-profile=./test.profdata $(printf -- "-object %s " $(cat filenames.txt)) - uses: actions/upload-artifact@v2 with: name: coverage path: ./coverage - name: Generate lcov coverage report for codecov run: | $(rustc --print target-libdir)/../bin/llvm-cov export -format=lcov -instr-profile=test.profdata $(printf -- "-object %s " $(cat filenames.txt)) > "lcov.info" - name: Upload coverage report to Codecov uses: codecov/codecov-action@v1.5.2