attribute-dsl 0.2.0

Shared parser helpers for Rust attribute DSLs built from paths and dot-call chains.
Documentation
name: ci

on:
  pull_request:
  push:
    branches: [master]

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always
  SCCACHE_GHA_ENABLED: true
  RUSTC_WRAPPER: sccache

jobs:
  test:
    name: test (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
          - windows-latest

    steps:
      - uses: actions/checkout@v7

      - uses: dtolnay/rust-toolchain@stable

      - name: Setup sccache
        uses: mozilla-actions/sccache-action@v0.0.11
        with:
          version: "v0.16.0"

      - name: Run tests
        run: cargo test --workspace --all-features --all-targets --locked

  fmt:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v7

      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: Check formatting
        run: cargo fmt --all -- --check

  clippy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v7

      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy

      - name: Setup sccache
        uses: mozilla-actions/sccache-action@v0.0.11
        with:
          version: "v0.16.0"

      - name: Lint code
        run: cargo clippy --workspace --all-features --all-targets --locked -- -D warnings

  docs:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v7

      - uses: dtolnay/rust-toolchain@stable

      - name: Setup sccache
        uses: mozilla-actions/sccache-action@v0.0.11
        with:
          version: "v0.16.0"

      - name: Build documentation
        run: cargo doc --workspace --all-features --no-deps --locked

  package:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v7

      - uses: dtolnay/rust-toolchain@stable

      - name: Setup sccache
        uses: mozilla-actions/sccache-action@v0.0.11
        with:
          version: "v0.16.0"

      - name: Check crates.io package
        run: cargo publish --dry-run --locked

  machete:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v7

      - name: Machete
        uses: bnjbvr/cargo-machete@main

  rust-coverage:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v7

      - uses: dtolnay/rust-toolchain@stable

      - name: Setup sccache
        uses: mozilla-actions/sccache-action@v0.0.11
        with:
          version: "v0.16.0"

      - uses: cargo-bins/cargo-binstall@main

      - name: Install cargo-llvm-cov
        shell: bash
        run: cargo binstall cargo-llvm-cov --locked --no-confirm

      - name: Run coverage
        shell: bash
        run: |
          cargo llvm-cov clean --workspace
          cargo llvm-cov --workspace --all-features --all-targets --cobertura --output-path=target/cobertura.xml

      - name: Codecov publish
        uses: codecov/codecov-action@v7
        with:
          files: target/cobertura.xml
          disable_search: true
          token: ${{ secrets.CODECOV_TOKEN }}

      - name: Codecov housekeeping
        shell: bash
        run: |
          rm -f codecov codecov.SHA256SUM codecov.SHA256SUM.sig

  release:
    name: release
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    needs: [test, fmt, clippy, docs, package, machete, rust-coverage]
    runs-on: ubuntu-latest
    environment: release
    permissions:
      contents: write
      id-token: write
      pull-requests: read
    concurrency:
      group: release-${{ github.repository }}
      cancel-in-progress: false

    steps:
      - uses: actions/checkout@v7
        with:
          fetch-depth: 0
          persist-credentials: false

      - uses: dtolnay/rust-toolchain@stable

      - name: Setup sccache
        uses: mozilla-actions/sccache-action@v0.0.11
        with:
          version: "v0.16.0"

      - name: Publish unpublished crate versions
        uses: release-plz/action@v0.5.133
        with:
          command: release
          version: 0.3.162
        env:
          GITHUB_TOKEN: ${{ github.token }}