netsock 0.8.0

Cross-platform library for network sockets information
Documentation
name: Rust

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  workflow_dispatch:

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

jobs:
  quality:
    name: Quality
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: dtolnay/rust-toolchain@stable
      with:
        components: rustfmt, clippy
    - uses: Swatinem/rust-cache@v2
    - name: Check formatting
      run: cargo fmt --all -- --check
    - name: Check build
      run: cargo check --all-targets --all-features
    - name: Clippy (all features, deny warnings)
      run: cargo clippy --all-targets --all-features -- -D warnings

  test:
    name: Test
    needs: quality
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]

    steps:
    - uses: actions/checkout@v4
    - uses: dtolnay/rust-toolchain@stable
    - uses: Swatinem/rust-cache@v2
    - name: Build
      run: cargo build --all-targets --all-features
    - name: Test
      run: cargo test --all-targets --all-features

  freebsd:
    name: Test (FreeBSD)
    needs: quality
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: cpa.sh {0}

    steps:
    - uses: actions/checkout@v4
    - name: Start FreeBSD VM
      uses: cross-platform-actions/action@v1.1.0
      with:
        operating_system: freebsd
        version: "14.3"
    - name: Install Rust toolchain
      run: |
        sudo pkg update
        sudo pkg install -y curl ca_root_nss
        fetch https://sh.rustup.rs -o rustup-init.sh
        sh rustup-init.sh -y --profile minimal --default-toolchain stable
        . "$HOME/.cargo/env"
        rustc --version
        cargo --version
    - name: Test
      run: |
        . "$HOME/.cargo/env"
        cargo test --all-targets --all-features