इसे छोड़कर कंटेंट पर जाएं

Settings Enforcement

.github/workflows/enforce-repo-settings.yml पर एनफ़ोर्समेंट वर्कफ़्लो एक रीयूज़ेबल, आइडेम्पोटेंट वर्कफ़्लो है जो वांछित रिपॉजिटरी स्थिति की तुलना वर्तमान स्थिति से करता है और किसी भी ड्रिफ्ट को पैच करता है। डाउनस्ट्रीम रिपॉजिटरी इसे एक कॉलर वर्कफ़्लो के माध्यम से कॉल करती हैं। Docs-control इसे .github/config/repo-settings.json पर पुश करने पर सीधे भी चलाता है।

  • workflow_call — डाउनस्ट्रीम कॉलर वर्कफ़्लो द्वारा लागू (हर 6 घंटे में निर्धारित, कॉन्फ़िग पुश पर, या मैन्युअल डिस्पैच)
  • push — जब docs-control की main ब्रांच पर repo-settings.json बदलता है तब फ़ायर होता है

समानांतर निष्पादन

Section titled “समानांतर निष्पादन”

एनफ़ोर्समेंट दो रीयूज़ेबल वर्कफ़्लो में विभाजित है जो कॉलर में समानांतर नौकरियों के रूप में चलते हैं, प्रत्येक के पास अपना न्यूनतम-विशेषधिकार (least-privilege) टोकन होता है:

  • enforce-repo-settings.yml REPO_SETTINGS_TOKEN (Administration R/W, Pages R/W, Contents Read, Metadata Read) का उपयोग करता है
  • sync-managed-files.yml REPO_SYNC_TOKEN (Contents R/W, Issues R/W, Pull Requests R/W, Metadata Read) का उपयोग करता है

यह पृष्ठ सेटिंग्स एनफ़ोर्समेंट वर्कफ़्लो को कवर करता है। मैनेज्ड फ़ाइलों के वर्कफ़्लो के लिए फ़ाइल सिंक्रनाइज़ेशन देखें।

प्रत्येक चरण आइडेम्पोटेंट है: यह वांछित स्थिति की तुलना वर्तमान स्थिति से करता है और केवल तभी परिवर्तन करता है जब ड्रिफ्ट का पता चलता है।

चरण 1: सत्यापित करें (Validate)

Section titled “चरण 1: सत्यापित करें (Validate)”

GitHub API (5 पुनः प्रयास प्रयासों के साथ) के माध्यम से docs-control से केंद्रीय कॉन्फ़िगरेशन प्राप्त करता है। सत्यापित करता है कि jq और gh उपलब्ध और प्रमाणित हैं। यदि कॉन्फ़िग मान खाली है तो homepage URL को स्वचालित रूप से कंप्यूट करता है।

managed_files.source_repo की तुलना github.repository से करके यह पता लगाता है कि वर्कफ़्लो स्वयं सोर्स रिपॉजिटरी पर चल रहा है या नहीं। यदि स्वयं पर चल रहा है, तो चरण 4 के लिए self_contexts ओवरराइड सक्रिय हो जाता है।

चरण 2: रिपॉजिटरी सेटिंग्स लागू करें

Section titled “चरण 2: रिपॉजिटरी सेटिंग्स लागू करें”

GET /repos/{owner}/{repo} के माध्यम से रिपॉजिटरी की वर्तमान सेटिंग्स के खिलाफ repository ऑब्जेक्ट में प्रत्येक कुंजी की तुलना करता है। केवल उन कुंजियों को शामिल करते हुए एक पैच ऑब्जेक्ट बनाता है जो ड्रिफ्ट हुई हैं और इसे PATCH /repos/{owner}/{repo} के माध्यम से लागू करता है।

चरण 3: Actions अनुमतियां लागू करें

Section titled “चरण 3: Actions अनुमतियां लागू करें”

GET /repos/{owner}/{repo}/actions/permissions/workflow के माध्यम से वर्तमान Actions वर्कफ़्लो अनुमतियों के खिलाफ actions_permissions ऑब्जेक्ट (डिफ़ॉルト वर्कफ़्लो अनुमतियां, PR रिव्यू अनुमोदन) की तुलना करता है। यदि कोई कुंजी ड्रिफ्ट हुई है तो PUT के माध्यम से अपडेट करता है।

चरण 4: ब्रांच प्रोटेक्शन लागू करें

Section titled “चरण 4: ब्रांच प्रोटेक्शन लागू करें”

branch_protection एरे पर दोहराता है। प्रत्येक ब्रांच के लिए:

  1. यदि स्वयं पर चल रहा है, तो self_contexts को contexts में बदल देता है
  2. पेलोड से self_contexts को हटा देता है (GitHub API का हिस्सा नहीं)
  3. GET /repos/{owner}/{repo}/branches/{branch}/protection के माध्यम से वर्तमान सुरक्षा प्राप्त करता है
  4. तुलना करता है: enforce_admins, required_status_checks (strict + contexts), required_pull_request_reviews, restrictions, और बुलियन फ़्लैग (required_linear_history, allow_force_pushes, allow_deletions, block_creations, required_conversation_resolution, lock_branch, allow_fork_syncing)
  5. यदि किसी भी ड्रिफ्ट का पता चलता है तो PUT के माध्यम से सुरक्षा नियम बनाता या अपडेट करता है

चरण 5: टॉपिक्स लागू करें

Section titled “चरण 5: टॉपिक्स लागू करें”

GET /repos/{owner}/{repo}/topics के माध्यम से रिपॉजिटरी के वर्तमान टॉपिक्स के खिलाफ topics एरे की तुलना करता है। यदि ड्रिफ्ट हुआ है तो PUT के माध्यम से रिप्लेस करता है।

चरण 6: Pages लागू करें

Section titled “चरण 6: Pages लागू करें”

जांचता है कि क्या GitHub Pages GET /repos/{owner}/{repo}/pages के माध्यम से सक्षम है। यदि नहीं मिला (404), तो कॉन्फ़िगर किए गए build_type के साथ Pages सक्षम करता है। यदि पाया गया लेकिन build_type ड्रिफ्ट हो गया है, तो इसे PUT के माध्यम से अपडेट करता है。

चरण 7: सत्यापन करें (Verify)

Section titled “चरण 7: सत्यापन करें (Verify)”

GitHub API के माध्यम से सभी सेटिंग्स को फिर से पढ़ता है और वांछित स्थिति से उनकी तुलना करता है। रिपॉजिटरी सेटिंग्स, Actions अनुमतियों, ब्रांच प्रोटेक्शन (बुलियन फ़्लैग सहित), और Pages बिल्ड प्रकार को सत्यापित करता है। यदि लागू करने के चरणों के बाद कोई सेटिंग मेल नहीं खाती है तो वर्कफ़्लो विफल हो जाता है।

अपरिवर्तनीय वर्कफ़्लो पिंस रोल-फ़ॉरवर्ड (Immutable Workflow Pins Roll-Forward)

Section titled “अपरिवर्तनीय वर्कफ़्लो पिंस रोल-फ़ॉरवर्ड (Immutable Workflow Pins Roll-Forward)”

जब docs-control में रीयूज़ेबल वर्कफ़्लो बदलते हैं, तो .github/workflows/update-governed-workflow-pins.yml मैन्युअल हस्तक्षेप के बिना कॉलर वर्कफ़्लो में कमिट-पिन किए गए SHAs को निश्चयात्मक रूप से अपडेट करने के लिए scripts/update-governed-workflow-pins.sh को ट्रिगर करता है।