Skip to content
Apothem
संदर्भ

डिपेंडेंसी पिनिंग मैनिफ़ेस्ट

डिपेंडेंसी घोषणा नीति, जो Python रनटाइम रेंज, डेवलपमेंट टूलिंग, रिलीज़-टूल लॉक फ़ाइलों, और प्रत्येक बिल्ड सतह के लिए अनुमोदित संस्करण निचली सीमाओं को कवर करती है।

Apothem डिपेंडेंसी को कैसे घोषित, पिन, और लॉक करता है, इसके लिए अनुमोदित रुख। श्रोता: योगदानकर्ता और डाउनस्ट्रीम उपभोक्ता जिन्हें पुनरुत्पादनीयता मॉडल समझने की आवश्यकता है।

रुख

Apothem एक Python CLI है जिसमें रनटाइम डिपेंडेंसी का एक छोटा सेट है, साथ ही एक बड़ी डेवलपमेंट, ऑडिट, रिलीज़, और दस्तावेज़ टूलचेन है। रनटाइम डिपेंडेंसी pyproject.toml में रूढ़िवादी निचली सीमाओं का उपयोग करती हैं; वेबसाइट site/package-lock.json को कमिट करती है; GitHub Actions संस्करण टिप्पणियों के साथ अपरिवर्तनीय SHA द्वारा पिन की जाती हैं और Renovate द्वारा अपग्रेड की जाती हैं।

श्रेणीघोषणालॉक नीति
रनटाइम Python डिपेंडेंसीpyproject.toml में [project.dependencies]निचली-सीमा रेंज; कोई कमिट की गई Python रनटाइम लॉक नहीं
डेवलपमेंट / सुरक्षा टूलिंग[project.optional-dependencies] extrasनिचली-सीमा रेंज; CI वर्तमान मेल खाते संस्करण इंस्टॉल करता है
रिलीज़ टूलिंगscripts/release/requirements-build-linux.txtरिलीज़ वर्कफ़्लो के लिए हैश-लॉक; रिलीज़ टूलिंग क्लोज़र से जनरेट किया गया
केवल-CI टूल.github/workflows/*.ymlकेवल वर्कफ़्लो वाले pip टूल सटीक पिन उपयोग करते हैं (pip, bandit, pip-audit, pip-licenses, pyinstaller)
दस्तावेज़ साइटsite/package.jsonsite/package-lock.json कमिट किया गया और npm ci द्वारा उपभोग किया गया
GitHub Actionsसंस्करण टिप्पणियों के साथ SHA-पिन की गई uses: रेफ़रेंसRenovate अपडेट प्रस्तावित करता है; अपवाद action-pinning-exempt: मार्कर रखते हैं

रिलीज़ अनुमोदन

सतहअनुमोदित स्थितिऔचित्य
रनटाइम डिपेंडेंसीवर्तमान निचली सीमाएँ pyproject.toml [project.dependencies] में रहती हैंरिलीज़ से पहले अनुमोदित वर्तमान स्थिर निचली सीमाएँ; कोई ज्ञात रनटाइम CVE अवरोधक नहीं
डेवलपमेंट टूलिंगवर्तमान निचली सीमाएँ pyproject.toml के dev extra में रहती हैंरिलीज़ से पहले अनुमोदित नवीनतम स्थिर निचली सीमाएँ
सुरक्षा टूलिंगवर्तमान निचली सीमाएँ pyproject.toml के security extra में रहती हैंरिलीज़ से पहले अनुमोदित वर्तमान स्कैनर निचली सीमाएँ
रिलीज़ टूलिंगहैश-लॉक किया गया क्लोज़र scripts/release/requirements-build-linux.txt में रहता हैरिलीज़ वर्कफ़्लो --require-hashes के साथ इंस्टॉल करता है; स्थानीय स्क्रिप्ट बदलती डिपेंडेंसी को चुपचाप इंस्टॉल करने के बजाय build के पहले से मौजूद होने की माँग करती हैं
दस्तावेज़ टूलिंगवर्तमान रेंज site/package.json में रहती हैं; सटीक समाधान site/package-lock.json में रहता हैलॉकफ़ाइल रिफ़्रेश के बाद npm outdated कोई बासी दस्तावेज़ डिपेंडेंसी नहीं लौटाता
GitHub Actionsवर्तमान रिलीज़ के लिए मौजूदा SHA पिन बनाए रखे गए; SLSA पुन: प्रयोज्य वर्कफ़्लो प्रलेखित टैग-पिन अपवाद बना रहता हैसार्वजनिक CI पुन: रन हरा है; रिलीज़-सतह की उथल-पुथल से बचने के लिए व्यापक action-मेजर अपग्रेड जानबूझकर डिपेंडेंसी-ऑटोमेशन PR पर छोड़ दिए गए हैं
npm पैकेजिंगकेवल-मैनुअल publish-npm.yml वर्कफ़्लो; कोई स्वचालित रिलीज़ ट्रिगर नहींएकमात्र सार्वजनिक npm पैकेज @ahmed-g-gad/apothem है; प्रकाशन रिलीज़ तत्परता पास होने के बाद चलता है

लॉकिंग

Python लॉक फ़ाइलें योगदानकर्ता द्वारा माँग पर जनरेट की जाती हैं। उन्हें कमिट नहीं किया जाता क्योंकि Apothem का रनटाइम क्लोज़र छोटा है, CLI कई Python माइनर संस्करणों का समर्थन करता है, और CI जानबूझकर नवीनतम मेल खाते टूलिंग संस्करणों का अभ्यास करता है।

# Astral uv:
uv pip install -e ".[dev,security,release]"
uv pip freeze > requirements.dev.lock

# pip-tools:
pip-compile --extra=dev --extra=security --extra=release -o requirements.dev.lock pyproject.toml

# Plain pip:
pip install -e ".[dev,security,release]"
pip freeze > requirements.dev.lock

वेबसाइट अलग है: site/package-lock.json कमिट किया जाता है और CI npm ci का उपयोग करता है, इसलिए रेंडर की गई दस्तावेज़ साइट में एक पुनरुत्पादनीय Node क्लोज़र होता है।

औचित्य

  • Python के लिए रेंज पिन क्यों? CLI एक व्यापक Python मैट्रिक्स का समर्थन करता है और CI को उपयोगकर्ताओं के टकराने से पहले वर्तमान टूलिंग के साथ संगतता समस्याओं को उजागर करना चाहिए।
  • कमिट किया गया Node लॉक क्यों? वेबसाइट एक तैनात स्थिर आर्टिफ़ैक्ट है; लॉकफ़ाइल उस सार्वजनिक सतह के लिए नियतात्मक npm ci बिल्ड देती है।
  • SHA-पिन की गई Actions क्यों? टैग परिवर्तनीय हैं; SHA अपरिवर्तनीय हैं। Renovate पिन की गई SHA को अपडेट करता है, जबकि रिलीज़ गेट किसी भी जानबूझकर रोक को रिकॉर्ड करता है।

On this page