इस प्रोजेक्ट के बारे में

Extra CODEOWNERS उन टीमों के लिए एक सेल्फ-होस्टेड GitHub App है जो CODEOWNERS पॉलिसी के तहत नियमित पुल रिक्वेस्ट (pull requests) को अप्रूव करने के लिए ऑटोमेशन चाहते हैं। यह एक आवश्यक चेक (required check) प्रकाशित करता है जो या तो मानव CODEOWNER अप्रूवल या स्पष्ट रूप से नामांकित GitHub App से अप्रूवल स्वीकार करता है। एक रिपॉजिटरी यह विकल्प भी चुन सकती है कि वह किसी पात्र पुल-रिक्वेस्ट लेखक को उस चेक के लिए मानव CODEOWNER प्रमाण के रूप में माने। लोग और टीमें GitHub की मानक CODEOWNERS फ़ाइल में रहते हैं, जबकि एक अलग पॉलिसी यह बताती है कि कौन से Apps किन मालिकों और पाथ (paths) को कवर कर सकते हैं। यह प्रोजेक्ट इसलिए बनाया गया है क्योंकि GitHub का 'Require review from Code Owners' नियम लोगों और टीमों को समझता है, लेकिन किसी GitHub App को उनकी जगह लेने की अनुमति नहीं देता है। यदि Stampbot जैसा कोई App पहले से जानता है कि पुल रिक्वेस्ट नियमित है, तब भी GitHub मानव कोड ओनर की प्रतीक्षा करता है। Extra CODEOWNERS उस एकल निर्णय को एक चेक से बदल देता है। यह प्रत्येक अलग प्रभावी ओनर सेट का अलग-अलग मूल्यांकन करता है। स्वामित्व वाले पाथ द्वारा प्रतिनिधित्व किए गए प्रत्येक ओनर सेट को पास होना चाहिए। एक पुल रिक्वेस्ट एक ओनर सेट के लिए मानव अप्रूवल और दूसरे के लिए App अप्रूवल का उपयोग कर सकती है। एक App अप्रूवल केवल तभी मान्य होता है जब संगठन ने उस सटीक App पहचान को नामांकित किया हो, रिपॉजिटरी ने इसे चुना हो, डेलीगेशन बदले हुए पाथ और प्रभावी CODEOWNER को कवर करता हो, आवश्यक लेबल मौजूद हों, अप्रूवल वर्तमान पुल-रिक्वेस्ट हेड पर लागू होता हो, और कोई संगठन या अंतर्निहित गार्डरेल पाथ को केवल मानव-मात्र (human-only) न बनाता हो। एक पुल रिक्वेस्ट जिसमें डेलीगेटेड और नॉन-डेलीगेटेड ओन्ड पाथ मिश्रित हों, उसे अभी भी प्रत्येक नॉन-डेलीगेटेड ओनर सेट के लिए मानव कवरेज की आवश्यकता होती है। जिस पाथ में कोई प्रभावी CODEOWNERS मैच नहीं होता, वहां कोई कोड-ओनर आवश्यकता नहीं बनती, हालांकि सामान्य अप्रूवल और अन्य नियम अभी भी लागू रहते हैं। GitHub सामान्य पुल-रिक्वेस्ट नियमों को बरकरार रखता है: न्यूनतम अप्रूवल संख्या, पुराने रिव्यू का प्रबंधन, हस्ताक्षरित कमिट्स, और असंबंधित आवश्यक चेक। Extra CODEOWNERS का उद्देश्य केवल 'Require review from Code Owners' को बदलना है। GitHub का सार्वजनिक कॉन्ट्रैक्ट यह नहीं बताता कि क्या किसी थर्ड-पार्टी App रिव्यू को सामान्य अप्रूवल न्यूनतम में गिना जाता है, इसलिए इस संयोजन का परीक्षण किसी डिस्पोजेबल रिपॉजिटरी में किया जाना चाहिए। एक नॉन-जीरो न्यूनतम के लिए अभी भी मानव की आवश्यकता हो सकती है, भले ही Extra CODEOWNERS चेक सफल हो जाए। यह App रिव्यू सबमिट नहीं करता है, पुल रिक्वेस्ट मर्ज नहीं करता है, किसी अन्य App को एक्सेस नहीं देता है, या CODEOWNERS को एडिट नहीं करता है। यह GitHub साक्ष्यों को पढ़ता है और एक Check Run प्रकाशित करता है। चेक को पॉलिसी परिणाम के रूप में पढ़ा जाना चाहिए, न कि रिव्यू के रूप में। Extra CODEOWNERS GitHub के चेक क्षेत्र में दिखाई देता है, जबकि सामान्य अप्रूवल संख्या रिव्यू क्षेत्र में दिखाई देती है। टीमों को आवश्यकता पड़ने पर सामान्य न्यूनतम-रिव्यू नियम रखना चाहिए। यह चेक एसिंक्रोनस (asynchronous) है। जब कोई अप्रूवल खारिज या बदला जाता है, तो पिछला सक्सेस तब तक दिखाई देता है जब तक GitHub इवेंट डिलीवर नहीं करता और App चेक को रीसेट और पुन: मूल्यांकित नहीं करता। रिकॉन्सिलिएशन छूटे हुए डिलीवरी को ठीक करता है, लेकिन यह तत्काल निरसन तंत्र नहीं है। जिस सीमा पर उस पुराने-सक्सेस विंडो को सहन नहीं किया जा सकता, वहां GitHub के नेटिव कोड-ओनर नियम को रखा जाना चाहिए। डेलीगेशन को दो पॉलिसी स्कोप में विभाजित किया गया है। CODEOWNERS तय करता है कि कौन से लोग या टीमें प्रत्येक पाथ के मालिक हैं। संगठन पॉलिसी तय करती है कि कौन से Apps पूरी तरह से विश्वसनीय हैं, साथ ही वे पाथ जिन्हें कोई App कवर नहीं कर सकता। रिपॉजिटरी पॉलिसी तय करती है कि उस रिपॉजिटरी में कौन सा नामांकित App किस ओनर और पाथ को कवर कर सकता है। रिपॉजिटरी पॉलिसी संगठन पॉलिसी को सीमित कर सकती है, लेकिन यह किसी App को नामांकित नहीं कर सकती या संगठन गार्डरेल को कमजोर नहीं कर सकती। रिपॉजिटरी पॉलिसी एक TOML है जिसमें schema_version, enabled, और delegations (जिसमें app, paths, for_owners, और required_labels शामिल हैं) होते हैं। app वैल्यू संगठन पॉलिसी की apps टेबल से एक एलियास (alias) है, जो एलियास को App की अपरिवर्तनीय न्यूमेरिक ID, पब्लिक स्लग और बॉट-यूज़र ID से जोड़ती है। उदाहरण पॉलिसी फ़ाइलें examples/policy के तहत प्रदान की गई हैं, और कॉन्फ़िगरेशन गाइड दोनों स्कोप, पाथ मैचिंग, लेबल, अंतर्निहित प्रोटेक्टेड फ़ाइलों और एक इनसिक्योर एस्केप हैच को कवर करती है। स्थानीय निरीक्षण के लिए, Bash, Git और mise इंस्टॉल होने पर रिपॉजिटरी को क्लोन करके और mise trust, mise install, mise run bootstrap, और mise run test चलाकर एक क्लीन चेकआउट चलाया जा सकता है। README सलाह देता है कि mise trust से पहले mise.toml पढ़ें क्योंकि वह कमांड एक स्थानीय ट्रस्ट निर्णय रिकॉर्ड करती है। एक सफल रन टेस्ट सूट के पास होने के साथ समाप्त होता है। यह GitHub App को रजिस्टर नहीं करता है या लाइव GitHub कॉन्ट्रैक्ट्स को साबित नहीं करता है। टेस्ट रिपॉजिटरी में चेक प्रकाशित करने के लिए, first-check ट्यूटोरियल प्रदान किया गया है। जहां भी महत्वपूर्ण हो, नेटिव कोड-ओनर नियमों को सक्षम रखना चाहिए। अल्फा इमेज और चार्ट केवल शैडो-मोड टेस्टिंग के लिए हैं और उन्हें डाइजेस्ट द्वारा पिन किया जाना चाहिए। यह प्रोजेक्ट प्री-रिलीज़ है। अल्फा इमेज और चार्ट केवल नॉन-रिक्वायर्ड, शैडो-मोड टेस्टिंग के लिए हैं और उन्हें प्रोडक्शन मर्ज लागू नहीं करना चाहिए। मुख्य (main) और उसके sha और sha256 साथी टैग जैसी लीगेसी प्रीव्यू इमेज समर्थित नहीं हैं और परिनियोजन (deployment) के लिए असुरक्षित हैं क्योंकि वे अपरिवर्तनीय रिलीज़ पाइपलाइन से पहले की हैं। प्रोजेक्ट स्टेटस दस्तावेज़ अलग करता है कि आज क्या उपयोग करने योग्य है और क्या अभी भी समर्थित रिलीज़ को रोकता है। दस्तावेज़ीकरण में प्रोजेक्ट स्टेटस, नेटिव CODEOWNERS तुलना, थ्रेट मॉडल, डेवलपमेंट इंस्टॉलेशन ट्यूटोरियल, कॉन्फ़िगरेशन गाइड, ट्रबलशूटिंग गाइड, परिनियोजन और ऑपरेशंस गाइड, रेसिपिएंट नोटिस बंडल, आर्किटेक्चर और मेंटेनर गाइड, और एक कंट्रीब्यूटर गाइड शामिल हैं। पूरा मैनुअल Read the Docs पर है। प्रोजेक्ट पॉलिसियाँ सपोर्ट, प्राइवेट वल्नरेबिलिटी रिपोर्टिंग, OpenSSL CVEs और VEX, गवर्नेंस, चेंजलॉग और Apache License 2.0 को कवर करती हैं। बैज सेट CI, प्रॉपर्टी टेस्टिंग, कवरेज, CodeQL, OpenSSF Scorecard, दस्तावेज़ीकरण, Python 3.12 से 3.14, और Apache-2.0 लाइसेंसिंग को इंगित करता है।