Skip to content
Apothem
الأمان

حماية الفرع

حماية فرع Apothem على main: قاعدة الحماية الفعّالة، وفحوص الحالة المطلوبة فيها، والفحوص التي تنتظر الإضافة.

فرع main في Apothem محميّ بقاعدة حماية فرع كلاسيكية في GitHub. لا توجد في المستودع أي مجموعات قواعد. تفرض الحماية انضباط مجموعة التغييرات المُعلَن في rules/production-ready-prs.md وتُغذّي فحصَي Branch-Protection و**Code-Review** في OpenSSF Scorecard.

تُسجّل هذه الصفحة الإعدادات الفعّالة بدقّة، كما قُرئت آخر مرة من واجهة برمجة تطبيقات GitHub في 2026-10-07. أي إعداد ينويه المشرف لكنه لم يُطبّقه بعد لا يظهر إلا تحت تغييرات المشرف المعلّقة.

إعدادات الحماية

الإعدادحقل الواجهة البرمجيةالقيمة الفعّالةالأثر
اشتراط طلب سحب قبل الدمجrequired_pull_request_reviews (موجود)✅تصل التغييرات إلى main عبر طلب سحب.
المراجعات الموافِقة المطلوبةrequired_approving_review_count0يُدمَج طلب السحب دون مراجعة موافِقة. راجع نموذج المشرف المنفرد.
إسقاط الموافقات القديمة عند الكوميتات الجديدةdismiss_stale_reviews✅لا تُحتسَب الموافقة الممنوحة قبل دفع جديد.
اشتراط مراجعة من Code Ownersrequire_code_owner_reviews❌تفعيل هذا قبل انضمام مشرف ثانٍ يُوقِع طلبات سحب المشرف المنفرد في انسداد.
اشتراط الموافقة على أحدث دفع قابل للمراجعةrequire_last_push_approval❌يشترط GitHub أن تأتي تلك الموافقة من شخص غير الذي أجرى الدفع، وهو ما لا يستطيع المشرف المنفرد توفيره.
اشتراط نجاح فحوص الحالةrequired_status_checks✅يجب أن تنجح السياقات الـ 12 المسرودة تحت فحوص الحالة المطلوبة.
اشتراط أن تكون الفروع مُحدَّثة قبل الدمجrequired_status_checks.strict❌يمكن دمج طلب سحب عندما تكون فحوصه المطلوبة قد نجحت مقابل main أقدم. ثم تختبر سِيَر العمل التي تعمل عند الدفع إلى main النتيجةَ المدموجة.
اشتراط حلّ المحادثات قبل الدمجrequired_conversation_resolution✅تحجب خيوط المراجعة المفتوحة الدمج.
اشتراط كوميتات موقَّعةrequired_signatures❌تُوقَّع كوميتات الإصدار محليًا. ينتظر الفرض حتى توثّق وثائق انضمام المساهمين إعداد التوقيع عبر SSH أو GPG.
اشتراط تاريخ خطّيrequired_linear_history✅يُبقي التاريخ العام لـ main خطًّا واحدًا.
قفل الفرعlock_branch❌يقبل main عمليات الدمج.
عدم السماح بتجاوز الإعدادات أعلاهenforce_admins❌لا تُلزِم الإعدادات أعلاه مسؤول المستودع. يستطيع المسؤول الدمج دون الفحوص المطلوبة أو الدفع إلى main مباشرةً.
السماح بالدفع بالقوةallow_force_pushes❌الدفع بالقوة إلى main محظور على الجميع، بمن فيهم المسؤولون.
السماح بالحذفallow_deletions❌لا يستطيع أحد حذف main، بمن فيهم المسؤولون.

نموذج المشرف المنفرد

للمستودع مشرف واحد. ينصّ GitHub على ما يلي: «لا يستطيع مؤلّفو طلبات السحب الموافقة على طلبات السحب الخاصة بهم.» لذلك فإن أي عدد موافقات مطلوب يزيد على 0 سيحجب كل طلب سحب من المشرف. تشترط القاعدة الفعّالة طلب سحب مع 0 موافقات وتترك enforce_admins مُعطَّلًا.

بالنسبة لأي شخص لا يملك صلاحية المسؤول، لا يزال الدمج يتطلّب أن تكون فحوص الحالة المطلوبة خضراء، وأن تكون محادثات المراجعة محلولة، وأن يكون التاريخ خطّيًا. ويبقى الدفع بالقوة وحذف main محظورَين على كل حساب.

عندما ينضمّ مشرف ثانٍ، تكون الإعدادات الأقوى: موافقة مطلوبة واحدة على الأقل، والموافقة على أحدث دفع، ومراجعة CODEOWNERS، وتفعيل enforce_admins. ولا تنطبق مراسم دمج المشرف المنفرد إلا على حماية تشترط موافقةً وتفرضها على المسؤولين.

فحوص الحالة المطلوبة

كلٌّ من هذه السياقات الـ 12 مطلوب، ومصدره GitHub Actions (مُعرِّف التطبيق 15368):

quality / ubuntu-latest / py3.10
quality / ubuntu-latest / py3.11
quality / ubuntu-latest / py3.12
quality / ubuntu-latest / py3.13
quality / ubuntu-latest / py3.14
quality / windows-latest / py3.10
quality / windows-latest / py3.11
quality / windows-latest / py3.12
quality / windows-latest / py3.13
quality / windows-latest / py3.14
coverage
Require Signed-off-by
السياقسير العمل والمهمةكيف يُبلِغ عن حالته في كل طلب سحب
quality / <os> / py<ver> (10)ci.yml، المهمة qualityيعمل ci.yml عندما يمسّ طلب السحب مسار شيفرة أو إعدادات. ويُبلِغ ci-docs-stub.yml عن السياقات نفسها في طلب سحب يقتصر على الوثائق.
coverageci.yml، المهمة coverageمثل quality.
Require Signed-off-bydco.yml، المهمة dcoلا يحمل مُشغِّل طلبات السحب الخاص به مُرشِّح paths، لذا يعمل على كل طلب سحب إلى main.

تعمل خلية الإصدار التمهيدي quality / ubuntu-latest / py3.15 في ci.yml مع continue-on-error وهي غير مطلوبة. ويجوز لأي سير عمل آخر، بما في ذلك CodeQL وScorecard وpip-audit، أن يُبلِغ عن حالة، لكن نتيجته لا تكون شرطًا للدمج ما لم يُضَف سياقه إلى هذه القائمة.

تغييرات المشرف المعلّقة

ينوي المشرف إضافة هذه السياقات الـ 25 إلى القائمة المطلوبة. تُعلِن ترويسة كل سير عمل أن المهمة فحصٌ مطلوب، ولا يحمل مُشغِّل طلبات السحب الخاص به مُرشِّح paths، لذا يعمل على كل طلب سحب إلى main. وإلى أن يُضاف سياقٌ ما، لا يحجب الفشلُ فيه الدمج.

clean-install-gate.yml، 7 سياقات:

installer-shell-compat / ubuntu-latest
installer-shell-compat / macos-latest
installer-shell-compat / windows-latest
clean-install-gate / ubuntu-latest
clean-install-gate / windows-latest
wheel-smoke / ubuntu-latest
wheel-smoke / windows-latest

harness-matrix.yml، 17 سياقًا، سياق matrix (<adapter>) واحد لكل محوّل في مصفوفة المهمة:

matrix (antigravity)
matrix (claude-code)
matrix (codebuddy)
matrix (codex)
matrix (cursor)
matrix (gemini-cli)
matrix (github-copilot)
matrix (glm)
matrix (hermes)
matrix (kimi-code)
matrix (kiro)
matrix (open-claw)
matrix (opencode)
matrix (qwen-code)
matrix (trae)
matrix (windsurf)
matrix (zed)

installer-lint.yml، سياق واحد:

installer-lint

بمجرد أن تصبح سياقات harness-matrix.yml مطلوبة، يضيف تسجيل محوّل جديد سياق matrix (<adapter>)، وتكتسبه القائمة المطلوبة في التغيير نفسه. ويبقى الإعداد «اشتراط أن تكون الفروع مُحدَّثة قبل الدمج» مُعطَّلًا. وعند تطبيق تغيير معلّق، انقله إلى الأقسام الفعّالة أعلاه في التغيير نفسه.

وتيرة التدقيق

يُراجَع هذا الملف في كل تدقيق أمني وعند كل نقطة تفتيش لهندسة الإصدار. الانحراف بين هذا الملف والتهيئة الفعلية لحماية الفرع اكتشافٌ عالي الخطورة. اقرأ التهيئة الفعّالة باستخدام:

gh api repos/ahmed-g-gad/apothem/branches/main/protection
gh api repos/ahmed-g-gad/apothem/rulesets

المراجع

On this page