name: Test
on:
push:
branches: [main]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
changes:
name: Detect changes
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
code: ${{ github.event_name == 'push' || steps.filter.outputs.code == 'true' }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d id: filter
with:
filters: |
code:
- 'src/**'
- 'tests/**'
- 'examples/**'
- 'benches/**'
- 'Cargo.toml'
- 'Cargo.lock'
test:
name: Test (${{ matrix.os }}, ${{ matrix.rust }})
needs: [changes]
if: needs.changes.outputs.code == 'true'
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
rust: [stable, beta]
include:
- os: ubuntu-latest
rust: nightly
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - uses: tylerbutler/actions/setup-rust@c4c45a8284082163bc58623acfc4b3dc98633c3d with:
toolchain: ${{ matrix.rust }}
- name: Run tests (all features)
run: cargo test --all-features
- name: Run tests (rustls feature)
run: cargo test --no-default-features --features rustls
msrv:
name: MSRV Check
needs: [changes]
if: needs.changes.outputs.code == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - name: Get MSRV from Cargo.toml
id: msrv
run: |
MSRV=$(grep '^rust-version' Cargo.toml | cut -d'"' -f2)
echo "version=$MSRV" >> "$GITHUB_OUTPUT"
- uses: tylerbutler/actions/setup-rust@c4c45a8284082163bc58623acfc4b3dc98633c3d with:
toolchain: ${{ steps.msrv.outputs.version }}
- run: cargo check --all-features
test-result:
name: Test Result
if: always()
needs: [test, msrv]
runs-on: ubuntu-latest
steps:
- name: Check test matrix result
run: |
if [[ "${{ needs.test.result }}" == "failure" || "${{ needs.test.result }}" == "cancelled" ]]; then
echo "Test matrix failed or was cancelled"
exit 1
fi
if [[ "${{ needs.msrv.result }}" == "failure" || "${{ needs.msrv.result }}" == "cancelled" ]]; then
echo "MSRV check failed or was cancelled"
exit 1
fi