tiny-update-check 1.1.2

A minimal, lightweight crate update checker for Rust CLI applications
Documentation
name: CI
on:
  push:
    branches: [main]
  pull_request:
  workflow_call:

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

env:
  CARGO_TERM_COLOR: always

jobs:
  changes:
    name: Detect changes
    runs-on: ubuntu-latest
    permissions:
      pull-requests: read
    outputs:
      code: ${{ github.event_name == 'push' || steps.filter.outputs.code == 'true' }}
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2
      - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # ratchet:dorny/paths-filter@v3
        id: filter
        with:
          filters: |
            code:
              - 'src/**'
              - 'tests/**'
              - 'examples/**'
              - 'benches/**'
              - 'Cargo.toml'
              - 'Cargo.lock'
              - 'rustfmt.toml'

  test:
    name: Test
    needs: [changes]
    if: needs.changes.outputs.code == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2
      - uses: tylerbutler/actions/setup-rust@c4c45a8284082163bc58623acfc4b3dc98633c3d # ratchet:tylerbutler/actions/setup-rust@main
      - run: cargo test --all-features

  lint:
    name: Clippy
    needs: [changes]
    if: needs.changes.outputs.code == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2
      - uses: tylerbutler/actions/setup-rust@c4c45a8284082163bc58623acfc4b3dc98633c3d # ratchet:tylerbutler/actions/setup-rust@main
        with:
          components: clippy
      - run: cargo clippy --all-targets --all-features -- -D warnings

  format:
    name: Format
    needs: [changes]
    if: needs.changes.outputs.code == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2
      - uses: tylerbutler/actions/setup-rust@c4c45a8284082163bc58623acfc4b3dc98633c3d # ratchet:tylerbutler/actions/setup-rust@main
        with:
          components: rustfmt
      - run: cargo fmt --all -- --check

  docs:
    name: Documentation
    needs: [changes]
    if: needs.changes.outputs.code == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2
      - uses: tylerbutler/actions/setup-rust@c4c45a8284082163bc58623acfc4b3dc98633c3d # ratchet:tylerbutler/actions/setup-rust@main
      - run: RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features

  # Gate job for required status check — reports a single fixed-name check
  # that passes when all CI jobs pass (or are skipped).
  ci-result:
    name: CI Result
    if: always()
    needs: [test, lint, format, docs]
    runs-on: ubuntu-latest
    steps:
      - name: Check CI results
        run: |
          for job in test lint format docs; do
            result="${{ needs.test.result }}"
            case "$job" in
              lint) result="${{ needs.lint.result }}" ;;
              format) result="${{ needs.format.result }}" ;;
              docs) result="${{ needs.docs.result }}" ;;
            esac
            if [[ "$result" == "failure" || "$result" == "cancelled" ]]; then
              echo "$job failed or was cancelled"
              exit 1
            fi
          done