name: Main workflow on: push: paths-ignore: - "docs/**" - "**.md" pull_request: paths-ignore: - "docs/**" - "**.md" env: CARGO_INCREMENTAL: 0 CARGO_NET_RETRY: 10 RUST_BACKTRACE: short RUSTFLAGS: "-D warnings" RUSTUP_MAX_RETRIES: 10 jobs: # Run the `rustfmt` code formatter rustfmt: name: Rustfmt [Formatter] runs-on: ubuntu-latest steps: - name: Setup | Checkout uses: actions/checkout@v2.4.0 - name: Setup | Rust uses: actions-rs/toolchain@v1.0.7 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.4.0 - name: Setup | Cache uses: Swatinem/rust-cache@v1 - name: Setup | Rust uses: actions-rs/toolchain@v1.0.7 with: toolchain: stable override: true profile: minimal components: clippy - name: Build | Lint uses: actions-rs/cargo@v1.0.3 with: command: clippy args: --workspace --locked --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.4.0 - name: Setup | Cache uses: Swatinem/rust-cache@v1 - name: Setup | Rust uses: actions-rs/toolchain@v1.0.7 with: toolchain: stable profile: minimal override: true - name: Build | Check run: cargo check --workspace --locked # Ensure that the project could be successfully compiled with no features enabled cargo_check_no_features: name: Compile with no features enabled needs: cargo_check runs-on: ubuntu-latest steps: - name: Setup | Checkout uses: actions/checkout@v2.4.0 - name: Setup | Cache uses: Swatinem/rust-cache@v1 - name: Setup | Rust uses: actions-rs/toolchain@v1.0.7 with: toolchain: stable profile: minimal override: true - name: Build | Check run: cargo check --workspace --locked --no-default-features # Ensure that the project could be successfully compiled with all features enabled cargo_check_all_features: name: Compile with all features enabled needs: cargo_check runs-on: ubuntu-latest steps: - name: Setup | Checkout uses: actions/checkout@v2.4.0 - name: Setup | Cache uses: Swatinem/rust-cache@v1 - name: Setup | Rust uses: actions-rs/toolchain@v1.0.7 with: toolchain: stable profile: minimal override: true - name: Build | Check run: cargo check --workspace --locked --all-features # 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.4.0 - name: Setup | Cache uses: Swatinem/rust-cache@v1 # Install all the required dependencies for testing - name: Setup | Rust uses: actions-rs/toolchain@v1.0.7 with: toolchain: ${{ matrix.rust }} profile: minimal override: true # Install Mercurial (pre-installed on Linux and windows) - name: Setup | Mercurial (macos) if: matrix.os == 'macOS-latest' run: brew install mercurial # Run the ignored tests that expect the above setup - name: Build | Test run: cargo test --workspace --locked --all-features -- -Z unstable-options --include-ignored env: # Avoid -D warnings on nightly builds RUSTFLAGS: ""