flowscope 0.16.0

Passive flow & session tracking for packet capture (runtime-free, cross-platform)
Documentation
name: Rust

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

env:
  CARGO_TERM_COLOR: always

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Format check
      run: cargo fmt --all -- --check
    - name: Build
      run: cargo build --all-features --verbose
    - name: Clippy
      run: cargo clippy --all-features --all-targets -- -D warnings
    - name: Run tests
      run: cargo test --all-features --verbose
    - name: Doc build
      run: cargo doc --all-features --no-deps
      env:
        RUSTDOCFLAGS: -D warnings

  feature-matrix:
    # Library-only build + clippy across a small matrix of partial-
    # feature combinations so latent cfg-gate dead-code issues in
    # `src/` fail at PR time, not when a user enables an unusual
    # combo. Test code is intentionally not included: it assumes
    # `--all-features` and is covered by the `build` job above.
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        features:
          - ""                  # default features only
          - "pcap"              # offline source, no L7
          - "dns"               # gate for obs::trace_session_message
          - "http,tls"
          - "metrics,tracing"
          - "icmp"              # standalone ICMP parser
          - "l7,pcap"           # `l7` now includes icmp
          - "serde"             # 0.8: serde on core types
          - "serde,l7,pcap"     # 0.8: serde on L7 messages
          - "chrono"            # 0.12: chrono interop on Timestamp
          - "emit-eve"          # 0.12: Suricata EVE JSON writer
          - "tls-fingerprints"  # 0.12: collapses former ja3 + ja4 sub-features
          - "ja4plus"           # 0.16: FoxIO-licensed JA4S (opt-in, off by default)
          - "file-hash"         # 0.12: streaming hash sinks + MIME magic
    steps:
      - uses: actions/checkout@v4
      - name: Build (--no-default-features --features "${{ matrix.features }}")
        run: cargo build --no-default-features --features "${{ matrix.features }}"
      - name: Clippy (--no-default-features --features "${{ matrix.features }}")
        run: cargo clippy --no-default-features --features "${{ matrix.features }}" -- -D warnings