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