
Python CLI जो GitHub रिपॉजिटरीज़ को सुरक्षित डिफॉल्ट्स के साथ बनाता है — शाखा सुरक्षा, Dependabot, गुप्त स्कैनिंग, और प्री-फ्लाइट सुरक्षा स्कैनिंग — स्वचालित रूप से लागू।
GitHub रिपॉज़िटरी को सुरक्षित डिफ़ॉल्ट सेटिंग्स के साथ स्वचालित रूप से बनाएं। निर्माण के बाद की पाँच मिनट की सेटिंग्स चेकलिस्ट को एक ही कमांड से बदल देता है।``` gh-safe-repo create <owner/repo>
ब्रांच प्रोटेक्शन, इम्यूटेबल टैग्स, Dependabot, प्रतिबंधित Actions अनुमतियाँ, और push protection के साथ secret scanning — ये सब आपके कोड की पहली लाइन लिखने से पहले ही कॉन्फ़िगर कर दिए जाते हैं।
> **Status:** gh-safe-repo भारी विकास के दौर से गुज़र रहा है। यह मुख्य उपयोग केस — सुरक्षित डिफ़ॉल्ट के साथ एक नया रेपो बनाना — के लिए अच्छी तरह काम करता है, लेकिन CLI विकल्पों को अभी भी उपयोगकर्ता की अपेक्षाओं के अनुरूप बेहतर बनाया जा रहा है। रिलीज़ और CI/CD तय होने तक ब्रेकिंग बदलावों की अपेक्षा करें। ✌️
---
## आपको क्या मिलता है
GitHub के डिफ़ॉल्ट खोजबीन और लचीलेपन के लिए अनुकूलित हैं, सुरक्षा के लिए नहीं: हर नए रेपो में कोई ब्रांच प्रोटेक्शन नहीं, कोई Dependabot नहीं, और ऐसे Actions होते हैं जिनके पास रेपो तक लेखन पहुँच होती है और जो अपने ही पुल रिक्वेस्ट स्वयं स्वीकृत कर सकते हैं।
`gh-safe-repo` यह सब एक ही बार में ठीक कर देता है, और पहले आपको एक योजना दिखाता है:
- **डिफ़ॉल्ट रूप से निजी** — जब आप चाहें कि दुनिया इसे देखे तो `--public` पास करें
- **ब्रांच प्रोटेक्शन** — PR आवश्यक, 1 स्वीकृत समीक्षा, पुरानी समीक्षाएँ खारिज, बातचीत सुलझी हुई, कोई फ़ोर्स पुश नहीं, कोई ब्रांच डिलीशन नहीं
- **इम्यूटेबल टैग्स** — रिलीज़ टैग्स को फिर से लिखा या हटाया नहीं जा सकता
- **Actions लॉकडाउन** — रीड-ओनली टोकन, स्वयं-स्वीकृति देने वाले PR नहीं, SHA-पिन किए गए actions, केवल GitHub-स्वामित्व वाले और सत्यापित प्रकाशक
- **Dependabot चालू** — भेद्यता अलर्ट के साथ-साथ स्वचालित फ़िक्स PR
- **push protection के साथ secret scanning** — समर्थित सीक्रेट्स वाले कमिट ब्लॉक कर दिए जाते हैं
- **निजी भेद्यता रिपोर्टिंग** — शोधकर्ता सार्वजनिक किए बिना आपसे संपर्क कर सकते हैं
- **प्री-फ़्लाइट सीक्रेट स्कैन** — मौजूदा कोड पुश करते समय (`--local` / `--from`), GitHub तक कुछ भी पहुँचने से पहले आपका वर्किंग ट्री और git इतिहास स्थानीय रूप से स्कैन किए जाते हैं
- **ऑप्ट-इन अतिरिक्त सुविधाएँ** — wiki, projects, और issues को तब तक अछूता छोड़ दिया जाता है जब तक आप उन्हें प्रबंधित करने के लिए न कहें (कॉन्फ़िग में `has_wiki = false`)
सब कुछ कॉन्फ़िगर करने योग्य है। सटीक सेटिंग्स के लिए [Safe defaults in full](#safe-defaults-in-full) देखें और उन्हें बदलने के तरीके के लिए [Configuration](#configuration) देखें।
## आवश्यकताएँ
- **Python 3.10+**
- **[`gh` CLI](https://cli.github.com/)** प्रमाणित (`gh auth login`), **या** आपके एनवायरनमेंट में `GITHUB_TOKEN` सेट हो
- सोर्स से इंस्टॉलेशन के लिए **[`uv`](https://docs.astral.sh/uv/)**
- **truffleHog v3** *(वैकल्पिक)* — प्री-फ़्लाइट स्कैनर द्वारा उपयोग किया जाता है; PATH से स्वतः पहचाना जाता है या podman/docker के माध्यम से चलाया जाता है, और यदि दोनों में से कोई भी मौजूद न हो तो regex फ़ॉलबैक के साथ
`--local` या `--from` के साथ कोड पुश करने के लिए अतिरिक्त रूप से GitHub के लिए आपके सामान्य git क्रेडेंशियल्स की आवश्यकता होती है — देखें [Working from local or existing code](#working-from-local-or-existing-code)।
## इंस्टॉल```bash
git clone https://github.com/AriESQ/gh-safe-repo
cd gh-safe-repo
uv tool install .
gh-safe-repo --help
यह gh-safe-repo को uv के tool environment में install करता है और इसे आपके PATH में जोड़ता है।
इसे install किए बिना चलाने के लिए:```bash uv sync # creates .venv ./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 पंक्तियाँ एक free-plan private repo हैं: उन सुविधाओं के लिए public repo या paid plan चाहिए। कुछ भी चुपचाप विफल नहीं होता — देखें GitHub plan limitations।
2. Apply. --dry-run के बिना वही कमांड। आपको वही plan मिलता है, फिर एक confirmation prompt (--yes इसे छोड़ देता है):```bash
gh-safe-repo create AriESQ/demo-repo
**3. काम शुरू करें।** सफल होने पर आपको रेपो URL और पेस्ट करने के लिए तैयार रिमोट कमांड मिलते हैं:```
╭─ 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
एक सादा `create` रेपो को इनिशियलाइज़ करता है ताकि एक डिफ़ॉल्ट ब्रांच मौजूद हो (ब्रांच प्रोटेक्शन को एक की आवश्यकता होती है), फिर ऑटो-जनरेटेड `README.md` को हटा देता है ताकि आप साफ़ शुरुआत कर सकें। इसे रखने के लिए कॉन्फ़िग में `auto_init = true` सेट करें।
### एक मौजूदा लोकल प्रोजेक्ट को पुश करें```bash
gh-safe-repo create <owner/repo> --local ~/projects/myapp
यह पहले सीक्रेट्स के लिए डायरेक्टरी को स्कैन करता है, रेपो बनाता है, सभी ब्रांच और टैग पुश करता है, फिर आपकी मूल डायरेक्टरी में origin और अपस्ट्रीम ट्रैकिंग को वायर करता है ताकि git push तुरंत काम करे। कहीं और इंगित करने वाला मौजूदा origin अछूता रहता है; एक चेतावनी और सफलता बैनर आपको बताते हैं कि इसके बजाय चलाने के लिए सटीक git push -u origin <branch>:<branch> क्या है। देखें Working from local or existing code।