name: Test on: [push, pull_request] jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: include: - { os: windows-latest, rust-version: stable, shell: 'msys2 {0}' } - { os: macos-11, rust-version: stable, shell: bash } - { os: ubuntu-20.04, rust-version: stable, shell: bash } - { os: ubuntu-20.04, rust-version: 1.63, shell: bash } - { os: ubuntu-20.04, rust-version: beta, shell: bash } - { os: ubuntu-20.04, rust-version: nightly, shell: bash } defaults: run: shell: ${{ matrix.shell }} steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@master if: "!startsWith(matrix.os, 'windows')" id: toolchain with: toolchain: ${{ matrix.rust-version }} components: clippy, rustfmt - uses: msys2/setup-msys2@v2 if: startsWith(matrix.os,'windows') with: update: true install: >- base-devel mingw-w64-x86_64-rust - uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ matrix.os }}_rustc-${{ steps.toolchain.outputs.cachekey }}_cargo-${{ hashFiles('**/Cargo.lock') }} # Build and test. - name: Build library run: cargo rustc --verbose --lib -- -D warnings - name: Test run: cargo test --verbose --all # Only run formatting & style check on one job to not spam warnings. - name: Check formatting if: startsWith(matrix.os,'ubuntu') && matrix.rust-version == 'stable' run: cargo fmt --check || echo "::warning ::cargo fmt found some formatting changes that may improve readability" - name: Check clippy if: startsWith(matrix.os,'ubuntu') && matrix.rust-version == 'stable' run: cargo clippy --no-deps || echo "::warning ::cargo clippy found some code style changes that may be more idiomatic" # On stable rust builds, build a binary and publish as a github actions # artifact. These binaries could be useful for testing the pipeline but # are only retained by github for 90 days. # TODO: Check that they actually work. - name: Build release binary if: matrix.rust-version == 'stable' run: cargo rustc --verbose --bin scryer-prolog --release -- -D warnings - name: Publish artifact if: matrix.rust-version == 'stable' uses: actions/upload-artifact@v3 with: path: target/release/scryer-prolog* name: scryer-prolog_${{ matrix.os }}