hyperdriver 0.12.8

The missing middle for Hyper - Servers and Clients with ergonomic APIs
on:
  merge_group:
  pull_request:
    branches: [main, backports/*]
  push:
    branches: [main, backports/*]

name: CI

env:
  RUSTDOCFLAGS: "-Dwarnings"
  CARGO_TERM_COLOR: always

jobs:
  versions:
    name: Determine toolchain versions
    runs-on: ubuntu-latest
    outputs:
      stable: ${{ steps.stable.outputs.version }}
      msrv: ${{ steps.msrv.outputs.version }}
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
      - name: Read pinned stable version
        id: stable
        run: |
          set -euo pipefail
          version=$(awk -F'"' '/^channel/{print $2}' rust-toolchain.toml)
          echo "Pinned stable: $version"
          echo "version=$version" >> "$GITHUB_OUTPUT"
      - name: Read MSRV
        id: msrv
        run: |
          set -euo pipefail
          version=$(awk -F'"' '/^rust-version/{print $2}' Cargo.toml)
          echo "MSRV: $version"
          echo "version=$version" >> "$GITHUB_OUTPUT"

  build:
    name: Build
    needs: versions
    runs-on: ubuntu-latest
    strategy:
      matrix:
        toolchain:
          - "${{ needs.versions.outputs.msrv }}"
          - "${{ needs.versions.outputs.stable }}"
          - stable
          - nightly
          - beta
    env:
      RUSTUP_TOOLCHAIN: ${{ matrix.toolchain }}
    continue-on-error: ${{ contains(fromJSON('["stable", "nightly", "beta"]'), matrix.toolchain) }}
    steps:
      - uses: extractions/setup-just@v2
      - name: Install rust toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
      - name: Checkout sources
        uses: actions/checkout@v4
      - name: Run cargo build
        run: just build

  check:
    name: Check
    needs: versions
    runs-on: ubuntu-latest
    env:
      RUSTUP_TOOLCHAIN: ${{ needs.versions.outputs.stable }}
    strategy:
      matrix:
        steps:
          - name: cargo check
            run: just check
          - name: cargo hack check
            run: just check-hack-powerset
            hack: true
          - name: cargo hack check --each-feature
            run: just check-hack-each
            hack: true
          - name: cargo hack check --tests
            run: just check-hack-tests
            hack: true
          - name: cargo hack check --examples
            run: just check-hack-examples
            hack: true
          - name: cargo doc
            run: just docs
          - name: clippy
            run: just clippy
          - name: fmt
            run: just fmt

    steps:
      - uses: extractions/setup-just@v2
      - name: Install rust toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ needs.versions.outputs.stable }}
          components: clippy, rustfmt
      - name: Checkout sources
        uses: actions/checkout@v4
      - uses: taiki-e/install-action@cargo-hack
        if: matrix.steps.hack
      - name: ${{ matrix.steps.name }}
        run: ${{ matrix.steps.run }}

  pre-commit:
    name: pre-commit
    needs: versions
    runs-on: ubuntu-latest
    env:
      RUSTUP_TOOLCHAIN: ${{ needs.versions.outputs.stable }}
    steps:
      - uses: actions/setup-python@v5
      - run: pip install pre-commit
      - uses: extractions/setup-just@v2
      - name: Install rust toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ needs.versions.outputs.stable }}
      - name: Checkout sources
        uses: actions/checkout@v4
      - name: Run pre-commit
        run: just pre-commit-ci

  test:
    name: Tests
    needs: versions
    runs-on: ubuntu-latest
    strategy:
      matrix:
        toolchain:
          - "${{ needs.versions.outputs.stable }}"
          - stable
          - beta
    continue-on-error: ${{ contains(fromJSON('["stable", "nightly", "beta"]'), matrix.toolchain) }}
    env:
      RUSTUP_TOOLCHAIN: ${{ matrix.toolchain }}
    steps:
      - uses: extractions/setup-just@v2
      - uses: taiki-e/install-action@nextest

      - name: Checkout
        uses: actions/checkout@v4

      - name: Install rust toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}

      - name: Build cargo tests
        run: just test-build

      - name: Run cargo test
        run: just test-run

  deny:
    name: Deny
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run cargo deny
        uses: EmbarkStudios/cargo-deny-action@v2
        with:
          command: check bans licenses sources