
واجهة سطر أوامر بلغة Python تقوم بإنشاء مستودعات GitHub مع إعدادات افتراضية آمنة — حماية الفروع، Dependabot، فحص الأسرار، وفحص أمني قبل التنفيذ — مطبقة تلقائيًا.
أنشئ مستودعات GitHub مع تطبيق الإعدادات الافتراضية الآمنة، بأمر واحد.
gh-safe-repo create <owner/repo>
حماية الفروع، والوسوم غير القابلة للتغيير، وتقييد Actions، وDependabot، وفحص الأسرار مع حماية الدفع، والإبلاغ الخاص عن الثغرات، كلها مُهيّأة قبل أن تدفع أول commit لك. الأداة نفسها تدقّق وتُصلح المستودعات التي لديك بالفعل، وتفحص الكود المحلي بحثًا عن الأسرار قبل أن يغادر جهازك.
الحالة: سير العمل الأساسي مستقر ومُتحقَّق منه من البداية إلى النهاية، لكن واجهة سطر الأوامر (CLI) لا تزال قيد الصقل. توقّع تغييرات كاسرة عرضية قبل الإصدار 1.0.
--local و--fromتفضّل الإعدادات الافتراضية في GitHub قابلية الاكتشاف على الأمان: المستودع الجديد لا يحتوي على
حماية للفروع، ولا Dependabot، وActions يمكنها الكتابة إلى المستودع
والموافقة على طلبات السحب الخاصة بها. gh-safe-repo يغيّر ذلك، ويعرض عليك
الخطة قبل أن يمسّ أي شيء:
--public لجعله عامًا.كل إعداد قابل للتخصيص. راجع الإعدادات الافتراضية الآمنة للاطلاع على القيم الدقيقة والإعداد لمعرفة كيفية تغييرها.
المتطلبات:
gh CLI مسجّل الدخول (gh auth login)، أو
GITHUB_TOKEN مضبوط في البيئةuv للتثبيت من المصدرPATH
أو يُشغَّل عبر podman/docker؛ وبدون أيٍّ منهما، يُستخدم فاحص regex.دفع الكود باستخدام --local أو --from يتطلب أيضًا بيانات اعتماد git
العادية الخاصة بك لـ GitHub. راجع دفع الكود.
git clone https://github.com/AriESQ/gh-safe-repo
cd gh-safe-repo
uv tool install .
gh-safe-repo --help
للتشغيل دون تثبيت:
uv sync
./gh-safe-repo create <owner/repo>
1. معاينة. لا يقوم --dry-run بإجراء أي استدعاءات لواجهة برمجة التطبيقات (API) ولا ينشئ أي شيء.
$ gh-safe-repo create AriESQ/demo-repo --dry-run
Configuring AriESQ/demo-repo...
Planned Changes
Type Category Setting Value / Note
------ ----------------- -------------------------------------- ----------------------------------------------------------------
ADD repo repository AriESQ/demo-repo
DELETE file readme README.md
UPDATE actions allowed_actions 'all' → 'selected'
UPDATE actions verified_allowed False → True
UPDATE actions sha_pinning_required False → True
UPDATE actions default_workflow_permissions 'write' → 'read'
UPDATE actions can_approve_pull_request_reviews True → False
SKIP branch_protection branch_protection Branch protection requires a public repo or paid GitHub plan
SKIP security dependabot_alerts Requires a public repo or paid GitHub plan
SKIP security secret_scanning Requires a public repo or paid GitHub plan
SKIP security dependabot_security_updates Requires a public repo or paid GitHub plan
SKIP security private_vulnerability_reporting Requires a public repo or paid GitHub plan
SKIP security enable_dependency_graph Requires a public repo or paid GitHub plan
SKIP security enable_secret_scanning_push_protection Requires a public repo or paid GitHub plan
SKIP tag_protection tag_protection Tag protection rulesets require a public repo or paid GitHub plan
7 change(s) to apply, 8 skipped
Dry run — no changes made.
صفوف SKIP هي ما يبدو عليه المستودع الخاص على خطة مجانية. تحتاج تلك الميزات إلى مستودع عام أو خطة مدفوعة، والأداة تُصرّح بذلك بدلًا من الفشل بصمت. راجع قيود خطة GitHub.
2. التطبيق. أزل --dry-run. سترى الخطة نفسها، ثم مطالبة تأكيد (--yes تتخطاها).
gh-safe-repo create AriESQ/demo-repo
3. ابدأ العمل. عند النجاح تحصل على قسم Verified (كل إعداد يُقرأ مرة أخرى من GitHub) ولافتة تحتوي على أوامر جاهزة للصق:
╭─ Done ───────────────────────────────────────────────────╮
│ Repository created successfully! │
│ https://github.com/AriESQ/demo-repo │
│ │
│ Add remote to existing repo: │
│ SSH : git remote add origin [email protected]:AriESQ/… │
│ HTTPS: git remote add origin https://github.com/… │
│ │
│ Clone fresh: │
│ SSH : git clone [email protected]:AriESQ/demo-repo.git │
│ HTTPS: git clone https://github.com/AriESQ/demo-… │
╰──────────────────────────────────────────────────────────╯
بروتوكولك المفضل (gh config get -h github.com git_protocol) مُدرج أولاً.
gh-safe-repo create <owner/repo> # private (default)
gh-safe-repo create <owner/repo> --public # public: branch and tag protection apply
تمت تهيئة المستودع بحيث يوجد فرع افتراضي (تتطلب حماية الفروع
وجود واحد)، ثم يتم حذف ملف README.md المُنشأ تلقائيًا لتبدأ من صفحة بيضاء. اضبط
auto_init = true في الإعدادات للإبقاء عليه. يجب أن يطابق المالك حسابك
المُوثَّق؛ وهذا يحمي من الأخطاء على الأنظمة متعددة الحسابات.
gh-safe-repo create <owner/repo> --local ~/projects/myapp
يفحص الدليل بحثًا عن الأسرار، وينشئ المستودع، ويدفع كل فرع ووسم، ثم يضبط origin وتتبع المنبع في دليلك الأصلي بحيث يعمل git push فورًا. يُترك origin الذي يشير بالفعل إلى مكان آخر دون تغيير، وتخبرك اللافتة بما يجب تشغيله بدلاً من ذلك. بعد ذلك يتم فحص كل فرع ووسم مدفوع مقابل GitHub SHA تلو الآخر. التفاصيل في دفع الكود.
gh-safe-repo create <owner/repo> --from <owner/source>
gh-safe-repo create <owner/pub> --from <owner/priv> --public # scanned thoroughly first
يستنسخ المصدر بكامل سجله، ويفحصه، وينسخه إلى المستودع الجديد، وينسخ الفرع الافتراضي للمصدر ووصفه وموضوعاته. إذا أجهضت العملية عند الفحص، فلن يصل أي كود إلى GitHub.