name: Rust
on:
push:
branches: [ master ]
pull_request:
workflow_dispatch:
permissions: {}
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
bisectable:
name: Bisectable PR
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: Checkout Repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 with:
persist-credentials: false
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Setup Rust Cache
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4
- name: Setup cargo-rbmt
uses: ./.github/actions/setup-rbmt
- name: Assert the PR is Bisectable
shell: bash
env:
RBMT_LOG_LEVEL: quiet
run: |
mapfile -t commits < <(git rev-list --reverse "${{ github.event.pull_request.base.sha }}..HEAD")
commit_count="${#commits[@]}"
for index in "${!commits[@]}"; do
commit_sha="${commits[$index]}"
commit_sha_short="$(git rev-parse --short "${commit_sha}")"
commit_title="$(git log -1 --format=%s "${commit_sha}")"
git checkout --quiet --detach "${commit_sha}"
if ! cargo rbmt run build --quiet >build.log 2>&1; then
printf '\n[%d/%d] %s: %s [FAIL]\n' "$((index + 1))" "${commit_count}" "${commit_sha_short}" "${commit_title}"
printf '\n'
cat build.log
exit 1
fi
printf '\n[%d/%d] %s: %s [OK]\n' "$((index + 1))" "${commit_count}" "${commit_sha_short}" "${commit_title}"
done
check:
name: Check - ${{ matrix.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: Formatting
task: fmt --check
- name: Linting
task: lint
- name: Documentation
task: docsrs
steps:
- name: Checkout Repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 with:
persist-credentials: false
- name: Setup Rust Cache
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4
- name: Setup cargo-rbmt
uses: ./.github/actions/setup-rbmt
- name: Run ${{ matrix.task }}
shell: bash
run: cargo rbmt ${{ matrix.task }}
test:
name: Test - ${{ matrix.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: Stable Toolchain + Minimal Lockfile
toolchain: stable
lockfile: minimal
- name: Stable Toolchain + Recent Lockfile
toolchain: stable
lockfile: recent
- name: MSRV Toolchain + Minimal Lockfile
toolchain: msrv
lockfile: minimal
steps:
- name: Checkout Repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 with:
persist-credentials: false
- name: Setup Rust Cache
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4
- name: Setup cargo-rbmt
uses: ./.github/actions/setup-rbmt
- name: Run Tests
shell: bash
run: cargo rbmt test --toolchain ${{ matrix.toolchain }} --lockfile ${{ matrix.lockfile }}