Skip to content

Release NetOpsBench 0.2 scalable benchmark runtime #31

Release NetOpsBench 0.2 scalable benchmark runtime

Release NetOpsBench 0.2 scalable benchmark runtime #31

Workflow file for this run

name: test
on:
push:
branches:
- main
- master
- feature/**
pull_request:
jobs:
rust:
runs-on: ubuntu-latest
defaults:
run:
working-directory: native/client-agent
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install pinned Rust
run: |
rustup toolchain install 1.97.1 --profile minimal --component clippy,rustfmt
rustup default 1.97.1
- name: Format
run: cargo fmt --check
- name: Clippy
run: cargo clippy --locked --all-targets -- -D warnings
- name: Test
run: cargo test --locked
client-image:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build client image
run: docker build -f containers/client/Dockerfile -t netopsbench-client:test .
- name: Verify native-only runtime
run: |
docker run --rm netopsbench-client:test netopsbench-client-agent --version
docker run --rm netopsbench-client:test sh -lc \
'command -v ping && command -v traceroute && ! command -v python3 && ! command -v iperf3'
wheel:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Build wheel
run: |
python -m pip install --upgrade pip
python -m pip wheel --no-deps --wheel-dir dist .
- name: Verify package contents and imports
run: |
python - <<'PY'
import pathlib
import zipfile
wheel = next(pathlib.Path("dist").glob("netopsbench-*.whl"))
with zipfile.ZipFile(wheel) as archive:
names = set(archive.namelist())
forbidden = {
"netopsbench/platform/simulator/contracts.py",
"netopsbench/platform/simulator/engine.py",
"netopsbench/platform/simulator/payloads.py",
}
unexpected = sorted(forbidden & names)
if unexpected:
raise SystemExit(f"wheel contains removed modules: {unexpected}")
PY
python -m venv /tmp/netopsbench-wheel-smoke
/tmp/netopsbench-wheel-smoke/bin/pip install dist/netopsbench-*.whl
cd /tmp
/tmp/netopsbench-wheel-smoke/bin/python -c "from netopsbench.sdk import DiagnosticSession, IncidentEngine, NetOpsBench"
/tmp/netopsbench-wheel-smoke/bin/netopsbench --help >/dev/null
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install lint dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev,agent]"
- name: Ruff (lint)
run: ruff check netopsbench/ tests/
- name: Black (format check)
run: black --check netopsbench/ tests/
- name: Mypy (type check)
run: mypy --ignore-missing-imports
pytest:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.12", "3.13"]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev,agent]"
- name: Generate benchmark assets (xs scale)
run: netopsbench benchmark prepare --scales xs
- name: Run regression suite (no real-environment tests)
run: |
pytest -q -m "not real" tests/ \
--cov=netopsbench --cov-fail-under=50