You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,10 +17,11 @@ Each managed plugin must include:
17
17
-`Cargo.toml`
18
18
-`Makefile`
19
19
-`README.md`
20
-
-`tests/`
21
20
-`cpex_<slug>/__init__.py`
22
21
-`cpex_<slug>/plugin-manifest.yaml`
23
22
23
+
Python integration tests live under `plugins/tests/<slug>/`; Rust unit tests live in the plugin crate.
24
+
24
25
Rust crates are owned by the top-level workspace in `Cargo.toml`. Python package names follow `cpex-<slug>`, Python modules follow `cpex_<slug>`, plugin manifests must declare a top-level `kind` in `module.object` form, and `pyproject.toml` must publish the matching `module:object` reference under `[project.entry-points."cpex.plugins"]`. Release tags use the hyphenated slug form `<slug-with-hyphens>-v<version>`, for example `rate-limiter-v0.0.2`.
Copy file name to clipboardExpand all lines: TESTING.md
+37-2Lines changed: 37 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,11 +40,46 @@ Equivalent repo-level helper:
40
40
make plugin-test PLUGIN=rate_limiter
41
41
```
42
42
43
-
`make plugin-test` runs the selected plugin's `make ci` target, including stub verification, build, bench compilation without execution, install, and Python tests.
43
+
`make plugin-test` runs the selected plugin's `make ci` target, including stub verification, build, bench compilation where configured, install, and Python tests.
44
+
45
+
## 3. Rust Coverage
46
+
47
+
CI enforces at least 90% line coverage for each Rust plugin selected by the plugin catalog. The coverage job instruments Rust, runs Rust unit tests, then runs each plugin's repo-level Python integration tests so PyO3 paths are counted.
48
+
49
+
To run the same coverage check locally for all managed Rust plugins:
Whenever the Rust plugin CI workflow is triggered, it runs the repo contract tests before any plugin build jobs.
82
+
Repo contract tests run in their own CI workflow. The Rust plugin CI workflow uses the same plugin catalog to select affected plugin build, integration, and coverage jobs.
48
83
49
84
Per-plugin build/test jobs are then scoped by the plugin catalog:
Copy file name to clipboardExpand all lines: plugins/rust/python-package/encoded_exfil_detection/cpex_encoded_exfil_detection/encoded_exfil_detection.py
0 commit comments