Release NetOpsBench 0.2 scalable benchmark runtime #31
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |