api-version 0.3.6

Axum middleware to add a version prefix to request paths based on a set of versions and an optional `x-api-version` header
Documentation
name: CI

permissions:
  contents: read

on:
  pull_request:
    branches:
      - main
  workflow_dispatch:

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

jobs:
  toolchain:
    name: Setup Rust toolchain
    runs-on: ubuntu-latest
    outputs:
      stable: ${{ steps.set_toolchain.outputs.stable }}
      nightly: ${{ steps.set_toolchain.outputs.nightly }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Output toolchain
        id: set_toolchain
        env:
          toolchain_toml: "rust-toolchain.toml"
        run: |
          stable=$(grep channel rust-toolchain.toml | sed -r 's/channel = "(.*)"/\1/')
          echo "stable=$stable" | tee -a "$GITHUB_OUTPUT"
          nightly=$(rustc --version | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}' | sed 's/^/nightly-/')
          echo "nightly=$nightly" | tee -a "$GITHUB_OUTPUT"

  fmt-check:
    name: Check Code Format
    runs-on: ubuntu-latest
    needs: toolchain
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Install Rust
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
        with:
          toolchain: ${{ needs.toolchain.outputs.nightly }}
          components: rustfmt

      - name: Install just
        uses: taiki-e/install-action@6c1f7cf125e42770ff087ea443901b487cc5471a # v2.79.5
        with:
          tool: just

      - name: Setup Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1

      - name: just fmt-check
        run: |
          just fmt-check

  lint:
    runs-on: ubuntu-latest
    name: Lint Code
    needs: toolchain
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Install Rust
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
        with:
          toolchain: ${{ needs.toolchain.outputs.stable }}
          components: clippy

      - name: Install just
        uses: taiki-e/install-action@6c1f7cf125e42770ff087ea443901b487cc5471a # v2.79.5
        with:
          tool: just

      - name: Setup Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1

      - name: just lint
        run: |
          rustup override set ${{ needs.toolchain.outputs.stable }}
          just lint

  test:
    runs-on: ubuntu-latest
    name: Run Tests
    needs: toolchain
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Install Rust
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
        with:
          toolchain: ${{ needs.toolchain.outputs.stable }}

      - name: Install just
        uses: taiki-e/install-action@6c1f7cf125e42770ff087ea443901b487cc5471a # v2.79.5
        with:
          tool: just

      - name: Setup Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1

      - name: just test
        run: |
          rustup override set ${{ needs.toolchain.outputs.stable }}
          just test

  doc:
    runs-on: ubuntu-latest
    name: Create Documentation
    needs: toolchain
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Install Rust
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
        with:
          toolchain: ${{ needs.toolchain.outputs.stable }}
          components: rust-docs

      - name: Install just
        uses: taiki-e/install-action@6c1f7cf125e42770ff087ea443901b487cc5471a # v2.79.5
        with:
          tool: just

      - name: Setup Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1

      - name: just doc
        run: |
          just doc