ZCloud पर प्रक्रिया स्वचालन और बुनियादी ढांचे पर केंद्रित परियोजना पर काम करते समय, हमें अक्सर सत्यापन और सामान्य प्रक्रियाओं को निष्पादित करने के लिए कई फ़ंक्शन बनाने की आवश्यकता का सामना करना पड़ता है। केवल एक ऑपरेटिंग सिस्टम का उपयोग करने पर सब कुछ ठीक काम करता है, लेकिन एक से अधिक सिस्टम शामिल होने पर स्थिति जटिल हो जाती है।
हमारे मामले में, अधिकांश विकास Linux पर होता है, लेकिन हमें macOS के साथ संगतता सुनिश्चित करने की भी आवश्यकता है। इसके परिणामस्वरूप अक्सर कोड असंगतताएं उत्पन्न होती हैं।
इस समस्या को हल करने के लिए, हम बन को दुभाषिया के रूप में उपयोग करके अपने शेल स्क्रिप्ट फ़ंक्शन को जावास्क्रिप्ट फ़ाइलों में स्थानांतरित कर रहे हैं। हमने बन को चुना क्योंकि यह शेल एपीआई कार्यक्षमता के माध्यम से शेल की तरह कमांड चलाने का एक आसान तरीका प्रदान करता है।
नीचे एक फ़ंक्शन का उदाहरण दिया गया है जिसका उपयोग हम बुनियादी ढांचे में संशोधन लागू करने से पहले किसी भी कोड परिवर्तन की जांच करने के लिए करते हैं।
शैल स्क्रिप्ट कोड:
function zc_check_pristine_git() { if [ "$ZC_CURRENT_ENV" = "staging" ] || [ "$ZC_CURRENT_ENV" = "dev" ]; then return 0 fi local not_pristine=0 local modified_files="" # Check for staged but uncommitted changes staged_changes=$(git diff --name-only --cached) if [ -n "$staged_changes" ]; then not_pristine=1 modified_files ="Staged changes:\n$staged_changes" fi # Check for unstaged changes unstaged_changes=$(git diff --name-only) if [ -n "$unstaged_changes" ]; then not_pristine=1 modified_files ="Unstaged changes:\n$unstaged_changes" fi # Check for untracked files untracked_files=$(git ls-files --others --exclude-standard) if [ -n "$untracked_files" ]; then not_pristine=1 modified_files ="Untracked files:\n$untracked_files" fi # Check if the current branch is ahead of the remote ahead_commits=$(git log @{u}.. --oneline) if [ -n "$ahead_commits" ]; then not_pristine=1 modified_files ="Commits ahead of the remote:\n$ahead_commits\n\n" fi if [ $not_pristine -eq 1 ]; then echo -e "$modified_files" return 1 fi return 0 }|| ["$ZC_CURRENT_ENV" = "dev" ]; तब वापसी 0 फाई स्थानीय not_pristine=0 स्थानीय संशोधित_फ़ाइलें='' # चरणबद्ध लेकिन अप्रतिबद्ध परिवर्तनों की जाँच करें चरणबद्ध_परिवर्तन=$(git अंतर--केवल-नाम--कैश्ड) यदि [ -n "$stged_changes" ]; तब not_pristine=1 संशोधित_फ़ाइलें = "चरणबद्ध परिवर्तन:\n$चरणबद्ध_परिवर्तन" फाई #अचरणबद्ध परिवर्तनों की जाँच करें unstged_changes=$(git अंतर --केवल-नाम) यदि [ -n "$unstged_changes" ]; तब not_pristine=1 संशोधित_फ़ाइलें = "अस्थिर परिवर्तन:\n$अस्थिर_परिवर्तन" फाई # ट्रैक न की गई फ़ाइलों की जांच करें untracked_files=$(git ls-files --others --exclude-standard) यदि [ -n "$untracked_files" ]; तब not_pristine=1 संशोधित_फ़ाइलें = "अनट्रैक की गई फ़ाइलें:\n$अनट्रैक की गई_फ़ाइलें" फाई # जांचें कि क्या वर्तमान शाखा रिमोट से आगे है आगे_कमिट्स=$(गिट लॉग @{u}.. --ऑनलाइन) यदि [ -n "$ahead_commits" ]; तब not_pristine=1 संशोधित_फ़ाइलें = "रिमोट से आगे प्रतिबद्ध:\n$आगे_प्रतिबद्धता\n\n" फाई यदि [ $not_pristine -eq 1 ]; तब इको -ई "$modified_files" वापसी 1 फाई वापसी 0 }
इस कोड को जावास्क्रिप्ट में बदलने के लिए, हमने निम्नलिखित सामग्री के साथ प्रोजेक्ट की बिन निर्देशिका (जो पहले से ही PATH में है) में zc_check_pristine_git नामक एक फ़ाइल बनाई:
#!/usr/bin/env bun // @language JavaScript import { checkPristineGit } from '../js/helpers/helpers.js'; await checkPristineGit({ currentEnv: process.env.ZC_CURRENT_ENV });#!/usr/bin/env bun // @भाषा जावास्क्रिप्ट '../js/helpers/helpers.js' से आयात { checkPristineGit }; प्रतीक्षा करें checkPristineGit({ currentEnv: प्रोसेस.env.ZC_CURRENT_ENV });
हमने यह दर्शाने के लिए शेबैंग #!/usr/bin/env bun का उपयोग किया कि हम बन को दुभाषिया के रूप में उपयोग कर रहे हैं।
हमने टिप्पणी //@भाषा जावास्क्रिप्ट जोड़ी ताकि आईडीई फ़ाइल को जावास्क्रिप्ट के रूप में पहचान सके (हम मुख्य रूप से जेटब्रेन्स टूल का उपयोग करते हैं)।
फिर, हमने उस फ़ंक्शन को आयात किया जो वास्तव में निष्पादित किया जाएगा।
शेल से जावास्क्रिप्ट में परिवर्तित फ़ंक्शन का कार्यान्वयन:
#!/usr/bin/env bun // @language JavaScript import { checkPristineGit } from '../js/helpers/helpers.js'; await checkPristineGit({ currentEnv: process.env.ZC_CURRENT_ENV });निर्यात स्थिरांक checkPristineGit = async ({ currentEnv }) => { एक्ज़िटऑनएरर(() => { notEmpty(currentEnv, 'currentEnv आवश्यक है'); }); यदि (['मंचन', 'dev'].includes(currentEnv)) { वापस करना; } चलो notPristine = 0; चलो संशोधितफ़ाइलें = ''; // चरणबद्ध लेकिन अप्रतिबद्ध परिवर्तनों की जाँच करें स्थिरांक चरणबद्ध परिवर्तन = प्रतीक्षा करें $`git diff --name-only --cached`.text(); यदि (चरणबद्ध परिवर्तन !== '') { नॉटप्रिस्टिन = 1; संशोधितफ़ाइलें = `चरणबद्ध परिवर्तन:\n${चरणबद्धपरिवर्तन}`; } //अस्थिर परिवर्तनों की जाँच करें const unstgedChanges = wait $`git diff --name-only`.text(); यदि (अचरणबद्ध परिवर्तन !== '') { नॉटप्रिस्टिन = 1; संशोधितफ़ाइलें = `अचरणबद्ध परिवर्तन:\n${अचरणबद्धपरिवर्तन}`; } //अनट्रैक की गई फ़ाइलों की जाँच करें const untrackedFiles = wait $`git ls-files --others --exclude-standard`.text(); यदि (अनट्रैकफ़ाइलें !== '') { नॉटप्रिस्टिन = 1; संशोधितफ़ाइलें = `अनट्रैक की गई फ़ाइलें:\n${untrackedFiles}`; } // जांचें कि क्या वर्तमान शाखा रिमोट से आगे है const frontCommits = wait $`git log @{u}.. --oneline`.text(); अगर (आगे कमिट करता है !== '') { नॉटप्रिस्टिन = 1; संशोधितफ़ाइलें = `रिमोट से आगे प्रतिबद्ध:\n${aheadCommits}`; } यदि (प्राचीन नहीं) { कंसोल.चेतावनी('त्रुटि: आप उत्पादन परिवेश में परिवर्तन केवल तभी लागू कर सकते हैं यदि रिपॉजिटरी प्राचीन स्थिति में है।'); कंसोल.चेतावनी(संशोधितफ़ाइलें); प्रक्रिया.निकास(1); } };
इस तरह, हमने जावास्क्रिप्ट कोड को मानकीकृत किया है जिसे शेल स्क्रिप्ट की तरह निष्पादित किया जाएगा।
फ़ंक्शंस के लिए कॉल हैं (exitOnError, notEmpty) जो दिए गए उदाहरण में लागू नहीं किए गए हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3