रिलीज़ स्वचालन
Libre WebUI रिलीज़ रिपॉज़िटरी की जड़ से रिलीज़ स्क्रिप्ट द्वारा बनाई जाती है। स्क्रिप्ट पिछले संस्करण टैग के बाद का वास्तविक Git इतिहास पढ़ती है, पैकेज संस्करण बदलती है, परिवर्तन विवरण लिखती है, जाँच चलाती है, रिलीज़ कमिट और संस्करण टैग बनाती है। बिल्ड और बाइनरी प्रकाशन का स्रोत GitHub है; रिलीज़ मेटाडेटा और आर्टिफ़ैक्ट लिंक परियोजना की Forgejo रिपॉज़िटरी में प्रतिलिपित होते हैं।
एक बार की स्थानीय स्थापना
निर्भरताएँ स्थापित करके रिपॉज़िटरी हुक सक्षम करें:
npm install
npm run setup-hooks
यह सेट करता है:
- Conventional Commit जाँच के लिए
.githooks/commit-msg - फ़ॉर्मैट जाँच के लिए
.githooks/pre-commit - स्थानीय कमिट संदेश नमूने के लिए
.gitmessage
रिलीज़ बनाना
साफ़ कार्य-वृक्ष में उस शाखा पर स्क्रिप्ट चलाएँ जिसे टैग करना है:
# Patch release
npm run release
# Minor release
npm run release:minor
# Major release
npm run release:major
स्क्रिप्ट अपने आप:
- कार्य-वृक्ष की सफ़ाई और अगले स्थानीय टैग की उपलब्धता जाँचती है।
- कमिट, फ़ाइल, निर्भरता, स्थानीयकरण और अप्रकाशित विवरण का प्रमाण जुटाती है।
- प्रमाण से रिलीज़ नोट बनाती है।
package.json, कार्यक्षेत्र पैकेज फ़ाइलें,package-lock.json, Helm चार्ट, ऐप संस्करण औरCHANGELOG.mdबदलती है।- फ़ॉर्मैट, कोड जाँच, बिल्ड, परीक्षण, सुरक्षा ऑडिट और npm परीक्षण प्रकाशन सहित
npm run release:checkचलाती है। - सभी जाँच पास होने पर ही रिलीज़ कमिट और टिप्पणी वाला टैग बनाती है।
परिवर्तन विवरण बनाना
फ़ाइल बदले बिना अगला खंड देखें:
npm run changelog
बने हुए खंड से CHANGELOG.md हाथ से बदलें:
npm run changelog -- update
डिफ़ॉल्ट रूप से जनरेटर स्थानीय Ollama-संगत मॉडल से सुधरा मसौदा माँग सकता है, फिर उसे Git प्रमाण से जाँचता है। AI उपलब्ध न हो या परिणाम असुरक्षित लगे तो नियतात्मक जनरेटर उपयोग होता है।
उपयोगी ओवरराइड:
CHANGELOG_AI=0 npm run release:minor
CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
OLLAMA_BASE_URL=http://127.0.0.1:11434 npm run release
रिलीज़ भेजना
कमिट और टिप्पणी वाला टैग बनने के बाद केवल स्क्रिप्ट द्वारा दिखाया सटीक शाखा कमिट और टैग प्रकाशित करें। उत्पादन शाखा पहले Forgejo, फिर GitHub भेजी जाती है और टैग अनुसरण स्पष्ट रूप से बंद रहता है:
git -c push.followTags=false push \
https://git.kroonen.ai/libre-webui/libre-webui.git \
HEAD:refs/heads/main
git ls-remote \
https://git.kroonen.ai/libre-webui/libre-webui.git \
refs/heads/main
git -c push.followTags=false push \
https://github.com/libre-webui/libre-webui.git \
HEAD:refs/heads/main
git ls-remote \
https://github.com/libre-webui/libre-webui.git \
refs/heads/main
दोनों SHA इच्छित स्थानीय रिलीज़ कमिट के बराबर होने चाहिए। टैग प्रकाशित करने से पहले उसी कमिट के अनिवार्य GitHub कार्यप्रवाह पास होने दें।
पुष्टि करें कि टैग किसी सेवा पर मौजूद नहीं है, फिर वही एक टैग पहले Forgejo और फिर GitHub भेजें:
git ls-remote \
https://git.kroonen.ai/libre-webui/libre-webui.git \
'refs/tags/vX.Y.Z' 'refs/tags/vX.Y.Z^{}'
git ls-remote \
https://github.com/libre-webui/libre-webui.git \
'refs/tags/vX.Y.Z' 'refs/tags/vX.Y.Z^{}'
git -c push.followTags=false push \
https://git.kroonen.ai/libre-webui/libre-webui.git \
refs/tags/vX.Y.Z:refs/tags/vX.Y.Z
git -c push.followTags=false push \
https://github.com/libre-webui/libre-webui.git \
refs/tags/vX.Y.Z:refs/tags/vX.Y.Z
git ls-remote \
https://git.kroonen.ai/libre-webui/libre-webui.git \
'refs/tags/vX.Y.Z' 'refs/tags/vX.Y.Z^{}'
git ls-remote \
https://github.com/libre-webui/libre-webui.git \
'refs/tags/vX.Y.Z' 'refs/tags/vX.Y.Z^{}'
vX.Y.Z को रिलीज़ टैग से बदलें। टिप्पणी वाले टैग के वस्तु SHA और निकाले गए कमिट SHA दोनों जाँचें। git push --tags कभी उपयोग न करें; यह असंबंधित टैग प्रकाशित कर सकता है।
CI रिलीज़ पथ
v* टैग भेजने पर GitHub रिलीज़ कार्यप्रवाह:
npm run release:checkचलाता है- macOS, Windows और Linux के Electron आर्टिफ़ैक्ट बनाता है
- संबंधित
CHANGELOG.mdखंड से GitHub Release बनाता है - रिकॉर्ड और आर्टिफ़ैक्ट लिंक Forgejo में प्रतिलिपित करता है
- Docker इमेज बनाता है
- उसी संस्करण का Helm चार्ट प्रकाशित करता है
NPM_TOKENसे npm पैकेज प्रकाशित करता है
यही जाँच टैग से पहले स्थानीय रूप से चल सकती है:
npm run release:check
Forgejo रिलीज़ प्रतिलिपि
प्रतिलिपि, एन्क्रिप्टेड GitHub Actions गुप्त FORGEJO_TOKEN में रखे व्यक्तिगत Forgejo टोकन का उपयोग करती है। केवल write:repository दायरा दें, मालिक को libre-webui/libre-webui पर लिखने का अधिकार दें और टोकन को कभी कमिट या प्रिंट न करें।
प्रतिलिपि जानबूझकर समशक्त है। वह टैग से रिलीज़ खोजती, केवल अनुपस्थित रिकॉर्ड बनाती, GitHub मेटाडेटा मिलाती और मौजूदा लिंक छोड़ती है। नेटवर्क/कार्यप्रवाह विफलता के बाद पुनः प्रयास बिना दोहराव के शेष काम पूरा करता है।
Forgejo आर्टिफ़ैक्ट संबंधित सार्वजनिक GitHub browser_download_url के नामित बाहरी लिंक हैं। बाइनरी GitHub पर रहते हैं; Forgejo उन्हें कॉपी किए बिना वही नाम दिखाता है। स्रोत संग्रह हर सेवा में सटीक टैग से स्वतंत्र बनता है।
एक रिलीज़ देखना या पूरा करना
Forgejo में लिखे बिना परिवर्तन देखें:
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
FORGEJO_TOKEN और GITHUB_TOKEN सुरक्षित प्रबंधक से लोड करने के बाद रिलीज़ प्रतिलिपित करें:
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
सटीक टैग GitHub और Forgejo पर मौजूद और समान वस्तु/कमिट पर होना चाहिए।
सभी रिलीज़ देखना या पूरा करना
हर GitHub Release को Forgejo से जाँचें:
node scripts/mirror-forgejo-releases.mjs --all --dry-run
अनुपस्थित या अधूरे Forgejo Release पूरे करें:
node scripts/mirror-forgejo-releases.mjs --all
सटीक टैग समानता और आर्टिफ़ैक्ट खोज के लिए अनाम GitHub सीमा से अधिक अनुरोध चाहिए, इसलिए परीक्षण सहित --all को GITHUB_TOKEN चाहिए। --dry-run के बिना FORGEJO_TOKEN भी चाहिए।
--all दोनों API में पृष्ठ बदलता और हर Git टैग नहीं, GitHub Release वस्तु देखता है। जानबूझकर बिना Release वाला टैग Forgejo में केवल टैग रहता है। पूरा करने के बाद परीक्षण फिर चलाएँ; कोई लंबित परिवर्तन नहीं होना चाहिए।
अपरिवर्तनीय टैग नीति
प्रकाशित संस्करण टैग अपरिवर्तनीय हैं। टैग किसी दूरस्थ सेवा पर होने के बाद:
- उसे हटाएँ नहीं।
- बलपूर्वक न भेजें।
- सुधरे कमिट पर न ले जाएँ।
- वही अर्थपूर्ण संस्करण अलग सामग्री के लिए न उपयोग करें।
प्रकाशित सामग्री गलत हो तो स्रोत और विवरण सुधारकर अगला पैच संस्करण प्रकाशित करें। केवल पृष्ठ या लिंक गायब हो तो टैग छुए बिना समशक्त प्रतिलिपि फिर चलाएँ।
Forgejo v0.8.6 टैग दोहरी प्रतिलिपि लागू करते समय एक बार स्पष्ट स्वीकृति से फिर संरेखित हुआ था। उसने समान स्रोत वृक्ष पर अलग कमिट वंश वाले दो ऐतिहासिक टैग सुधारे। वह जाँचा हुआ माइग्रेशन प्रकाशित टैग बदलने की मिसाल नहीं है।
Helm संस्करण नीति
Helm चार्ट का version, appVersion, मूल पैकेज संस्करण और रिलीज़ टैग जानबूझकर समान अर्थपूर्ण संस्करण उपयोग करते हैं। स्क्रिप्ट सबको साथ बढ़ाती और CI अंतर अस्वीकार करता है।
चार्ट केवल अपरिवर्तनीय v* टैग से प्रकाशित होता है। मौजूदा संस्करण के नीचे बदली सामग्री न प्रकाशित करें। परिवर्तन को नया संस्करण पाने के लिए अगली ऐप रिलीज़ से जाना चाहिए।
चार्ट 0.14.1 में एक बार का digest ओवरराइड है क्योंकि वह अर्थपूर्ण Docker टैग से पुराना है। digest सत्यापित बहु-वास्तुकला 0.14.1 इमेज पहचानता है। अगली रिलीज़ ओवरराइड साफ़ करती है; फिर डिफ़ॉल्ट इमेज appVersion से हल होती है।
Docker कार्यप्रवाह उसी v* टैग से अर्थपूर्ण टैग GHCR और Docker Hub पर प्रकाशित करता है। Helm प्रकाशन मेल खाने वाली सार्वजनिक इमेज का 20 मिनट इंतज़ार करता है और अनुपस्थित इमेज वाला चार्ट प्रकाशित करने के बजाय विफल होता है। पैकेज Ollama इमेज स्वतंत्र है और डिफ़ॉल्ट latest टैग उपयोग करती है।
Conventional Commits
कमिट संदेश Conventional Commit प्रारूप उपयोग करें:
<type>[optional scope]: <description>
सामान्य प्रकार:
feat: उपयोगकर्ता सुविधाfix: त्रुटि सुधारdocs: दस्तावेज़ अद्यतनrefactor: आंतरिक पुनर्गठनperf: प्रदर्शन सुधारtest: परीक्षण कवरेजchore: रखरखाव, रिलीज़ या बिल्ड
असंगत परिवर्तन ! उपयोग करते हैं:
git commit -m "feat!: remove deprecated endpoint"
git commit -m "fix(auth)!: change token validation"
समस्या निवारण
कार्य निर्देशिका साफ़ नहीं
रिलीज़ से पहले परिवर्तन कमिट या स्टैश करें:
git status --short
git add .
git commit -m "fix: resolve pending changes"
रिलीज़ योग्य परिवर्तन नहीं
पिछले टैग के बाद के कमिट देखें:
git log $(git describe --tags --abbrev=0)..HEAD --oneline
परिवर्तन विवरण हाथ से संपादित करना है
CHANGELOG.md बदलें और टैग प्रकाशन से पहले सुधार कमिट करें:
git add CHANGELOG.md
git commit -m "docs: refine changelog"
स्थानीय रिलीज़ कमिट वापस लेना
यदि कमिट और टैग नहीं भेजे गए:
git tag -d v0.12.0
git reset --soft HEAD~1
टैग दूरस्थ सेवा पर हो तो हटाएँ या बदलें नहीं। main पर समस्या सुधारें, अगला पैच बनाएँ और नई अपरिवर्तनीय रिलीज़ पूरी जाँच से प्रकाशित करें।
Forgejo प्रतिलिपि अधूरी
दोनों दूरस्थ टैग वस्तु और कमिट SHA का मिलान जाँचें, फिर प्रभावित रिलीज़ देखें और दोहराएँ:
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
प्राधिकरण त्रुटि बताती है कि FORGEJO_TOKEN अनुपस्थित, समाप्त, अधिकारहीन उपयोगकर्ता का या write:repository से रहित है। गायब/अलग दूरस्थ टैग अलग जाँचा जाता है; प्रतिलिपि Git टैग नहीं बनाती या बदलती।
अनुरक्षक फ़ाइलें
.gitmessage- कमिट संदेश नमूना.githooks/commit-msg- Conventional Commit जाँच.githooks/pre-commit- फ़ॉर्मैट पूर्व जाँचscripts/release.js- रिलीज़ संचालनscripts/mirror-forgejo-releases.mjs- समशक्त Forgejo प्रतिलिपिscripts/generate-changelog.js- विवरण पूर्वावलोकन/अद्यतनscripts/lib/releaseNotes.js- प्रमाण संग्रह और विवरण निर्माण.github/workflows/release.yml- टैग-आधारित CI रिलीज़.github/workflows/helm-publish.yml- Helm जाँच और प्रकाशन
Conventional Commits पर अधिक जानकारी: https://www.conventionalcommits.org/.