Skip to content
Apothem
रनबुक

रिलीज़-रिकवरी रनबुक

योगात्मक रिलीज़ मॉडल के अंतर्गत बीच में विफल होने वाली रिलीज़ के लिए चरण-दर-चरण रिकवरी प्रक्रियाएँ, प्रकाशित इतिहास को दोबारा लिखे बिना।

जब ahmed-g-gad/apothem की कोई vX.Y.Z रिलीज़ बीच में विफल हो जाती है, तब यह रनबुक एक कार्यशील स्थिति बहाल करता है। यह वही रिलीज़ मॉडल अपनाता है जो रिलीज़-चक्र रनबुक अपनाता है: एक योगात्मक मॉडल। प्रत्येक रिलीज़ main पर एक कमिट और एक हस्ताक्षरित, एनोटेटेड टैग जोड़ती है; टैग पुश रिलीज़ और npm वर्कफ़्लो चलाता है। कुछ भी फ़ोर्स-पुश नहीं किया जाता, और main का इतिहास कभी दोबारा नहीं लिखा जाता।

प्रकाशित इतिहास स्थायी है। परियोजना द्वारा प्रकाशित हर रिलीज़ टैग, GitHub Release और npm संस्करण प्रकाशित ही रहता है। npm संस्करण अपरिवर्तनीय हैं: किसी प्रकाशित name@version को कभी बदला नहीं जा सकता, और जिस संस्करण संख्या का प्रकाशन वापस लिया गया हो, उसका फिर कभी उपयोग नहीं किया जा सकता। इसलिए रिकवरी एक नई पैच रिलीज़ के साथ आगे बढ़ती है; वह ऐसी किसी भी चीज़ को न तो हटाती है और न ही किसी दूसरी ओर पुनः-इंगित करती है जिसे कोई उपयोगकर्ता पहले ही इंस्टॉल कर चुका हो सकता है।

1. चरण वर्गीकरण

चरणक्रियाविफलता मोडरिकवरी पथ
1main पर रिलीज़ कमिट उतारें (रिलीज़-चक्र रनबुक का §2.1)रिलीज़ कमिट पर CI विफल होता हैmain पर एक और कमिट के साथ आगे बढ़कर ठीक करें; CI हरा होने तक टैग न करें
2हस्ताक्षरित, एनोटेटेड टैग पुश करेंपुश अस्वीकृत होता है, या टैग अहस्ताक्षरित है या गलत कमिट पर हैनीचे §2
3release.yml GitHub Release को बिल्ड, हस्ताक्षरित और प्रकाशित करता हैकोई जॉब विफल होता है, या असेट गायब हैंनीचे §3
4publish-npm.yml @ahmed-g-gad/apothem को प्रकाशित करता है (उसी टैग पुश पर चलता है)प्रकाशन विफल होता हैनीचे §3
5Pages और रिपॉज़िटरी मेटाडेटासाइट या मेटाडेटा पुराना हैनीचे §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 Releasegh release view vX.Y.Z --json tagName,isDraft,isPrerelease,assetspublish GitHub Release जॉब फिर से चलाएँ; यह मौजूदा रिलीज़ को संपादित करता है और --clobber के साथ असेट फिर से अपलोड करता है
npmnpm 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 संस्करण अपरिवर्तनीय हैं
Pagesgh 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. रोलबैक

किसी खराब रिलीज़ का रोलबैक उसका सुधार रिलीज़ करके किया जाता है, उसे हटाकर नहीं:

  1. main पर दोषपूर्ण कमिट रिवर्ट करें (एक सामान्य रिवर्ट कमिट)।

  2. रिलीज़-चक्र रनबुक के अनुसार vX.Y.(Z+1) जारी करें।

  3. खराब संस्करण को चिह्नित करें: उसके 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. क्रॉस-संदर्भ

On this page