Diagrama do pipeline de CI/CD
Mapa visual e detalhamento por faixas dos estágios do fluxo de trabalho de build, teste, lint, segurança e publicação que controlam cada alteração de código e cada lançamento.
O mapa estrutural do fluxo de trabalho de build · validação · publicação que
controla cada alteração no ecossistema do Apothem. Este documento instala a
superfície de visualização. Os arquivos de fluxo de trabalho do GitHub Actions que
ele descreve ficam em .github/workflows/ (por exemplo, ci.yml e release.yml), e o
ferramental de lançamento fica em scripts/release/.
Forma do 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 --> MERGEPapéis das faixas
- Faixa de análise estática — feedback rápido. O Ruff cobre o estilo do Python e um conjunto curado de regras; o mypy impõe disciplina de tipos no modo strict; o validador de frontmatter controla a conformidade dos artefatos com o schema para regras, skills, trabalhadores delegados e comandos. O markdownlint não faz parte desta faixa: seu hook de pre-commit roda no CI pelo fluxo de trabalho Markdown Lint quando arquivos Markdown mudam (consulte Convenções de Markdown).
- Faixa de testes —
pytest tests/hooksexercita o runtime de hooks contra a matriz completa de eventos;validate_ecosystem.pyé o principal portão estrutural para a consistência entre artefatos;chaos_pass.pyroda no job de qualidade do CI em pushes e pull requests paramain(com filtro de caminho), para detectar degradação sob entradas degradadas. Os drivers de benchmark por classe emsrc/apothem/benchmarks/rodam no CI pela suíte do pytest e pelo jobmetrics. Cada execução completa do pytest no CI coletatests/unit/test_benchmarks.py, que chama todos os drivers, excetobench_install.py. O jobmetricsexecutascripts/dev/collect_metrics.py, que rodabench_hooks.py --jsone registra o resultado comohook_e2e_ms.bench_tests.pyebench_install.pymedem execuções reais somente sobmake benchmarks. Nenhum fluxo de trabalho executamake benchmarks. - Faixa de segurança — gitleaks em
ci.ymldetecta credenciais incluídas em commits por acidente. A auditoria de licenças (license-audit.yml) falha quando a licença de uma dependência está fora da sua lista de permissões. Ela roda semanalmente e quando arquivos de dependência ou de licença mudam. O gate REUSE (reuse.yml) roda em cada mudança e falha quando um arquivo não tem uma linha de licença ou quando uma expressão SPDX não pode ser analisada.release.ymlgera o SBOM de cada release marcada com tag. - Faixa de publicação — os fluxos de trabalho de release são disparados por
pushes de tags; os publicadores do npm e do VS Code também podem ser
reexecutados por disparo manual para uma tag existente. A verificação de tag
assinada confirma a procedência da branch de release; as notas de release
derivam do
CHANGELOG.md, no formato Keep-A-Changelog. O site do projeto é publicado a partir desite/dist/no destino do GitHub Pages em pushes paramainque alterem seus insumos de build, ou por disparo manual.
Configuração concreta
Os arquivos de fluxo de trabalho reais (.github/workflows/ci.yml,
.github/workflows/release.yml, etc.) estão no repositório. Este diagrama define a
forma canônica que toda configuração futura espelha.
Referências cruzadas autoritativas
pyproject.toml— fonte da verdade da configuração do Ruff / mypy / pytest.scripts/dev/validate_ecosystem.py— o principal portão entre artefatos.scripts/dev/validate_hooks.py— validação estrutural específica de hooks.scripts/dev/chaos_pass.py— varredura adversarial de cada hook configurado.src/apothem/benchmarks/— verificadores do orçamento de runtime por classe.site/content/docs/developer-guide.mdx— o fluxo de trabalho do contribuidor voltado ao operador.CHANGELOG.md— fonte das notas de lançamento.
Convenções com escopo de repositório para runtimes de assistentes
Como o Apothem materializa as convenções operacionais com escopo de repositório — regras, habilidades e definições de trabalhadores delegados — na superfície de instruções nativa de cada assistente (AGENTS.md e seus equivalentes por ferramenta).
Referência
Registro navegável de classes de artefato com caminhos e disposições em disco para regras, comandos, skills, trabalhadores delegados, hooks, servidores MCP, configurações e output-styles.