From 1426507fb3f1b4036032f49b225f694f2f77da77 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 20 Oct 2020 22:35:55 +0100 Subject: [PATCH] Comprehensive CI :) --- .github/workflows/ci.yml | 155 +++++++++++++++++++++++++++++---------- 1 file changed, 117 insertions(+), 38 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4bc6019b..395f7f6c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,33 +3,35 @@ name: CI checks on: [push, pull_request] jobs: - - lint: - name: Lint + test: + name: Test on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Run tests + uses: actions-rs/cargo@v1 + with: + command: test + args: --verbose --all + + bitrot: + name: Bitrot check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: - toolchain: 1.45.2 + toolchain: stable override: true - - # Build the code before running cargo fmt - - name: cargo build - uses: actions-rs/cargo@v1 - with: - command: build - args: --all - - # Ensure all code has been formatted with rustfmt - - run: rustup component add rustfmt - - name: Check formatting - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check --color always - # Build benchmarks to prevent bitrot - name: Build benchmarks uses: actions-rs/cargo@v1 @@ -37,28 +39,105 @@ jobs: command: build args: --all --benches - build_and_test: - name: Test on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - # We don't need to test across multiple platforms yet - # os: [ubuntu-latest, windows-latest, macOS-latest] - os: [ubuntu-latest] - + clippy: + name: Clippy (stable) + timeout-minutes: 30 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: - toolchain: 1.45.2 + toolchain: stable + components: clippy override: true - - name: Build tests + - name: Run clippy + uses: actions-rs/clippy-check@v1 + with: + name: Clippy (stable) + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-features --all-targets -- -D warnings + + clippy-nightly: + name: Clippy (nightly) + timeout-minutes: 30 + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + components: clippy + override: true + - name: Run Clippy (nightly) + uses: actions-rs/clippy-check@v1 + continue-on-error: true + with: + name: Clippy (nightly) + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-features --all-targets + + codecov: + name: Code coverage + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + # Use stable for this to ensure that cargo-tarpaulin can be built. + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Install cargo-tarpaulin uses: actions-rs/cargo@v1 with: - command: build - args: --verbose --release --all --tests --all-features - - name: Run tests + command: install + args: cargo-tarpaulin + - name: Generate coverage report uses: actions-rs/cargo@v1 with: - command: test - args: --verbose --release --all + command: tarpaulin + args: --all-features --timeout 600 --out Xml + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1 + with: + token: ${{secrets.CODECOV_TOKEN}} + + doc-links: + name: Intra-doc links + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + override: true + - name: cargo fetch + uses: actions-rs/cargo@v1 + with: + command: fetch + + # Ensure intra-documentation links all resolve correctly + # Requires #![deny(intra_doc_link_resolution_failure)] in crates. + - name: Check intra-doc links + uses: actions-rs/cargo@v1 + with: + command: doc + args: --all --document-private-items + + fmt: + name: Rustfmt + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - run: rustup component add rustfmt + - uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check