name: Rust
on:
push:
branches: [main]
pull_request:
env:
RUSTFLAGS: -D warnings
jobs:
complete:
if: always()
needs: [fmt, rust-analyzer-compat, build-and-test, docs, publish-dry-run]
runs-on: ubuntu-latest
steps:
- if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: exit 1
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: rustup update
- run: cargo fmt --all --check
rust-analyzer-compat:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: rustup update
- run: rustup +nightly component add rust-analyzer
- name: Check if rust-analyzer encounters any errors parsing project
run: rustup run nightly rust-analyzer analysis-stats . 2>&1 | (! grep ERROR)
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: stellar/actions/rust-cache@main
- run: rustup update
- run: cargo build
- run: cargo test
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: stellar/actions/rust-cache@main
- run: rustup update
- run: cargo doc
publish-dry-run:
if: startsWith(github.head_ref, 'release/')
uses: stellar/actions/.github/workflows/rust-publish-dry-run.yml@main