oxhttp 0.3.2

Simple implementation of HTTP 1.1 (both client and server)
Documentation
name: build

on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main
  schedule:
    - cron: "12 3 * * 0"

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

permissions: {}

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - run: rustup component add rustfmt
      - run: cargo fmt -- --check

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - run: rustup default 1.91.1 && rustup component add clippy
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy --all-targets -- -D warnings -D clippy::all
      - run: cargo clippy --all-targets --features native-tls -- -D warnings -D clippy::all
      - run: cargo clippy --all-targets --features rustls-ring-native -- -D warnings -D clippy::all
      - run: cargo clippy --all-targets --features rustls-ring-webpki -- -D warnings -D clippy::all
      - run: cargo clippy --all-targets --features rustls-aws-lc-native -- -D warnings -D clippy::all
      - run: cargo clippy --all-targets --features rustls-aws-lc-webpki -- -D warnings -D clippy::all
      - run: cargo clippy --all-targets --features flate2 -- -D warnings -D clippy::all
      - run: cargo clippy --all-targets --all-features -- -D warnings -D clippy::all

  test:
    strategy:
      matrix:
        os: [ ubuntu-latest, macos-latest, windows-latest ]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6
      - run: rustup update
      - uses: Swatinem/rust-cache@v2
      - run: cargo test
      - run: cargo test --features native-tls
      - run: cargo test --features rustls-ring-native
      - run: cargo test --features rustls-ring-webpki
        if: ${{ matrix.os != 'windows-latest' }}
      - run: cargo test --features rustls-aws-lc-native
        if: ${{ matrix.os != 'windows-latest' }}
      - run: cargo test --features rustls-aws-lc-webpki
        if: ${{ matrix.os != 'windows-latest' }}
      - run: cargo test --features flate2
      - run: cargo test --all-features
        if: ${{ matrix.os != 'windows-latest' }}

  test_msv:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - run: rustup toolchain install nightly && rustup default 1.74.0
      - uses: Swatinem/rust-cache@v2
      - run: cargo +nightly update -Z direct-minimal-versions
        env:
          CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: fallback
      - run: cargo test
      - run: cargo test --features native-tls
      - run: cargo test --features rustls-ring-native
      - run: cargo test --features rustls-ring-webpki
      - run: cargo test --features rustls-aws-lc-native
      - run: cargo test --features rustls-aws-lc-webpki
      - run: cargo test --features flate2
      - run: cargo test --all-features

  rustdoc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - run: rustup override set 1.91.1
      - uses: Swatinem/rust-cache@v2
      - run: cargo doc --all-features --no-deps
        env:
          RUSTDOCFLAGS: -D warnings

  deny:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-deny }
      - run: cargo deny check

  semver_checks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-semver-checks }
      - run: cargo semver-checks check-release

  typos:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: taiki-e/install-action@v2
        with: { tool: typos-cli }
      - run: typos

  codecov:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-llvm-cov }
      - run: |
          source <(cargo llvm-cov show-env --export-prefix)
          export CARGO_TARGET_DIR=$CARGO_LLVM_COV_TARGET_DIR
          cargo llvm-cov clean --workspace
          cargo test --features native-tls
          cargo test --features rustls-ring-native
          cargo test --features rustls-ring-webpki
          cargo test --features flate2
          cargo llvm-cov report --codecov --output-path codecov.json
      - uses: codecov/codecov-action@v6
        with:
          files: codecov.json
          flags: rust
          fail_ci_if_error: true
          use_oidc: true

  codspeed:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v6
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@v2
        with: { tool: cargo-codspeed }
      - run: cargo codspeed build
      - uses: CodSpeedHQ/action@v4
        with:
          run: cargo codspeed run
          mode: simulation