Diagramme du pipeline CI/CD
Carte visuelle et décomposition par couloirs des étapes du flux de travail de build, de test, de lint, de sécurité et de publication qui contrôlent chaque changement de code et chaque publication.
La carte structurelle du flux de travail de build · validation · publication
qui contrôle chaque changement de l'écosystème d'Apothem. Ce document installe
la surface de visualisation. Les fichiers de flux de travail GitHub Actions qu'il
décrit se trouvent dans .github/workflows/ (par exemple ci.yml et release.yml),
et l'outillage de publication se trouve dans scripts/release/.
Forme du pipeline
%%{ init: { "theme": "neutral" } }%%
%% verified: 2026-04-27 %%
%% provenance: pyproject.toml + scripts/dev/validate_ecosystem.py + scripts/dev/validate_hooks.py %%
%% cross-reference: site/content/docs/developer-guide.mdx (contributor workflow) %%
flowchart LR
accTitle: CI/CD pipeline shape
accDescr: Left-to-right flowchart of the apothem CI CD pipeline showing build, test, lint, type-check, security scan, docs build, package, sign, and publish stages with branch protection gates between them.
subgraph Trigger["Trigger surface"]
PR["Pull request opened or updated"]
PUSH["Push to main"]
TAG["Tag release vX.Y.Z"]
end
subgraph Static["Static analysis lane"]
LINT["Ruff lint + format check"]
TYPE["Mypy strict"]
FRONT["Frontmatter validator"]
end
subgraph Test["Test lane"]
PYTEST["pytest tests/hooks"]
ECO["validate_ecosystem.py"]
CHAOS["chaos_pass.py (CI quality job)"]
BENCH["src/apothem/benchmarks/ (unit tests in CI, bench_hooks in metrics job)"]
end
subgraph Security["Security lane"]
SECRETS["Secret scan"]
SBOM["SBOM generation (tags only)"]
LICENSE["License audit"]
end
subgraph Publish["Publish lane (tags only)"]
SIGN["Signed-tag verification"]
ATTEST["Provenance attestation"]
RELEASE["Release notes from CHANGELOG.md"]
end
DOCS["Project website publish"]
PR --> Static
PR --> Test
PR --> Security
PUSH --> Static
PUSH --> Test
PUSH --> Security
PUSH --> DOCS
TAG --> Static
TAG --> Test
TAG --> Security
TAG --> Publish
Static --> GATE{All lanes green?}
Test --> GATE
Security --> GATE
GATE -->|yes| MERGE[Merge / publish]
GATE -->|no| BLOCK[Block · surface failures · request fix]
Publish --> MERGERôles des couloirs
- Couloir d'analyse statique — retour rapide. Ruff couvre le style Python et un ensemble de règles sélectionnées ; mypy impose la discipline de typage en mode strict ; le validateur de frontmatter contrôle la conformité des artefacts au schéma pour les règles, les skills, les travailleurs délégués et les commandes. markdownlint ne fait pas partie de ce couloir : son hook de pre-commit s'exécute dans la CI, via le flux de travail Markdown Lint, lorsque des fichiers Markdown changent (voir Conventions Markdown).
- Couloir de tests —
pytest tests/hooksexerce le runtime des hooks contre la matrice complète des événements ;validate_ecosystem.pyest le principal portail structurel de la cohérence inter-artefacts ;chaos_pass.pys'exécute dans le job qualité de la CI, sur les push et pull requests versmain(filtrés par chemin), pour détecter la dégradation sous des entrées dégradées. Les pilotes de benchmark par classe soussrc/apothem/benchmarks/s'exécutent en CI via la suite pytest et via le jobmetrics. Chaque exécution complète de pytest en CI collectetests/unit/test_benchmarks.py, qui appelle chaque pilote saufbench_install.py. Le jobmetricsexécutescripts/dev/collect_metrics.py, qui lancebench_hooks.py --jsonet consigne le résultat sous le nomhook_e2e_ms.bench_tests.pyetbench_install.pyne chronométrent de véritables exécutions que sousmake benchmarks. Aucun flux de travail n'exécutemake benchmarks. - Couloir de sécurité — gitleaks dans
ci.ymlrepère les identifiants commités par accident. L'audit de licences (license-audit.yml) échoue lorsqu'une licence de dépendance ne figure pas dans sa liste d'autorisation. Il s'exécute chaque semaine et lorsque les fichiers de dépendances ou de licences changent. La porte REUSE (reuse.yml) s'exécute à chaque modification et échoue lorsqu'un fichier n'a pas de ligne de licence ou qu'une expression SPDX ne s'analyse pas.release.ymlgénère le SBOM de chaque version étiquetée. - Couloir de publication — les flux de travail de publication sont déclenchés
par les push de tags ; les publieurs npm et VS Code peuvent aussi être relancés
manuellement pour une étiquette existante. La vérification de l'étiquette
signée confirme la provenance de la branche de publication ; les notes de
publication dérivent du format Keep-A-Changelog de
CHANGELOG.md. Le site web du projet se publie depuissite/dist/vers la cible GitHub Pages lors des push surmainqui touchent à ses entrées de compilation, ou sur déclenchement manuel.
Configuration concrète
Les fichiers de flux de travail réels (.github/workflows/ci.yml,
.github/workflows/release.yml, etc.) se trouvent dans le dépôt. Ce diagramme
définit la forme canonique que toute configuration future reflète.
Références croisées faisant autorité
pyproject.toml— source de vérité de la configuration Ruff / mypy / pytest.scripts/dev/validate_ecosystem.py— le principal portail inter-artefacts.scripts/dev/validate_hooks.py— validation structurelle spécifique aux hooks.scripts/dev/chaos_pass.py— balayage adversarial de chaque hook configuré.src/apothem/benchmarks/— vérificateurs du budget d'exécution par classe.site/content/docs/developer-guide.mdx— le flux de travail du contributeur, destiné à l'opérateur.CHANGELOG.md— source des notes de publication.
Conventions à portée de dépôt pour les environnements d'exécution d'assistants
Comment Apothem matérialise les conventions opérationnelles à portée de dépôt — règles, compétences et définitions de travailleurs délégués — dans la surface d'instructions native de chaque assistant (AGENTS.md et ses équivalents par outil).
Référence
Registre navigable des classes d'artefact avec les chemins et les dispositions sur disque pour les règles, commandes, skills, travailleurs délégués, hooks, serveurs MCP, paramètres et output-styles.