-
Notifications
You must be signed in to change notification settings - Fork 2
142 lines (116 loc) · 3.84 KB
/
Copy pathtest.yml
File metadata and controls
142 lines (116 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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