ocd 0.8.0

Organize current dotfiles
Documentation
# SPDX-FileCopyrightText: 2025 Jason Pena <jasonpena@awkless.com>
# SPDX-License-Identifier: CC0-1.0

name: Quality check

on: [push, pull_request]

concurrency:
  group: ${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

permissions:
  contents: read

jobs:
  test:
    strategy:
      fail-fast: false
    name: Tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo --locked test

  clippy:
    name: Static analysis
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy --locked --tests -- -Dwarnings

  rustfmt:
    name: Code style
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - run: cargo fmt --all -- --check

  deny:
    name: License compatibility
    runs-on: ubuntu-latest
    strategy:
      matrix:
        checks:
          - advisories
          - bans licenses sources
    steps:
    - uses: actions/checkout@v4
    - uses: EmbarkStudios/cargo-deny-action@v2
      # Prevent sudden announcement of a new advisory from failing ci.
      continue-on-error: ${{ matrix.checks == 'advisories' }}
      with:
        command: check ${{ matrix.checks }}
        rust-version: stable

  reuse:
    name: REUSE 3.3 compliance
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: REUSE compliance check
        uses: fsfe/reuse-action@v5