アーキテクチャ
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 モードで型の規律を強制します。frontmatter バリデーターは、ルール、スキル、委任されたワーカー、コマンドのアーティファクトスキーマへの準拠を門にかけます。markdownlint はこのレーンには含まれません。Markdown ファイルが変更されたときに、Markdown Lint ワークフローが CI でその pre-commit フックを実行します(Markdown 規約を参照してください)。
- テストレーン ——
pytest tests/hooksは、フックランタイムを完全なイベントマトリクスに対して実行します。validate_ecosystem.pyは、アーティファクト横断の整合性に対する主要な構造ゲートです。chaos_pass.pyは、mainへのプッシュおよびプルリクエストに対して、CI の品質ジョブ内で(パスフィルター付きで)実行され、劣化した入力のもとでの品質低下を捕捉します。src/apothem/benchmarks/配下のクラス別ベンチマークドライバーは、pytest スイートとmetricsジョブを通じて CI で実行されます。CI での pytest の各フル実行は、bench_install.pyを除くすべてのドライバーを呼び出すtests/unit/test_benchmarks.pyを収集します。metricsジョブはscripts/dev/collect_metrics.pyを実行します。このスクリプトはbench_hooks.py --jsonを実行し、結果をhook_e2e_msとして記録します。bench_tests.pyとbench_install.pyが実際の実行を計測するのは、make benchmarksの下だけです。make benchmarksを実行するワークフローはありません。 - セキュリティレーン ——
ci.yml内の gitleaks が、誤ってコミットされた認証情報を捕捉します。ライセンス監査(license-audit.yml)は、許可リストにない依存関係のライセンスを検出すると失敗します。毎週、および依存関係またはライセンスファイルが変更されたときに実行されます。REUSE ゲート(reuse.yml)はすべての変更で実行され、ファイルにライセンス行がない場合や SPDX 式を解析できない場合に失敗します。release.ymlは、タグ付けされたリリースごとに SBOM を生成します。 - 公開レーン —— リリースワークフローはタグのプッシュによって起動されます。npm と VS Code の公開処理は、既存のタグに対して手動ディスパッチで再実行することもできます。署名済みタグの検証は、リリースブランチの来歴を確認します。リリースノートは
CHANGELOG.mdの Keep-A-Changelog 形式から派生します。プロジェクトのウェブサイトは、そのビルド入力に変更を加えたmainへのプッシュ時、または手動ディスパッチ時に、site/dist/から GitHub Pages のターゲットへ公開されます。
具体的な構成
実際のワークフローファイル(.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—— リリースノートの源。