مخطّط خط أنابيب CI/CD
خريطة بصرية وتفصيل بالمسارات لمراحل سير عمل البناء والاختبار وفحص الأسلوب والأمن والنشر التي يُشترَط اجتيازها لكلّ تغيير في الشيفرة وكلّ إصدار.
الخريطة البنيوية لسير عمل البناء · التحقّق · النشر الذي يُشترَط اجتيازه لكلّ تغيير في منظومة 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 في هذا المسار: فخطّاف pre-commit الخاص به يعمل في CI ضمن سير عمل Markdown Lint عند تغيّر ملفات Markdown (راجع اصطلاحات Markdown).
- مسار الاختبار — يختبر
pytest tests/hooksبيئة تشغيل الخطّافات عبر مصفوفة الأحداث الكاملة؛ وvalidate_ecosystem.pyهو البوّابة البنيوية الأساسية لاتّساق القِطَع المتقاطعة؛ ويعملchaos_pass.pyفي مهمّة الجودة في CI عند عمليات الدفع وطلبات السحب إلى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.ymlSBOM لكل إصدار موسوم. - مسار النشر — تُشغَّل سير عمل الإصدار عند دفع الوسوم، ويمكن أيضًا إعادة تشغيل ناشِري npm وVS Code يدويًا عبر الإرسال اليدوي لوسم موجود. ويؤكّد التحقّق من الوسم الموقَّع منشأ فرع الإصدار، وتُشتقّ ملاحظات الإصدار من تنسيق Keep-A-Changelog في
CHANGELOG.md. وينشر موقع المشروع منsite/dist/إلى هدف GitHub Pages عند الدفع إلى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 والإعدادات وأنماط الإخراج.