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
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
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
package:
name: Package
runs-on: ubuntu-latest
steps:
- name: Git Checkout
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache
uses: Swatinem/rust-cache@v2
with:
key: package
- name: Package
run: cargo package --locked --all-features
docs_rs:
name: Docs.rs
runs-on: ubuntu-latest
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
latest_deps:
name: Latest Dependencies
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Git Checkout
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache
uses: Swatinem/rust-cache@v2
with:
key: latest_deps
- name: Update
run: cargo update
- name: Test
run: cargo test --all-features --verbose
build:
name: Build
runs-on: ubuntu-latest
needs: [ fmt, test, package ]
if: always()
steps:
- name: Check Results
run: |
test "${{ needs.fmt.result }}" = "success"
test "${{ needs.test.result }}" = "success"
test "${{ needs.package.result }}" = "success"