cargo-sync-rdme 0.8.0

Cargo subcommand to synchronize README with crate documentation
name: CI

on:
  push:
    branches:
      - main
  pull_request:
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: ${{ github.ref_name != github.event.repository.default_branch }}

permissions: {}

jobs:
  set-matrix:
    runs-on: ubuntu-latest
    outputs:
      rust: ${{ steps.set-values.outputs.rust }}
      os: ${{ steps.set-values.outputs.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: stable
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - name: Set matrix values
        id: set-values
        run: |
          msrv="$(./scripts/print-msrv)"
          rust="$(jq -c <<< "[\"stable\", \"${msrv}\"]")"
          echo "rust=${rust}" >> "$GITHUB_OUTPUT"

          os="$(jq -c <<< '["ubuntu-latest", "macos-latest", "windows-latest"]')"
          echo "os=${os}" >> "$GITHUB_OUTPUT"

          jq -n --argjson rust "${rust}" --argjson os "${os}" '{ rust: $rust, os: $os }'
        shell: bash

  check-rust:
    name: Check (rust)
    needs: set-matrix
    strategy:
      fail-fast: true
      matrix:
        rust: ${{ fromJSON(needs.set-matrix.outputs.rust) }}
        os: ${{ fromJSON(needs.set-matrix.outputs.os) }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:check-rust
        shell: bash

  check-rustdoc:
    name: Check (rustdoc)
    needs: set-matrix
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: ${{ fromJSON(needs.set-matrix.outputs.os) }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:check-rustdoc
        shell: bash

  check-unused-deps:
    name: Check (unused dependencies)
    needs: set-matrix
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: ${{ fromJSON(needs.set-matrix.outputs.os) }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:check-unused-deps
        shell: bash

  lint-rustfmt:
    name: Lint (rustfmt)
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: [ubuntu-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:lint-rustfmt
        shell: bash

  lint-rust:
    name: Lint (rust)
    needs: set-matrix
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: ${{ fromJSON(needs.set-matrix.outputs.os) }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:lint-rust
        shell: bash

  test-rust:
    name: Test (rust)
    needs: set-matrix
    strategy:
      fail-fast: true
      matrix:
        rust: ${{ fromJSON(needs.set-matrix.outputs.rust) }}
        os: ${{ fromJSON(needs.set-matrix.outputs.os) }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run install-toolchains-for-rust-test
        shell: bash
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:test-rust
        shell: bash

  coverage-rust-test:
    name: Coverage (rust test)
    needs: set-matrix
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: ${{ fromJSON(needs.set-matrix.outputs.os) }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run install-toolchains-for-rust-test
        shell: bash
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:coverage-rust-test
        shell: bash
      - uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: target/codecov-test.json
          fail_ci_if_error: false

  coverage-rust-run:
    name: Coverage (rust run)
    needs: set-matrix
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: ${{ fromJSON(needs.set-matrix.outputs.os) }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run install-toolchains-for-rust-run
        shell: bash
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:coverage-rust-run
        shell: bash
      - uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: target/codecov-run.json
          fail_ci_if_error: false

  check-release:
    name: Check (release)
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: [ubuntu-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run check:release --skip-ci
        shell: bash

  build-book:
    name: Build (book)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run ci:build-book
        shell: bash

  test-book:
    name: Test (book)
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: [ubuntu-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:test-book
        shell: bash

  lint-toml:
    name: Lint (toml)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run ci:lint-toml
        shell: bash

  lint-workflow:
    name: Lint (workflow)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run ci:lint-workflow
        shell: bash

  lint-spelling:
    name: Lint (spelling)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run ci:lint-spelling
        shell: bash

  sync-markdown:
    name: Sync (markdown)
    needs: set-matrix
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: ${{ fromJSON(needs.set-matrix.outputs.os) }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run install-toolchains-for-sync-markdown
        shell: bash
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:sync-markdown
        shell: bash

  lint-markdown:
    name: Lint (markdown)
    strategy:
      fail-fast: true
      matrix:
        rust: [stable]
        os: [ubuntu-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de # v1
        with:
          toolchain: ${{ matrix.rust }}
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
      - run: mise run ci:lint-markdown
        shell: bash

  lint-editorconfig:
    name: Lint (editorconfig)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run ci:lint-editorconfig
        shell: bash

  lint-shell:
    name: Lint (shell scripts)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run ci:lint-shell
        shell: bash

  lint-renovate:
    name: Lint (renovate)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
      - run: mise run ci:lint-renovate
        shell: bash

  ci-complete:
    needs:
      - set-matrix
      - lint-rustfmt
      - check-rust
      - check-rustdoc
      - check-unused-deps
      - lint-rust
      - test-rust
      - coverage-rust-test
      - coverage-rust-run
      - check-release
      - build-book
      - test-book
      - lint-toml
      - lint-workflow
      - lint-spelling
      - sync-markdown
      - lint-markdown
      - lint-editorconfig
      - lint-shell
      - lint-renovate
    runs-on: ubuntu-latest
    if: ${{ always() }}
    steps:
      - name: CI complete
        run: |
          if ${{ !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}; then
            echo "CI succeeded"
          else
            echo "CI failed"
            exit 1
          fi
        shell: bash