Files
scryer-prolog/.github/workflows/test.yml
2023-04-02 02:09:41 -05:00

74 lines
2.8 KiB
YAML

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-10.15, 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 }}
outputs:
os: ${{ matrix.os }}
rust-version: ${{ matrix.rust-version }}
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 || 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 }}