attribute-dsl 0.1.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.10

      - name: Setup mold
        if: runner.os == 'Linux'
        uses: rui314/setup-mold@v1

      - 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.10

      - name: Setup mold
        uses: rui314/setup-mold@v1

      - 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.10

      - name: Setup mold
        uses: rui314/setup-mold@v1

      - 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.10

      - name: Setup mold
        uses: rui314/setup-mold@v1

      - 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.10

      - name: Setup mold
        uses: rui314/setup-mold@v1

      - name: Install cargo-llvm-cov
        shell: bash
        run: |
          if ! command -v cargo-llvm-cov &> /dev/null; then
            cargo install cargo-llvm-cov --locked
          fi

      - 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: Upload coverage artifact
        uses: actions/upload-artifact@v7
        with:
          name: coverage-cobertura
          path: target/cobertura.xml
          if-no-files-found: error

  codecov-publish:
    runs-on: ubuntu-latest
    needs: rust-coverage

    steps:
      - uses: actions/checkout@v7

      - name: Download coverage artifact
        uses: actions/download-artifact@v8
        with:
          name: coverage-cobertura
          path: target

      - 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