| name: Main workflow |
| on: |
| push: |
| pull_request: |
| |
| jobs: |
| # Run the `rustfmt` code formatter |
| rustfmt: |
| name: Rustfmt [Formatter] |
| runs-on: ubuntu-latest |
| steps: |
| - name: Setup | Checkout |
| uses: actions/checkout@v2 |
| |
| - name: Setup | Rust |
| uses: actions-rs/toolchain@v1 |
| with: |
| toolchain: stable |
| override: true |
| profile: minimal |
| components: rustfmt |
| |
| - name: Build | Format |
| run: cargo fmt --all -- --check |
| |
| # Run the `clippy` linting tool |
| clippy: |
| name: Clippy [Linter] |
| strategy: |
| matrix: |
| os: [ubuntu-latest, windows-latest, macos-latest] |
| runs-on: ${{ matrix.os }} |
| steps: |
| - name: Setup | Checkout |
| uses: actions/checkout@v2 |
| |
| - name: Setup | Rust |
| uses: actions-rs/toolchain@v1 |
| with: |
| toolchain: stable |
| override: true |
| profile: minimal |
| components: clippy |
| |
| - name: Build | Lint |
| uses: actions-rs/cargo@v1 |
| with: |
| command: clippy |
| args: --workspace --all-targets --all-features -- -Dwarnings |
| |
| # Ensure that the project could be successfully compiled |
| cargo_check: |
| name: Compile |
| runs-on: ubuntu-latest |
| steps: |
| - name: Setup | Checkout |
| uses: actions/checkout@v2 |
| |
| - name: Setup | Rust |
| uses: actions-rs/toolchain@v1 |
| with: |
| toolchain: stable |
| profile: minimal |
| override: true |
| |
| - name: Build | Check |
| run: cargo check --workspace |
| |
| # Run tests on Linux, macOS, and Windows |
| # On both Rust stable and Rust nightly |
| test: |
| name: Test Suite |
| runs-on: ${{ matrix.os }} |
| needs: cargo_check # First check then run expansive tests |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-latest, windows-latest, macos-latest] |
| rust: [stable, nightly] |
| steps: |
| - name: Setup | Checkout |
| uses: actions/checkout@v2 |
| |
| - name: Setup | Rust |
| uses: actions-rs/toolchain@v1 |
| with: |
| toolchain: ${{ matrix.rust }} |
| profile: minimal |
| override: true |
| |
| # Run the ignored tests that expect the above setup |
| - name: Build | Test |
| run: cargo test --workspace --all-features -- -Z unstable-options --include-ignored |