रिलीज़ रिकवरी रनबुक
जब कोई रिलीज़ अनुक्रम बीच में ही विफल हो जाता है तब रिपॉज़िटरी को कार्यशील स्थिति में बहाल करने की रिकवरी प्रक्रियाएँ, चरण-दर-चरण निदान के साथ।
यह रनबुक ahmed-g-gad/apothem को एक कार्यशील स्थिति में बहाल करता है जब कोई
यथास्थान क्लीन-स्लेट रिलीज़ अनुक्रम बीच में ही विफल हो जाता है। रिलीज़ के दौरान
सार्वजनिक रिपॉज़िटरी को न तो हटाया जाता है और न ही फिर से बनाया जाता है। रिकवरी
रिलीज़-विशिष्ट इतिहास सुरक्षा टैग, मेंटेनर के स्थानीय क्लोन, और डाउनस्ट्रीम
पैकेज मैनेजर स्थिति पर निर्भर करती है।
1. चरण वर्गीकरण
| चरण | क्रिया | विफलता मोड | रिकवरी पथ |
|---|---|---|---|
| 1 | इतिहास सुरक्षा टैग को कैप्चर और पुश करें | टैग गायब है, अहस्ताक्षरित है, या गलत ग्राफ़ की ओर इंगित करता है | main को स्थानांतरित करने से पहले स्क्वैश-पूर्व मर्ज बिंदु से टैग को फिर से बनाएँ |
| 2 | CI, ऑडिट किले, पैकेज स्थिति, और चेंजलॉग की पुष्टि करें | कोई भी गेट विफल होता है | रुकें; स्थानीय रूप से ठीक करें; main को स्थानांतरित न करें |
| 3 | main को हस्ताक्षरित एकल रिलीज़ कमिट पर स्थानांतरित करें | force-with-lease विफल होता है, कमिट अहस्ताक्षरित है, या कमिट संदेश गलत है | स्थानीय main को अभिप्रेत हस्ताक्षरित कमिट पर रीसेट करें और एक नए lease के साथ फिर से प्रयास करें |
| 4 | GitHub Release, Pages, npm, और मेटाडेटा प्रकाशित करें | कोई प्रकाशक या सत्यापन सतह विफल होती है | रिलीज़ कमिट को बनाए रखें; विफलता दर्ज करने के बाद केवल विफल प्रकाशक को फिर से चलाएँ |
प्रत्येक रिकवरी क्रिया निष्क्रिय-दोहराव (idempotent) है। इसे एक स्वच्छ स्थिति पर चलाना एक no-op है; इसे एक आंशिक स्थिति पर चलाना अपेक्षित चरण-पश्चात स्थिति को बहाल करता है।
2. सुरक्षा टैग रिकवरी
किसी भी इतिहास पुनर्लेखन से पहले सुरक्षा टैग की पुष्टि करें:
git fetch origin --tags
git show --summary --show-signature <history-safety-tag>
git merge-base --is-ancestor origin/main <history-safety-tag>अपेक्षित: टैग मौजूद है, टैग के हस्ताक्षरित होने पर हस्ताक्षर सत्यापन सफल होता है,
और स्क्वैश-पूर्व पूरा ग्राफ़ टैग से पहुँच योग्य है। यदि टैग स्थानीय रूप से गायब
है लेकिन रिमोट पर मौजूद है, तो उसे फ़ेच करें। यदि यह रिमोट पर गायब है, तो रिलीज़
रोकें और main को छूने से पहले इसे फिर से बनाएँ:
git tag -s <history-safety-tag> <pre-squash-commit>
git push origin <history-safety-tag>3. मुख्य शाखा रिकवरी
सार्वजनिक main स्थिति का निदान करें:
gh api repos/ahmed-g-gad/apothem/commits/main \
--jq '.sha, .commit.message, .commit.verification.verified, .commit.verification.reason'कटओवर के बाद अपेक्षित: संदेश ठीक release: Apothem <release-version> है और
verification.verified true है।
यदि force-with-lease पुश GitHub को बदलने से पहले विफल हुआ, तो रिमोट को वैसे ही छोड़ दें, उसे फ़ेच करें, हस्ताक्षरित रिलीज़ कमिट को स्थानीय रूप से फिर से बनाएँ, और lease के मिलान के बाद ही फिर से प्रयास करें:
git fetch origin main
git push --force-with-lease=main:<expected-remote-sha> origin mainयदि पुश एक अहस्ताक्षरित या असत्यापित कमिट के साथ उतरा, तो स्थानीय हस्ताक्षर कॉन्फ़िगरेशन ठीक करें, उसी ट्री से रिलीज़ कमिट फिर से बनाएँ, और lease के साथ फिर से force-push करें। सुरक्षा टैग को न हटाएँ।
4. प्रकाशक रिकवरी
GitHub रिलीज़ कमिट सत्यापित होने के बाद प्रत्येक प्रकाशक को स्वतंत्र रूप से फिर से प्रयास किया जाता है:
| सतह | निदान | रिकवरी |
|---|---|---|
| GitHub Release | gh release view <release-tag> --json tagName,isDraft,isPrerelease,assets | केवल एक विकृत ड्राफ़्ट हटाएँ; अन्यथा gh release upload --clobber के साथ गायब असेट अपलोड करें |
| रिलीज़ टैग | git ls-remote origin refs/tags/<release-tag> और git tag -v <release-tag> | यदि टैग गायब है या अहस्ताक्षरित है तो उसी SHA से -a -s के साथ फिर से टैग करें; किसी भिन्न कमिट के लिए कभी टैग नाम का पुनः उपयोग न करें |
| npm | npm view @ahmed-g-gad/apothem version और npx @ahmed-g-gad/apothem@<version> --version | @ahmed-g-gad/apothem के लिए npm Trusted Publishing की पुष्टि करने के बाद <release-tag> के लिए publish-npm.yml फिर से चलाएँ |
| 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 पर हल होता है |
| GitHub मेटाडेटा | gh repo view ahmed-g-gad/apothem --json description,homepageUrl,repositoryTopics,visibility | विवरण, होमपेज, और विषयों को यथास्थान पैच करें; रिपॉज़िटरी को फिर से न बनाएँ |
5. रोलबैक
रोलबैक अंतिम उपाय है। पहले लक्षित प्रकाशक रिकवरी को प्राथमिकता दें। यदि एकल
रिलीज़ कमिट को वापस लेना हो, तो सुरक्षा टैग से main बहाल करें:
git fetch origin --tags
git switch main
git reset --hard <history-safety-tag>
git push --force-with-lease origin mainरोलबैक के बाद, CI फिर से चलाएँ, यदि GitHub ड्रिफ़्ट की रिपोर्ट करता है तो शाखा सुरक्षा फिर से लागू करें, और रोलबैक को रिलीज़-अवरोधक घटना के रूप में दर्ज करें। रिलीज़ टैग को केवल तभी बनाए रखें जब रिलीज़ आर्टिफ़ैक्ट वैध रहें; अन्यथा फिर से प्रयास करने से पहले विकृत रिलीज़ और टैग हटाएँ।
6. क्रॉस-संदर्भ
- Pages कॉन्फ़िगरेशन:
site/content/docs/runbooks/pages-enablement.mdx। - रिलीज़ प्रक्रिया:
site/content/docs/runbooks/release-cycle.mdx। - पैकेजिंग रेसिपी:
packaging/README.md। - रिकवरी एंकर: रिलीज़-विशिष्ट इतिहास सुरक्षा टैग।