dbus-addr 0.2.0

D-Bus address parsing
Documentation
name: Continuous Integration

on:
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  merge_group:

# ensure that the workflow is only triggered once per PR,  subsequent pushes to the PR will cancel
# and restart the workflow. See https://docs.github.com/en/actions/using-jobs/using-concurrency
concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

env:
  # don't install husky hooks during CI as they are only needed for for pre-push
  CARGO_HUSKY_DONT_INSTALL_HOOKS: true

# lint, clippy and coveraget jobs are intentionally early in the workflow to catch simple
# formatting, typos, and missing tests as early as possible. This allows us to fix these and
# resubmit the PR without having to wait for the comprehensive matrix of tests to complete.
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        if: github.event_name != 'pull_request'
        uses: actions/checkout@v4
      - name: Checkout
        if: github.event_name == 'pull_request'
        uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Install Rust nightly
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: rustfmt
      - name: Install cargo-make
        uses: taiki-e/install-action@cargo-make
      - name: Check formatting
        run: cargo make lint-format
      - name: Check documentation
        run: cargo make lint-docs
      - name: Check conventional commits
        uses: crate-ci/committed@master
        with:
          args: "-vv"
          commits: HEAD
      - name: Check typos
        uses: crate-ci/typos@master
      - name: Lint dependencies
        uses: EmbarkStudios/cargo-deny-action@v2

  clippy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - name: Install cargo-make
        uses: taiki-e/install-action@cargo-make
      - name: Run cargo make clippy-all
        run: cargo make clippy

  coverage:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable
        with:
          components: llvm-tools
      - name: Install cargo-llvm-cov and cargo-make
        uses: taiki-e/install-action@v2
        with:
          tool: cargo-llvm-cov,cargo-make
      - name: Generate coverage
        run: cargo make coverage
      - name: Upload to codecov.io
        uses: codecov/codecov-action@v4
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          fail_ci_if_error: true

  check:
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest, windows-latest, macos-latest ]
        toolchain: [ "1.70.0", "stable" ]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install Rust {{ matrix.toolchain }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
      - name: Install cargo-make
        uses: taiki-e/install-action@cargo-make
      - name: Run cargo make check
        run: cargo make check
        env:
          RUST_BACKTRACE: full

  test-doc:
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest, windows-latest, macos-latest ]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable
      - name: Install cargo-make
        uses: taiki-e/install-action@cargo-make
      - name: Test docs
        run: cargo make test-doc
        env:
          RUST_BACKTRACE: full

  test:
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest, windows-latest, macos-latest ]
        toolchain: [ "1.70.0", "stable" ]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install Rust ${{ matrix.toolchain }}}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
      - name: Install cargo-make
        uses: taiki-e/install-action@cargo-make
      - name: Install cargo-nextest
        uses: taiki-e/install-action@nextest
      - name: Test
        run: cargo make test
        env:
          RUST_BACKTRACE: full