--- name: Main workflow on: push: paths-ignore: - "docs/**" - "**.md" pull_request: paths-ignore: - "docs/**" - "**.md" 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, macOS-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Setup | Checkout uses: actions/checkout@v2 # Cache files between builds - name: Setup | Cache Cargo uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - 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: --all-targets --all-features -- -D clippy::all # Ensure that the project could be successfully compiled cargo_check: name: Compile runs-on: ubuntu-latest steps: - name: Setup | Checkout uses: actions/checkout@v2 # Cache files between builds - name: Setup | Cache Cargo uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Setup | Rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true - name: Build | Check run: cargo check --all # 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, macOS-latest, windows-latest] rust: [stable, nightly] steps: - name: Setup | Checkout uses: actions/checkout@v2 - name: Setup | Cache Cargo uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-${{ matrix.rust }}-cargo-${{ hashFiles('**/Cargo.lock') }} # Install all the required dependencies for testing - name: Setup | Rust uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} profile: minimal override: true # Install dotnet at a fixed version - name: Setup | DotNet uses: actions/setup-dotnet@v1 with: dotnet-version: "2.2.402" # Install Mercurial (pre-installed on Linux and windows) - name: Setup | Mercurial (macos) if: matrix.os == 'macOS-latest' run: pip3 install mercurial # Run the ignored tests that expect the above setup - name: Build | Test run: cargo test -- -Z unstable-options --include-ignored