pg-proto 0.2.2

Session-typed PostgreSQL wire protocol
Documentation
name: CI

on:
  pull_request:
  push:
    branches:
      - main

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

jobs:
  test:
    name: Tests and quality gates
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Install development Rust
        uses: dtolnay/rust-toolchain@1.97.1
        with:
          components: clippy, rustfmt

      - name: Check formatting
        run: cargo fmt --all -- --check

      - name: Run Clippy
        run: cargo clippy --workspace --all-targets -- -D warnings

      - name: Build documentation
        env:
          RUSTDOCFLAGS: -D warnings
        run: cargo doc --workspace --no-deps

      - name: Run all tests, including container tests
        run: cargo test --workspace -- --include-ignored --test-threads=1

  benches:
    name: Benchmarks
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Install development Rust
        uses: dtolnay/rust-toolchain@1.97.1

      - name: Run all benchmarks
        run: cargo bench --workspace

  msrv:
    name: MSRV 1.88
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Install minimum supported Rust
        uses: dtolnay/rust-toolchain@1.88.0

      - name: Check every workspace target
        run: cargo check --workspace --all-targets

  package:
    name: Package crates
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Install development Rust
        uses: dtolnay/rust-toolchain@1.97.1

      - name: Verify publishable packages
        run: cargo package --workspace

  fuzz:
    name: Fuzz ${{ matrix.target }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        target:
          - frontend_codec
          - backend_codec
          - pre_startup
          - scram
          - runtime_fsm
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Install nightly Rust
        uses: dtolnay/rust-toolchain@nightly

      - name: Install cargo-fuzz
        run: cargo install cargo-fuzz --locked

      - name: Run fuzz target
        run: cargo +nightly fuzz run --fuzz-dir fuzz ${{ matrix.target }} -- -max_total_time=60