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: INTEGRATION_CHECKLIST.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -56,7 +56,7 @@ The structure check produces warnings (not errors) for these cases:
56
56
57
57
| Warning | Explanation |
58
58
|---------|-------------|
59
-
|`Integration.load()` not found | The check looks for the literal string `Integration.load()`. Using `Integration.load(config_path)`triggers this warning — that's expected for multi-file integrations. |
59
+
|`Integration.load(...)` not found | The check looks for `Integration.load` in Python files. Use `Integration.load()` for vendored single-file integrations, or `Integration.load(config_path)`/ `Integration.load(Path(__file__).with_name("config.json"))` when an explicit config path is needed. |
60
60
| Missing `__init__.py`| Optional for modular integrations with an `actions/` subdirectory |
61
61
| Missing top-level `display_name`| Recommended but not required |
62
62
| Missing `display_name` on actions | Recommended but not required |
@@ -144,9 +144,9 @@ but only list_sites and create_site are implemented:
Run this **first** — it catches structural problems before you waste time on code quality checks. It validates:
28
28
29
29
- Folder name is lowercase
30
-
- All required files exist (`config.json`, `__init__.py`, `requirements.txt`, `README.md`, `icon.png`/`icon.svg`)
30
+
- All required files exist (`config.json`, `requirements.txt`, `README.md`, `icon.png`/`icon.svg`; `__init__.py` is required for single-file/package-style integrations and optional for modular integrations with `actions/`)
31
31
-`config.json` has the required fields and valid schema
32
32
-`__init__.py` is minimal (only import + `__all__`)
33
-
-`requirements.txt` includes `autohive-integrations-sdk`
33
+
-`requirements.txt` includes `autohive-integrations-sdk~=2.0.1` or later in the SDK 2.x line
34
34
-`tests/` folder has `__init__.py`, `context.py` or `conftest.py`, and at least one `test_*.py`
The test runner handles this by installing dependencies and running pytest separately for each integration. The last `pip install` overwrites the previous SDK version, which is why pytest must run immediately after each install.
Copy file name to clipboardExpand all lines: scripts/docs/validate_integration.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -147,7 +147,7 @@ Allowed patterns:
147
147
| Check | Severity | Description |
148
148
|-------|----------|-------------|
149
149
|`autohive-integrations-sdk` present | Error | SDK dependency is mandatory |
150
-
| Version pinned and not deprecated | Warning | Should pin SDK version (e.g., `~=2.0.0`); deprecated versions warn |
150
+
| Version pinned and not deprecated | Warning | Should pin SDK version (e.g., `~=2.0.1`); deprecated versions warn |
151
151
152
152
### 6. Tests Folder (`_check_tests_folder`)
153
153
@@ -166,7 +166,7 @@ Inspects all `.py` files in the integration directory (not just the entry point)
166
166
|-------|----------|-------------|
167
167
|`Integration` imported | Warning | Should import from SDK |
168
168
|`ActionHandler` imported | Warning | Should import from SDK |
169
-
|`Integration.load()` called | Warning | Standard loading pattern |
169
+
|`Integration.load(...)` called | Warning | Standard loading pattern, with or without an explicit config path|
170
170
171
171
> **Note:** Action decorator matching (config ↔ code) is handled by `check_config_sync.py`, which uses AST parsing for more accurate bidirectional validation.
172
172
@@ -254,8 +254,8 @@ Called by the `validate-integration.yml` workflow (on pull requests) as the **St
The script is also exercised by the `self-test.yml` workflow, which runs it against the test examples in `tests/examples/` as a regression guard whenever `scripts/` or `tests/` change.
0 commit comments