name: Build and Test Suite on: pull_request: push: branches: - master - stable jobs: build-tests: name: Test and Build strategy: matrix: platform: - ubuntu-16.04 - macos-latest - windows-latest toolchain: - stable runs-on: ${{ matrix.platform }} steps: - name: Checkout sources uses: actions/checkout@master with: submodules: true # https://github.com/actions/cache/issues/133 - name: Fixup the owner of ~/.cargo/ if: matrix.platform == 'ubuntu-16.04' run: sudo chown -R $(whoami):$(id -ng) ~/.cargo/ - name: Install toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.toolchain }} profile: minimal override: true - name: Cache cargo registry uses: actions/cache@v1.1.2 with: path: ~/.cargo/registry key: ${{ runner.os }}-cargo-registry-build-tests-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo index uses: actions/cache@v1.1.2 with: path: ~/.cargo/git key: ${{ runner.os }}-cargo-git-build-tests-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo build uses: actions/cache@v1.1.2 with: path: target key: ${{ runner.os }}-cargo-build-target-build-tests-${{ hashFiles('**/Cargo.lock') }} - name: Cache sccache linux if: matrix.platform == 'ubuntu-16.04' uses: actions/cache@v1.1.2 with: path: "/home/runner/.cache/sccache" key: ${{ runner.os }}-sccache-build-tests-${{ hashFiles('**/Cargo.lock') }} - name: Cache sccache MacOS if: matrix.platform == 'macos-latest' uses: actions/cache@v1.1.2 with: path: "/Users/runner/Library/Caches/Mozilla.sccache" key: ${{ runner.os }}-sccache-build-tests-${{ hashFiles('**/Cargo.lock') }} - name: Cache sccache Windows if: matrix.platform == 'windows-latest' uses: actions/cache@v1.1.2 with: path: "C:\\Users\\runneradmin\\AppData\\Local\\Mozilla\\sccache\\cache" key: ${{ runner.os }}-sccache-build-tests-${{ hashFiles('**/Cargo.lock') }} - name: Install sccache for ${{ matrix.platform }} shell: pwsh run: pwsh scripts/actions/install-sccache.ps1 ${{ runner.os}} - name: Install LLVM for Windows if: matrix.platform == 'windows-latest' run: choco install llvm - name: Sccache statistics run: sccache --show-stats - name: Build tests uses: actions-rs/cargo@v1 with: command: test args: --locked --all --release --features "json-tests" --verbose --no-run - name: Run tests for ${{ matrix.platform }} if: matrix.platform == 'windows-latest' continue-on-error: true #Skip step if Windows tests failure uses: actions-rs/cargo@v1 with: command: test args: --locked --all --release --features "json-tests" --verbose - name: Run tests for ${{ matrix.platform }} if: matrix.platform != 'windows-latest' uses: actions-rs/cargo@v1 with: command: test args: --locked --all --release --features "json-tests" --verbose - name: Stop sccache if: always() run: sccache --stop-server - name: Prepare build directory for cache shell: bash run: bash scripts/actions/clean-target.sh