name: Rust
on:
push:
branches: [main]
pull_request:
branches: [main]
merge_group:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
semver-checks:
name: Semver Checks
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
- uses: obi1kenobi/cargo-semver-checks-action@v2
with:
rust-toolchain: "1.92.0"
build-test-lint:
name: Build, Test & Lint
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v7
- name: Set up Rust
uses: bootc-dev/actions/setup-rust@main
- name: Install tools
uses: taiki-e/install-action@v2
with:
tool: just
- name: Install rustfmt and clippy
run: rustup component add rustfmt clippy
- name: just ci
run: just ci
- name: just selftest
continue-on-error: true
run: just selftest
required-checks:
name: Required Checks
if: always()
needs: [semver-checks, build-test-lint]
runs-on: ubuntu-latest
env:
NEEDS: ${{ toJson(needs) }}
steps:
- name: Check all jobs
run: |
FAILED=$(echo "$NEEDS" | jq -r 'to_entries[] | select(.value.result | IN("success","skipped") | not) | .key')
if [ -n "$FAILED" ]; then
echo "The following jobs did not succeed: $FAILED"
exit 1
fi
echo "All jobs succeeded or were skipped."