name: Build
on:
pull_request:
branches: [ "master" ]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
fmt:
name: Format
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Git Checkout
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Format
run: cargo fmt --all -- --check
test:
name: Test (${{ matrix.name }})
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
include:
- { name: none, features: "" }
- { name: idna, features: "--features idna" }
- { name: serde, features: "--features serde" }
- { name: all, features: "--all-features" }
steps:
- name: Git Checkout
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Cache
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.name }}
- name: Test
run: cargo test --locked ${{ matrix.features }} --verbose
- name: Lint
run: cargo clippy --locked --all-targets ${{ matrix.features }} -- -D warnings
- name: Docs
run: cargo doc --locked ${{ matrix.features }} --no-deps
env:
RUSTDOCFLAGS: -D warnings
msrv:
name: MSRV
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Git Checkout
uses: actions/checkout@v7
- name: Read MSRV
id: msrv
run: echo "version=$(grep '^rust-version' Cargo.toml | cut -d'"' -f2)" >> "$GITHUB_OUTPUT"
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ steps.msrv.outputs.version }}
- name: Cache
uses: Swatinem/rust-cache@v2
with:
key: msrv
- name: Check
run: cargo check --locked --all-features
docs_rs:
name: Docs.rs
runs-on: ubuntu-latest
timeout-minutes: 15
continue-on-error: true
steps:
- name: Git Checkout
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
- name: Cache
uses: Swatinem/rust-cache@v2
with:
key: docs_rs
- name: Docs
run: cargo doc --locked --all-features --no-deps
env:
RUSTDOCFLAGS: --cfg docsrs -D warnings
build:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 15
needs: [ fmt, test, msrv ]
if: always()
steps:
- name: Check Results
run: |
test "${{ needs.fmt.result }}" = "success"
test "${{ needs.test.result }}" = "success"
test "${{ needs.msrv.result }}" = "success"