Checklist CI/TDD por plugin (Fase 0)¶
Referencia: ADR 023, plantilla pip plugins/_template/ y builtin core/cortex_core/template/.
Antes de escribir código de producción¶
- Crear
tests/test_{plugin_id}_api.pycon casos de éxito y error. - Verificar que la prueba falla por la razón correcta (RED).
- Implementar el mínimo para pasar (GREEN).
- Refactorizar manteniendo pruebas en verde.
Checklist de plugin productivo¶
- [ ]
pyproject.tomlcon entry pointcortex.plugins - [ ]
PluginDescriptorconrequires,optional_requires,provides,stateless - [ ] Si el plugin forma parte de un producto ensamblado: actualizar
REFERENCE_GRAPHen el paquete de producto (cortex-product-unosportclub) y dependency-contracts - [ ]
create_plugin()factory - [ ]
api_router()bajo/api/v1/{namespace} - [ ]
register_resources()(preferido) oregister_dashboards() - [ ]
register_widget_types()si aporta widgets de dominio - [ ]
mcp_tools.pycon convención ADR 006 - [ ] Alembic + prefijo
{plugin_id}_*ostateless: true - [ ] Producción: plugins con tablas Alembic deben tener
stateless: falsey store PG; prohibido depender de_STOREglobal como única fuente enCORTEX_PLUGIN_STORAGE=postgres - [ ] Repositorio/store (memory para tests, postgres para prod)
- [ ] Fixtures solo como seeders de test, no store runtime
- [ ]
ui/manifest.jsonsincronizado conresources.py - [ ] Tests API: namespace, panel module, CRUD crítico
- [ ] Sin imports cruzados entre plugins (solo HTTP) — validado por
test_no_cross_plugin_imports
CI local¶
uv run pytest plugins/{id}/tests -v
uv run ruff check plugins/{id}
./scripts/validate-plugin-manifests.sh
CI repositorio¶
python-ci.yml: checkout con submódulos (submodules: recursive), pytest global + ruff + validate manifests + pip smokepython-ci.ymljobtest-postgres: pytest conCORTEX_PLUGIN_STORAGE=postgresy PostgreSQL 16- Manifests validados con
validate_manifest/validate_dashboard
Submódulos privados en GitHub Actions¶
Si los repos cortex-docs y cortex-plugin-* son privados, el checkout debe usar un PAT con acceso a la org:
Secret GH_SUBMODULES_PAT en el repositorio cortex-hive. Sin esto, CI falla con Repository not found al clonar submódulos.
Desarrollo en repo aislado del plugin: ejecuta uv run pytest dentro de plugins/{id} tras uv sync en la raíz del monorepo, o configura dependencias vía wheels Cloudsmith (ver repositorios).