name: CI
on:
push:
pull_request:
concurrency:
group: ci-${{ github.head_ref || github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
pr-title:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
test:
runs-on: ubuntu-latest
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 - uses: taiki-e/install-action@nextest
- uses: mozilla-actions/sccache-action@v0.0.10
- run: cargo nextest run --no-default-features
- name: Verify publishable
run: cargo publish --dry-run --no-default-features
lint:
runs-on: ubuntu-latest
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 with:
components: clippy, rustfmt
- uses: mozilla-actions/sccache-action@v0.0.10
- run: cargo clippy --no-default-features --all-targets -- -D warnings
- run: cargo fmt --check
check-features:
runs-on: ubuntu-latest
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 - uses: mozilla-actions/sccache-action@v0.0.10
- run: cargo check --no-default-features
changes:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
outputs:
rust: ${{ steps.filter.outputs.rust }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 - uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 id: filter
with:
filters: |
rust:
- 'src/**'
- 'Cargo.toml'
- 'Cargo.lock'
ci-ok:
if: always()
needs: [pr-title, test, lint, check-features]
runs-on: ubuntu-latest
steps:
- name: Check all jobs
run: |
results='${{ toJSON(needs) }}'
echo "Job results: $results"
if echo "$results" | jq -e 'to_entries | map(select(.value.result != "success" and .value.result != "skipped")) | length > 0' > /dev/null; then
echo "Some required jobs failed or were cancelled"
exit 1
fi
echo "All required jobs passed or were skipped"