रिलीज़-रिकवरी रनबुक
योगात्मक रिलीज़ मॉडल के अंतर्गत बीच में विफल होने वाली रिलीज़ के लिए चरण-दर-चरण रिकवरी प्रक्रियाएँ, प्रकाशित इतिहास को दोबारा लिखे बिना।
जब ahmed-g-gad/apothem की कोई vX.Y.Z रिलीज़ बीच में विफल हो जाती है, तब यह
रनबुक एक कार्यशील स्थिति बहाल करता है। यह वही रिलीज़ मॉडल अपनाता है जो
रिलीज़-चक्र रनबुक अपनाता है: एक योगात्मक
मॉडल। प्रत्येक रिलीज़ main पर एक कमिट और एक हस्ताक्षरित, एनोटेटेड टैग जोड़ती
है; टैग पुश रिलीज़ और npm वर्कफ़्लो चलाता है। कुछ भी फ़ोर्स-पुश नहीं किया जाता,
और main का इतिहास कभी दोबारा नहीं लिखा जाता।
प्रकाशित इतिहास स्थायी है। परियोजना द्वारा प्रकाशित हर रिलीज़ टैग, GitHub Release
और npm संस्करण प्रकाशित ही रहता है। npm संस्करण
अपरिवर्तनीय हैं: किसी प्रकाशित name@version को कभी बदला नहीं जा सकता, और जिस
संस्करण संख्या का प्रकाशन वापस लिया गया हो, उसका फिर कभी उपयोग नहीं किया जा
सकता। इसलिए रिकवरी एक नई पैच रिलीज़ के साथ आगे बढ़ती है; वह ऐसी किसी भी चीज़ को
न तो हटाती है और न ही किसी दूसरी ओर पुनः-इंगित करती है जिसे कोई उपयोगकर्ता
पहले ही इंस्टॉल कर चुका हो सकता है।
1. चरण वर्गीकरण
| चरण | क्रिया | विफलता मोड | रिकवरी पथ |
|---|---|---|---|
| 1 | main पर रिलीज़ कमिट उतारें (रिलीज़-चक्र रनबुक का §2.1) | रिलीज़ कमिट पर CI विफल होता है | main पर एक और कमिट के साथ आगे बढ़कर ठीक करें; CI हरा होने तक टैग न करें |
| 2 | हस्ताक्षरित, एनोटेटेड टैग पुश करें | पुश अस्वीकृत होता है, या टैग अहस्ताक्षरित है या गलत कमिट पर है | नीचे §2 |
| 3 | release.yml GitHub Release को बिल्ड, हस्ताक्षरित और प्रकाशित करता है | कोई जॉब विफल होता है, या असेट गायब हैं | नीचे §3 |
| 4 | publish-npm.yml @ahmed-g-gad/apothem को प्रकाशित करता है (उसी टैग पुश पर चलता है) | प्रकाशन विफल होता है | नीचे §3 |
| 5 | Pages और रिपॉज़िटरी मेटाडेटा | साइट या मेटाडेटा पुराना है | नीचे §3 |
प्रत्येक रिकवरी क्रिया idempotent है। इसे एक स्वच्छ स्थिति पर चलाना एक no-op है; इसे एक आंशिक स्थिति पर चलाने से अपेक्षित चरण-पश्चात स्थिति बहाल होती है।
2. टैग रिकवरी
टैग का निदान करें:
git fetch origin --tags
git ls-remote origin refs/tags/vX.Y.Z
git cat-file -t vX.Y.Z # "tag" for an annotated tag
git tag -v vX.Y.Z # signature checkक्या करना है, यह इस पर निर्भर करता है कि टैग से कुछ प्रकाशित हुआ या नहीं:
-
अभी तक कुछ भी प्रकाशित नहीं हुआ (रिलीज़ वर्कफ़्लो अपने publish जॉब से पहले विफल हुआ, और
publish-npm.ymlने प्रकाशित नहीं किया): टैग हटाएँ और उसी कमिट को-a -sके साथ फिर से टैग करें।git push --delete origin vX.Y.Z git tag -d vX.Y.Z git tag -a -s vX.Y.Z -m "vX.Y.Z" <release-commit-sha> git push origin vX.Y.Z -
कुछ भी प्रकाशित हुआ (असेट वाली कोई GitHub Release, या npm संस्करण): टैग को कभी न खिसकाएँ, न हटाएँ, न ही उसका पुनः उपयोग करें।
vX.Y.(Z+1)के साथ आगे बढ़कर ठीक करें।
किसी टैग नाम का किसी भिन्न कमिट के लिए कभी पुनः उपयोग नहीं किया जाता।
3. प्रकाशक रिकवरी
प्रत्येक प्रकाशक को अलग से फिर से प्रयास किया जाता है:
| सतह | निदान | रिकवरी |
|---|---|---|
| रिलीज़ वर्कफ़्लो | gh run view <run-id> --log विफल जॉब का नाम बताता है | gh run rerun <run-id> --failed। Check the plugin version changed with the plugin पर विफलता का अर्थ है कि संस्करण बढ़ाया नहीं गया था: रिलीज़-चक्र रनबुक की विफलता तालिका देखें |
| GitHub Release | gh release view vX.Y.Z --json tagName,isDraft,isPrerelease,assets | publish GitHub Release जॉब फिर से चलाएँ; यह मौजूदा रिलीज़ को संपादित करता है और --clobber के साथ असेट फिर से अपलोड करता है |
| npm | npm view @ahmed-g-gad/apothem version और npx @ahmed-g-gad/[email protected] --version | पैकेज के लिए npm Trusted Publishing की पुष्टि करने के बाद vX.Y.Z के लिए publish-npm.yml फिर से चलाएँ (gh workflow run publish-npm.yml --field tag=vX.Y.Z)। यदि संस्करण पहले से रजिस्ट्री पर है तो वर्कफ़्लो प्रकाशन छोड़ देता है, क्योंकि npm संस्करण अपरिवर्तनीय हैं |
| Pages | gh run list --workflow=publish-static-site.yml --limit=1 और curl -sSI https://apothem.ahmedgad.com/ | publish-static-site.yml फिर से चलाएँ; सत्यापित करें कि CNAME अब भी ahmed-g-gad.github.io पर हल होता है |
| रिपॉज़िटरी मेटाडेटा | gh repo view ahmed-g-gad/apothem --json description,homepageUrl,repositoryTopics,visibility | विवरण, होमपेज और विषयों को यथास्थान पैच करें; रिपॉज़िटरी को कभी फिर से न बनाएँ |
4. रोलबैक
किसी खराब रिलीज़ का रोलबैक उसका सुधार रिलीज़ करके किया जाता है, उसे हटाकर नहीं:
-
mainपर दोषपूर्ण कमिट रिवर्ट करें (एक सामान्य रिवर्ट कमिट)। -
रिलीज़-चक्र रनबुक के अनुसार
vX.Y.(Z+1)जारी करें। -
खराब संस्करण को चिह्नित करें: उसके
CHANGELOG.mdअनुभाग में एक### Yankedनोट जोड़ें, उसके GitHub Release नोट्स को सुधार की ओर इंगित करने के लिए संपादित करें, और npm पर उसे डेप्रिकेट करें:npm deprecate @ahmed-g-gad/[email protected] "Contains <defect>; use X.Y.(Z+1)"
खराब टैग, GitHub Release और npm संस्करण प्रकाशित रहते हैं, ताकि पिन किए गए इंस्टॉल और पुनरुत्पादनीय बिल्ड हल होते रहें। रोलबैक को एक रिलीज़ घटना के रूप में दर्ज करें।
5. रिलीज़-मुखौटा नियम
रिपॉज़िटरी का रिलीज़-मुखौटा नियम (योगदानकर्ता निर्देशों का Release Facade अनुभाग) ऊपर वर्णित योगात्मक मॉडल को व्यक्त करता है: प्रकाशित हर टैग, GitHub Release और npm संस्करण बना रहता है। उसकी केवल-वर्तमान-संस्करण वाली आवश्यकता इस बात पर लागू होती है कि सार्वजनिक सतहें क्या कहती हैं। यह रनबुक किसी प्रकाशित टैग, GitHub Release या npm संस्करण को कभी नहीं हटाता और न ही उसे दोबारा लिखता है।
6. क्रॉस-संदर्भ
- रिलीज़ प्रक्रिया: रिलीज़-चक्र रनबुक।
- रिलीज़ नीति: रिलीज़-इंजीनियरिंग नीति।
- टैग ऑब्जेक्ट और प्रत्येक को सत्यापित करने का तरीका: SECURITY.md का रिलीज़-हस्ताक्षर अनुभाग।
- Pages कॉन्फ़िगरेशन:
site/content/docs/runbooks/pages-enablement.mdx।