iperf3-lib 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/.dockerignore +2 -0
  2. iperf3_lib-0.3.0/.gitattributes +1 -0
  3. iperf3_lib-0.3.0/.github/ISSUE_TEMPLATE/bug.yml +30 -0
  4. iperf3_lib-0.3.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. iperf3_lib-0.3.0/.github/ISSUE_TEMPLATE/feature.yml +30 -0
  6. iperf3_lib-0.3.0/.github/ISSUE_TEMPLATE/task.yml +21 -0
  7. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/.github/dependabot.yml +10 -19
  8. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/.github/workflows/ci.yml +46 -36
  9. iperf3_lib-0.3.0/.github/workflows/docs.yml +57 -0
  10. iperf3_lib-0.3.0/.github/workflows/release.yml +370 -0
  11. iperf3_lib-0.3.0/.yaga/change-policy.toml +6 -0
  12. iperf3_lib-0.3.0/.yaga/checks/repository.toml +8 -0
  13. iperf3_lib-0.3.0/.yaga/mode-policy.toml +2 -0
  14. iperf3_lib-0.3.0/.yaga/path-policy.toml +2 -0
  15. iperf3_lib-0.3.0/.yaga/size-policy.toml +7 -0
  16. iperf3_lib-0.3.0/.yaga/tree-policy.toml +38 -0
  17. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/AGENTS.md +7 -0
  18. iperf3_lib-0.3.0/CONTRIBUTING.md +216 -0
  19. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/Dockerfile +3 -1
  20. iperf3_lib-0.3.0/Makefile +110 -0
  21. iperf3_lib-0.3.0/PKG-INFO +78 -0
  22. iperf3_lib-0.3.0/README.md +47 -0
  23. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/docker-entrypoint.sh +1 -2
  24. iperf3_lib-0.3.0/docs/changelog.md +168 -0
  25. iperf3_lib-0.3.0/docs/contributing.md +84 -0
  26. iperf3_lib-0.3.0/docs/design/advanced-execution.md +249 -0
  27. iperf3_lib-0.3.0/docs/design/native-event-observations.md +101 -0
  28. iperf3_lib-0.3.0/docs/design/native-events-2026-09-26.json +442 -0
  29. iperf3_lib-0.3.0/docs/documentation.md +74 -0
  30. iperf3_lib-0.3.0/docs/getting-started.md +123 -0
  31. iperf3_lib-0.3.0/docs/guides/analysis.md +227 -0
  32. iperf3_lib-0.3.0/docs/guides/artifacts.md +184 -0
  33. iperf3_lib-0.3.0/docs/guides/configuration-intent.md +196 -0
  34. iperf3_lib-0.3.0/docs/guides/grafana.md +94 -0
  35. iperf3_lib-0.3.0/docs/guides/migration-0.3.md +280 -0
  36. iperf3_lib-0.3.0/docs/guides/native-controls.md +289 -0
  37. iperf3_lib-0.3.0/docs/guides/prometheus.md +125 -0
  38. iperf3_lib-0.3.0/docs/guides/results.md +155 -0
  39. iperf3_lib-0.3.0/docs/guides/running-tests.md +150 -0
  40. iperf3_lib-0.3.0/docs/guides/sweeps.md +165 -0
  41. iperf3_lib-0.3.0/docs/guides/trials.md +203 -0
  42. iperf3_lib-0.3.0/docs/index.md +102 -0
  43. iperf3_lib-0.3.0/docs/reference/api.md +413 -0
  44. iperf3_lib-0.3.0/docs/reference/compatibility.md +114 -0
  45. iperf3_lib-0.3.0/docs/reference/configuration.md +216 -0
  46. iperf3_lib-0.3.0/docs/reference/native-options.md +175 -0
  47. iperf3_lib-0.3.0/docs/releasing.md +161 -0
  48. iperf3_lib-0.3.0/docs/roadmap.md +307 -0
  49. iperf3_lib-0.3.0/docs/security.md +29 -0
  50. iperf3_lib-0.3.0/docs/stylesheets/extra.css +35 -0
  51. iperf3_lib-0.3.0/examples/native_controls.py +69 -0
  52. iperf3_lib-0.3.0/examples/observability/Dockerfile +12 -0
  53. iperf3_lib-0.3.0/examples/observability/README.md +174 -0
  54. iperf3_lib-0.3.0/examples/observability/benchmark.py +105 -0
  55. iperf3_lib-0.3.0/examples/observability/dashboard.json +476 -0
  56. iperf3_lib-0.3.0/examples/observability/dashboards.yml +11 -0
  57. iperf3_lib-0.3.0/examples/observability/datasources.yml +12 -0
  58. iperf3_lib-0.3.0/examples/observability/kustomization.yaml +19 -0
  59. iperf3_lib-0.3.0/examples/observability/namespace.yaml +8 -0
  60. iperf3_lib-0.3.0/examples/observability/prometheus.yml +9 -0
  61. iperf3_lib-0.3.0/examples/observability/stack.yaml +304 -0
  62. iperf3_lib-0.3.0/examples/observability/verify.py +274 -0
  63. iperf3_lib-0.3.0/overrides/404.html +5 -0
  64. iperf3_lib-0.3.0/overrides/main.html +5 -0
  65. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/pyproject.toml +29 -13
  66. iperf3_lib-0.3.0/scripts/check_docs.py +141 -0
  67. iperf3_lib-0.3.0/scripts/docker_validate.py +442 -0
  68. iperf3_lib-0.3.0/scripts/release_artifacts.py +213 -0
  69. iperf3_lib-0.3.0/scripts/smoke_release.py +1209 -0
  70. iperf3_lib-0.3.0/scripts/validate_release.py +137 -0
  71. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/src/iperf3_lib/__init__.py +9 -1
  72. iperf3_lib-0.3.0/src/iperf3_lib/_evidence.py +45 -0
  73. iperf3_lib-0.3.0/src/iperf3_lib/_execution.py +308 -0
  74. iperf3_lib-0.3.0/src/iperf3_lib/_worker.py +215 -0
  75. iperf3_lib-0.3.0/src/iperf3_lib/analysis.py +1530 -0
  76. iperf3_lib-0.3.0/src/iperf3_lib/artifacts.py +936 -0
  77. iperf3_lib-0.3.0/src/iperf3_lib/assessments.py +267 -0
  78. iperf3_lib-0.3.0/src/iperf3_lib/capabilities.py +385 -0
  79. iperf3_lib-0.3.0/src/iperf3_lib/config.py +313 -0
  80. iperf3_lib-0.3.0/src/iperf3_lib/events.py +19 -0
  81. iperf3_lib-0.3.0/src/iperf3_lib/exporters/__init__.py +1 -0
  82. iperf3_lib-0.3.0/src/iperf3_lib/exporters/prometheus.py +182 -0
  83. iperf3_lib-0.3.0/src/iperf3_lib/ffi/symbols.py +108 -0
  84. iperf3_lib-0.3.0/src/iperf3_lib/intent.py +230 -0
  85. iperf3_lib-0.3.0/src/iperf3_lib/iperf_client.py +334 -0
  86. iperf3_lib-0.3.0/src/iperf3_lib/iperf_server.py +190 -0
  87. iperf3_lib-0.3.0/src/iperf3_lib/native_options.py +438 -0
  88. iperf3_lib-0.3.0/src/iperf3_lib/reports.py +896 -0
  89. iperf3_lib-0.3.0/src/iperf3_lib/result.py +1013 -0
  90. iperf3_lib-0.3.0/src/iperf3_lib/server_config.py +118 -0
  91. iperf3_lib-0.3.0/src/iperf3_lib/sweep_reports.py +430 -0
  92. iperf3_lib-0.3.0/src/iperf3_lib/sweeps.py +604 -0
  93. iperf3_lib-0.3.0/src/iperf3_lib/trials.py +377 -0
  94. iperf3_lib-0.3.0/tests/fixtures/artifacts/README.md +49 -0
  95. iperf3_lib-0.3.0/tests/fixtures/artifacts/development-v1-original-hashes.json +10 -0
  96. iperf3_lib-0.3.0/tests/fixtures/artifacts/legacy-end-only.json +43 -0
  97. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-failed.json +86 -0
  98. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-incomplete.json +86 -0
  99. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-native-3.19.1-tcp-bidirectional-client.json +796 -0
  100. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-native-3.19.1-tcp-reverse-server.json +516 -0
  101. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-native-3.21-sctp-reverse-client.json +546 -0
  102. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-native-3.21-tcp-evidence-client.json +608 -0
  103. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-native-3.21-tcp-warmup-server.json +580 -0
  104. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-native-3.21-udp-bidirectional-client.json +798 -0
  105. iperf3_lib-0.3.0/tests/fixtures/artifacts/v1-partial-zero-extensions.json +262 -0
  106. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/sctp-bidirectional-client.json +286 -0
  107. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/sctp-bidirectional-server.json +286 -0
  108. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/sctp-forward-client.json +175 -0
  109. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/sctp-forward-server.json +163 -0
  110. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/sctp-reverse-client.json +163 -0
  111. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/sctp-reverse-server.json +175 -0
  112. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/tcp-bidirectional-client.json +295 -0
  113. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/tcp-bidirectional-server.json +281 -0
  114. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/tcp-forward-client.json +183 -0
  115. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/tcp-forward-server.json +156 -0
  116. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/tcp-reverse-client.json +170 -0
  117. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/tcp-reverse-server.json +182 -0
  118. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/tcp-warmup-client.json +229 -0
  119. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/tcp-warmup-server.json +189 -0
  120. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/udp-bidirectional-client.json +292 -0
  121. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/udp-bidirectional-server.json +292 -0
  122. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/udp-client.json +169 -0
  123. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/udp-reverse-client.json +178 -0
  124. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/udp-reverse-server.json +205 -0
  125. iperf3_lib-0.3.0/tests/fixtures/native/3.19.1/udp-server.json +223 -0
  126. iperf3_lib-0.3.0/tests/fixtures/native/3.21/sctp-bidirectional-client.json +295 -0
  127. iperf3_lib-0.3.0/tests/fixtures/native/3.21/sctp-bidirectional-server.json +295 -0
  128. iperf3_lib-0.3.0/tests/fixtures/native/3.21/sctp-forward-client.json +182 -0
  129. iperf3_lib-0.3.0/tests/fixtures/native/3.21/sctp-forward-server.json +168 -0
  130. iperf3_lib-0.3.0/tests/fixtures/native/3.21/sctp-reverse-client.json +168 -0
  131. iperf3_lib-0.3.0/tests/fixtures/native/3.21/sctp-reverse-server.json +182 -0
  132. iperf3_lib-0.3.0/tests/fixtures/native/3.21/tcp-bidirectional-client.json +304 -0
  133. iperf3_lib-0.3.0/tests/fixtures/native/3.21/tcp-bidirectional-server.json +288 -0
  134. iperf3_lib-0.3.0/tests/fixtures/native/3.21/tcp-forward-client.json +190 -0
  135. iperf3_lib-0.3.0/tests/fixtures/native/3.21/tcp-forward-server.json +159 -0
  136. iperf3_lib-0.3.0/tests/fixtures/native/3.21/tcp-reverse-client.json +175 -0
  137. iperf3_lib-0.3.0/tests/fixtures/native/3.21/tcp-reverse-server.json +189 -0
  138. iperf3_lib-0.3.0/tests/fixtures/native/3.21/tcp-warmup-client.json +238 -0
  139. iperf3_lib-0.3.0/tests/fixtures/native/3.21/tcp-warmup-server.json +192 -0
  140. iperf3_lib-0.3.0/tests/fixtures/native/3.21/udp-bidirectional-client.json +295 -0
  141. iperf3_lib-0.3.0/tests/fixtures/native/3.21/udp-bidirectional-server.json +295 -0
  142. iperf3_lib-0.3.0/tests/fixtures/native/3.21/udp-client.json +172 -0
  143. iperf3_lib-0.3.0/tests/fixtures/native/3.21/udp-reverse-client.json +181 -0
  144. iperf3_lib-0.3.0/tests/fixtures/native/3.21/udp-reverse-server.json +172 -0
  145. iperf3_lib-0.3.0/tests/fixtures/native/3.21/udp-server.json +181 -0
  146. iperf3_lib-0.3.0/tests/fixtures/native/README.md +161 -0
  147. iperf3_lib-0.3.0/tests/fixtures/native/capture.py +98 -0
  148. iperf3_lib-0.3.0/tests/fixtures/reports/v1/README.md +14 -0
  149. iperf3_lib-0.3.0/tests/fixtures/reports/v1/baseline-pass.json +1475 -0
  150. iperf3_lib-0.3.0/tests/fixtures/reports/v1/partial-failure.json +1043 -0
  151. iperf3_lib-0.3.0/tests/fixtures/sweeps/README.md +13 -0
  152. iperf3_lib-0.3.0/tests/fixtures/sweeps/v1-synthetic.json +1050 -0
  153. iperf3_lib-0.3.0/tests/sweep_helpers.py +93 -0
  154. iperf3_lib-0.3.0/tests/test_advanced_client_results.py +94 -0
  155. iperf3_lib-0.3.0/tests/test_analysis.py +926 -0
  156. iperf3_lib-0.3.0/tests/test_artifacts.py +882 -0
  157. iperf3_lib-0.3.0/tests/test_assessments.py +230 -0
  158. iperf3_lib-0.3.0/tests/test_capabilities.py +180 -0
  159. iperf3_lib-0.3.0/tests/test_client_branches.py +513 -0
  160. iperf3_lib-0.3.0/tests/test_client_integration_configs.py +216 -0
  161. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/tests/test_config.py +22 -7
  162. iperf3_lib-0.3.0/tests/test_config_native_controls.py +312 -0
  163. iperf3_lib-0.3.0/tests/test_docker_validate.py +376 -0
  164. iperf3_lib-0.3.0/tests/test_docs.py +127 -0
  165. iperf3_lib-0.3.0/tests/test_execution_worker.py +698 -0
  166. iperf3_lib-0.3.0/tests/test_extended_compatibility.py +325 -0
  167. iperf3_lib-0.3.0/tests/test_extended_configuration_contracts.py +282 -0
  168. iperf3_lib-0.3.0/tests/test_installed_smoke.py +427 -0
  169. iperf3_lib-0.3.0/tests/test_intent.py +198 -0
  170. iperf3_lib-0.3.0/tests/test_intent_integration.py +72 -0
  171. iperf3_lib-0.3.0/tests/test_native_controls_integration.py +256 -0
  172. iperf3_lib-0.3.0/tests/test_native_options.py +604 -0
  173. iperf3_lib-0.3.0/tests/test_observability_example.py +165 -0
  174. iperf3_lib-0.3.0/tests/test_prometheus_exporter.py +332 -0
  175. iperf3_lib-0.3.0/tests/test_release_policy.py +562 -0
  176. iperf3_lib-0.3.0/tests/test_reports.py +549 -0
  177. iperf3_lib-0.3.0/tests/test_result_native_fixtures.py +234 -0
  178. iperf3_lib-0.3.0/tests/test_result_normalization.py +900 -0
  179. iperf3_lib-0.3.0/tests/test_server.py +93 -0
  180. iperf3_lib-0.3.0/tests/test_server_additional.py +106 -0
  181. iperf3_lib-0.3.0/tests/test_server_config.py +170 -0
  182. iperf3_lib-0.3.0/tests/test_server_integration.py +359 -0
  183. iperf3_lib-0.3.0/tests/test_server_iteration.py +69 -0
  184. iperf3_lib-0.3.0/tests/test_server_serve_once.py +69 -0
  185. iperf3_lib-0.3.0/tests/test_sweep_reports.py +277 -0
  186. iperf3_lib-0.3.0/tests/test_sweeps.py +479 -0
  187. iperf3_lib-0.3.0/tests/test_sweeps_integration.py +73 -0
  188. iperf3_lib-0.3.0/tests/test_transport_evidence.py +237 -0
  189. iperf3_lib-0.3.0/tests/test_trials.py +367 -0
  190. iperf3_lib-0.3.0/tests/test_trials_integration.py +47 -0
  191. iperf3_lib-0.3.0/tests/trial_helpers.py +57 -0
  192. iperf3_lib-0.3.0/uv.lock +1308 -0
  193. iperf3_lib-0.3.0/zensical.toml +76 -0
  194. iperf3_lib-0.2.0/.github/workflows/release.yml +0 -170
  195. iperf3_lib-0.2.0/CONTRIBUTING.md +0 -93
  196. iperf3_lib-0.2.0/Makefile +0 -80
  197. iperf3_lib-0.2.0/PKG-INFO +0 -187
  198. iperf3_lib-0.2.0/README.md +0 -155
  199. iperf3_lib-0.2.0/scripts/validate_release.py +0 -81
  200. iperf3_lib-0.2.0/src/iperf3_lib/capabilities.py +0 -45
  201. iperf3_lib-0.2.0/src/iperf3_lib/config.py +0 -53
  202. iperf3_lib-0.2.0/src/iperf3_lib/ffi/symbols.py +0 -47
  203. iperf3_lib-0.2.0/src/iperf3_lib/iperf_client.py +0 -207
  204. iperf3_lib-0.2.0/src/iperf3_lib/iperf_server.py +0 -104
  205. iperf3_lib-0.2.0/src/iperf3_lib/result.py +0 -42
  206. iperf3_lib-0.2.0/tests/test_capabilities.py +0 -26
  207. iperf3_lib-0.2.0/tests/test_client_branches.py +0 -261
  208. iperf3_lib-0.2.0/tests/test_client_integration_configs.py +0 -95
  209. iperf3_lib-0.2.0/tests/test_server.py +0 -48
  210. iperf3_lib-0.2.0/tests/test_server_additional.py +0 -115
  211. iperf3_lib-0.2.0/tests/test_server_iteration.py +0 -38
  212. iperf3_lib-0.2.0/tests/test_server_serve_once.py +0 -75
  213. iperf3_lib-0.2.0/uv.lock +0 -886
  214. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/.gitignore +0 -0
  215. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/LICENSE +0 -0
  216. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/SECURITY.md +0 -0
  217. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/src/iperf3_lib/exceptions.py +0 -0
  218. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/src/iperf3_lib/ffi/__init__.py +0 -0
  219. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/src/iperf3_lib/ffi/api.py +0 -0
  220. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/src/iperf3_lib/py.typed +0 -0
  221. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/tests/conftest.py +0 -0
  222. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/tests/test_client_async_and_result.py +0 -0
  223. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/tests/test_client_mocked.py +0 -0
  224. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/tests/test_client_more.py +0 -0
  225. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/tests/test_ffi_dlopen.py +0 -0
  226. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/tests/test_ffi_load.py +0 -0
  227. {iperf3_lib-0.2.0 → iperf3_lib-0.3.0}/tests/test_public_api.py +0 -0
@@ -14,4 +14,6 @@ build
14
14
  coverage.xml
15
15
  dist
16
16
  htmlcov
17
+ site
18
+ .cache
17
19
  iperf-3.*
@@ -0,0 +1 @@
1
+ *.sh text eol=lf
@@ -0,0 +1,30 @@
1
+ name: Bug report
2
+ description: Report incorrect behavior with a reproducible example.
3
+ labels: [bug]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: Expected and observed behavior
9
+ description: Explain the difference and its impact.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: reproduction
14
+ attributes:
15
+ label: Reproduction
16
+ description: Include minimal Python code and sanitized native JSON or error output where relevant.
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: environment
21
+ attributes:
22
+ label: Environment
23
+ description: Package version or commit, Python, libiperf version, operating system, protocol, and direction.
24
+ validations:
25
+ required: true
26
+ - type: textarea
27
+ id: acceptance
28
+ attributes:
29
+ label: Suggested acceptance checks
30
+ description: What would demonstrate that this is fixed?
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Security reporting
4
+ url: https://github.com/dariuszpanas/iperf3-lib/security/policy
5
+ about: Follow the security policy to report vulnerabilities privately.
6
+ - name: Documentation
7
+ url: https://dariuszpanas.github.io/iperf3-lib/
8
+ about: Check installation, API behavior, and current limitations.
@@ -0,0 +1,30 @@
1
+ name: Feature or design proposal
2
+ description: Describe a use case and a bounded proposal.
3
+ labels: [enhancement, planning]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: Problem and use case
9
+ description: Describe the workflow this would improve and the current workaround.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: proposal
14
+ attributes:
15
+ label: Proposed behavior and boundaries
16
+ description: Include API ideas, alternatives, and what is outside the proposed scope.
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: acceptance
21
+ attributes:
22
+ label: Acceptance criteria and evidence
23
+ description: Include native verification or Prometheus/Grafana checks when relevant.
24
+ validations:
25
+ required: true
26
+ - type: textarea
27
+ id: dependencies
28
+ attributes:
29
+ label: Related issues and compatibility
30
+ description: Link dependencies and describe migration or platform considerations.
@@ -0,0 +1,21 @@
1
+ name: Maintenance or documentation task
2
+ description: Track a concrete improvement to tooling, docs, or release preparation.
3
+ body:
4
+ - type: textarea
5
+ id: outcome
6
+ attributes:
7
+ label: Intended outcome
8
+ description: Explain what needs to change and why.
9
+ validations:
10
+ required: true
11
+ - type: textarea
12
+ id: acceptance
13
+ attributes:
14
+ label: Completion checklist
15
+ description: List concrete, verifiable steps and any follow-up that remains separate.
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: dependencies
20
+ attributes:
21
+ label: Related issues or pull requests
@@ -1,6 +1,16 @@
1
1
  version: 2
2
2
 
3
3
  updates:
4
+ - package-ecosystem: "docker"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ day: "monday"
9
+ time: "09:00"
10
+ timezone: "America/Los_Angeles"
11
+ commit-message:
12
+ prefix: "chore(docker)"
13
+
4
14
  - package-ecosystem: "uv"
5
15
  directory: "/"
6
16
  schedule:
@@ -45,22 +55,3 @@ updates:
45
55
  applies-to: "security-updates"
46
56
  patterns:
47
57
  - "*"
48
-
49
- - package-ecosystem: "docker"
50
- directory: "/"
51
- schedule:
52
- interval: "weekly"
53
- day: "monday"
54
- time: "09:30"
55
- timezone: "America/Los_Angeles"
56
- commit-message:
57
- prefix: "chore(docker)"
58
- groups:
59
- docker-images:
60
- applies-to: "version-updates"
61
- patterns:
62
- - "*"
63
- docker-security:
64
- applies-to: "security-updates"
65
- patterns:
66
- - "*"
@@ -5,6 +5,7 @@ on:
5
5
  branches: [main]
6
6
  pull_request:
7
7
  branches: [main]
8
+ types: [opened, synchronize, reopened, edited, ready_for_review]
8
9
  schedule:
9
10
  # Run the full compatibility matrix monthly as a maintenance reminder.
10
11
  - cron: "17 9 1 * *"
@@ -26,11 +27,15 @@ jobs:
26
27
  steps:
27
28
  - name: Check out repository
28
29
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
30
+ with:
31
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
32
+ fetch-depth: 0
33
+ persist-credentials: false
29
34
 
30
35
  - name: Install uv and Python
31
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
36
+ id: setup-uv
37
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
32
38
  with:
33
- version: "0.11.31"
34
39
  python-version: "3.12"
35
40
  enable-cache: true
36
41
  cache-dependency-glob: uv.lock
@@ -41,6 +46,35 @@ jobs:
41
46
  - name: Run non-mutating checks
42
47
  run: make check
43
48
 
49
+ - name: Run unit tests
50
+ run: make test
51
+
52
+ - name: Lint GitHub workflows with YAGA
53
+ run: make workflow-lint
54
+
55
+ - name: Check source and test changes
56
+ if: github.event_name == 'pull_request'
57
+ env:
58
+ YAGA_RANGE: ${{ format('{0}...{1}', github.event.pull_request.base.sha, github.event.pull_request.head.sha) }}
59
+ run: >-
60
+ uv run --frozen yaga change check
61
+ --policy .yaga/change-policy.toml --range "$YAGA_RANGE" --format github
62
+
63
+ commit-policy:
64
+ name: YAGA commit policy
65
+ if: github.event_name == 'pull_request'
66
+ runs-on: ubuntu-latest
67
+ timeout-minutes: 5
68
+ steps:
69
+ - name: Check out pull request history
70
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
71
+ with:
72
+ ref: ${{ github.event.pull_request.head.sha }}
73
+ fetch-depth: 0
74
+ persist-credentials: false
75
+ - name: Check pull request title and commits
76
+ uses: dariuszpanas/yaga/actions/commit-check@f61bbfa878447157239bb92ff67977bd64400afd # v0.2.0
77
+
44
78
  docker-matrix-tests:
45
79
  name: docker (${{ matrix.python }}, iperf ${{ matrix.iperf }})
46
80
  runs-on: ubuntu-latest
@@ -54,12 +88,14 @@ jobs:
54
88
  steps:
55
89
  - name: Check out repository
56
90
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
91
+ with:
92
+ persist-credentials: false
57
93
 
58
94
  - name: Set up Docker Buildx
59
- uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
95
+ uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
60
96
 
61
97
  - name: Build compatibility image
62
- uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
98
+ uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
63
99
  with:
64
100
  context: .
65
101
  load: true
@@ -76,41 +112,10 @@ jobs:
76
112
  "iperf3-lib-test:py${{ matrix.python }}-iperf${{ matrix.iperf }}" \
77
113
  bash -c "python --version && iperf3 --version && pytest -vv --cov=iperf3_lib --cov-report=term-missing"
78
114
 
79
- python-preview:
80
- name: python 3.15 preview (allowed failure)
81
- runs-on: ubuntu-latest
82
- needs: lint-and-types
83
- continue-on-error: true
84
- timeout-minutes: 30
85
- steps:
86
- - name: Check out repository
87
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
88
-
89
- - name: Set up Docker Buildx
90
- uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
91
-
92
- - name: Build preview image
93
- uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
94
- with:
95
- context: .
96
- load: true
97
- tags: iperf3-lib-test:py315-preview-iperf321
98
- build-args: |
99
- PYTHON_BASE=python:3.15-rc-slim
100
- IPERF3_VERSION=3.21
101
- cache-from: type=gha,scope=py315-preview-iperf321
102
- cache-to: type=gha,mode=max,scope=py315-preview-iperf321
103
-
104
- - name: Run preview suite
105
- run: |
106
- docker run --rm -v "${{ github.workspace }}:/app" \
107
- iperf3-lib-test:py315-preview-iperf321 \
108
- bash -c "python --version && iperf3 --version && pytest -vv --cov=iperf3_lib --cov-report=term-missing"
109
-
110
115
  ci:
111
116
  name: ci
112
117
  runs-on: ubuntu-latest
113
- needs: [lint-and-types, docker-matrix-tests]
118
+ needs: [lint-and-types, commit-policy, docker-matrix-tests]
114
119
  if: ${{ always() }}
115
120
  timeout-minutes: 5
116
121
  steps:
@@ -118,6 +123,11 @@ jobs:
118
123
  env:
119
124
  LINT_RESULT: ${{ needs.lint-and-types.result }}
120
125
  TEST_RESULT: ${{ needs.docker-matrix-tests.result }}
126
+ COMMIT_RESULT: ${{ needs.commit-policy.result }}
127
+ EVENT_NAME: ${{ github.event_name }}
121
128
  run: |
122
129
  test "$LINT_RESULT" = "success"
123
130
  test "$TEST_RESULT" = "success"
131
+ if [ "$EVENT_NAME" = "pull_request" ]; then
132
+ test "$COMMIT_RESULT" = "success"
133
+ fi
@@ -0,0 +1,57 @@
1
+ name: Documentation
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: pages
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ build:
17
+ name: Build documentation
18
+ if: github.ref == 'refs/heads/main'
19
+ runs-on: ubuntu-latest
20
+ timeout-minutes: 10
21
+ steps:
22
+ - name: Check out repository
23
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
24
+ with:
25
+ persist-credentials: false
26
+ - name: Install uv and Python
27
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
28
+ with:
29
+ python-version: "3.12"
30
+ enable-cache: true
31
+ cache-dependency-glob: uv.lock
32
+ - name: Synchronize frozen dependencies
33
+ run: uv sync --frozen --dev
34
+ - name: Build and check documentation
35
+ run: make docs
36
+ - name: Upload documentation
37
+ uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5
38
+ with:
39
+ path: site
40
+
41
+ deploy:
42
+ name: Deploy documentation
43
+ needs: build
44
+ runs-on: ubuntu-latest
45
+ timeout-minutes: 10
46
+ permissions:
47
+ pages: write
48
+ id-token: write
49
+ environment:
50
+ name: github-pages
51
+ url: ${{ steps.deployment.outputs.page_url }}
52
+ steps:
53
+ - name: Configure GitHub Pages
54
+ uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6
55
+ - name: Deploy to GitHub Pages
56
+ id: deployment
57
+ uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5