Диаграмма конвейера CI/CD
Визуальная карта и разбивка по дорожкам этапов рабочего процесса сборки, тестирования, lint, безопасности и публикации, которые контролируют каждое изменение кода и каждый релиз.
Структурная карта рабочего процесса сборки · валидации · публикации, который контролирует каждое изменение в экосистеме Apothem. Этот документ устанавливает поверхность визуализации. Рабочие процессы GitHub Actions, которые он описывает, находятся в .github/workflows/ (например, ci.yml и release.yml), а инструментарий релизов — в scripts/release/.
Форма конвейера
%%{ 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 --> MERGEРоли дорожек
- Дорожка статического анализа — быстрая обратная связь. Ruff покрывает стиль Python и тщательно подобранный набор правил; mypy навязывает дисциплину типов в режиме strict; валидатор фронтматтера контролирует соответствие схеме артефактов для правил, навыков, делегированных исполнителей и команд. markdownlint в эту дорожку не входит: рабочий процесс Markdown Lint запускает его хук pre-commit в CI при изменении файлов Markdown (см. Соглашения по Markdown).
- Дорожка тестов —
pytest tests/hooksпрогоняет среду выполнения хуков по полной матрице событий;validate_ecosystem.py— основной структурный шлюз для проверки согласованности между артефактами;chaos_pass.pyзапускается в задании контроля качества CI при push и pull request вmain(с фильтром по путям), чтобы выявлять деградацию при ухудшенных входных данных. Драйверы бенчмарков по классам вsrc/apothem/benchmarks/выполняются в CI через набор pytest и через заданиеmetrics. Каждый полный запуск pytest в CI собираетtests/unit/test_benchmarks.py, который вызывает все драйверы, кромеbench_install.py. Заданиеmetricsзапускаетscripts/dev/collect_metrics.py, который выполняетbench_hooks.py --jsonи записывает результат какhook_e2e_ms.bench_tests.pyиbench_install.pyзамеряют реальные запуски только в рамкахmake benchmarks. Ни один рабочий процесс не запускаетmake benchmarks. - Дорожка безопасности — gitleaks в
ci.ymlвыявляет случайно закоммиченные учётные данные. Аудит лицензий (license-audit.yml) завершается ошибкой, если лицензия зависимости не входит в список разрешённых. Он запускается еженедельно и при изменении файлов зависимостей или лицензий. Шлюз REUSE (reuse.yml) запускается при каждом изменении и завершается ошибкой, если у файла нет строки лицензии или выражение SPDX не разбирается.release.ymlгенерирует SBOM для каждого релиза с тегом. - Дорожка публикации — рабочие процессы релиза запускаются push-ами тегов; публикаторов npm и VS Code также можно перезапустить вручную для существующего тега. Проверка подписанного тега подтверждает происхождение релизной ветки; заметки о релизе формируются из
CHANGELOG.mdв формате Keep-A-Changelog. Сайт проекта публикуется изsite/dist/в цель GitHub Pages при push вmain, которые затрагивают его входные данные сборки, либо по ручному запуску.
Конкретная конфигурация
Фактические файлы рабочего процесса (.github/workflows/ci.yml,
.github/workflows/release.yml и т. д.) находятся в репозитории. Эта диаграмма
задаёт каноническую форму, которой будет следовать каждая будущая конфигурация.
Авторитетные перекрёстные ссылки
pyproject.toml— источник истины для конфигурации Ruff / mypy / pytest.scripts/dev/validate_ecosystem.py— основной межартефактный шлюз.scripts/dev/validate_hooks.py— структурная валидация, специфичная для хуков.scripts/dev/chaos_pass.py— состязательный проход по каждому настроенному хуку.src/apothem/benchmarks/— верификаторы бюджета времени выполнения по классам.site/content/docs/developer-guide.mdx— рабочий процесс контрибьютора, ориентированный на оператора.CHANGELOG.md— источник заметок о релизе.
Конвенции уровня репозитория для сред выполнения ассистентов
Как Apothem материализует операционные конвенции уровня репозитория — правила, навыки и определения делегированных работников — в нативную поверхность инструкций каждого ассистента (AGENTS.md и его эквиваленты для каждого инструмента).
Справочник
Навигируемый реестр классов артефактов с путями и дисковыми раскладками для правил, команд, навыков, делегированных работников, хуков, серверов MCP, настроек и output-стилей.