परिचय: TypeScript के लिए उन्नत CI/CD की आवश्यकता क्यों?
\nबुनियादी CI/CD पाइपलाइन, जो केवल npm test और npm build चलाती है, तब अप्रभावी हो जाती है जब TypeScript प्रोजेक्ट बढ़ने लगता है। बिल्ड का समय बढ़ जाता है, परीक्षणों में घंटों लग जाते हैं, और मैन्युअल वर्जन प्रबंधन से त्रुटियाँ होती हैं। GitHub Actions के उन्नत स्तर का कॉन्फ़िगरेशन इन समस्याओं को हल करने की अनुमति देता है: कैशिंग के माध्यम से पाइपलाइन को गति देना, Node.js और OS के विभिन्न संस्करणों के लिए समानांतर रूप से परीक्षण करना, और प्रोडक्शन पर डिप्लॉय को स्वचालित करना।
इस लेख में, हम TypeScript परियोजनाओं के लिए तीन प्रमुख तकनीकों पर चर्चा करेंगे: स्मार्ट node_modules कैशिंग, संगतता जाँच के लिए मैट्रिक्स बिल्ड, और actions/upload-pages-artifact का उपयोग करके स्वचालित डिप्लॉय। सभी उदाहरण TypeScript में लिखे गए हैं और आपके रिपॉजिटरी में एकीकरण के लिए तैयार हैं।
1. निर्भरताओं और संकलन की स्मार्ट कैशिंग
\nबड़ी TypeScript परियोजनाओं की पहली समस्या निर्भरताओं की लंबी स्थापना और संकलन है। GitHub Actions कैशिंग तंत्र प्रदान करता है, लेकिन इसे सही ढंग से कॉन्फ़िगर करने की आवश्यकता है। पूरे node_modules फ़ोल्डर को कैश करने (जो पुराने संस्करणों का कारण बन सकता है) के बजाय, package-lock.json और कंपाइलर के .cache फ़ोल्डर को कैश करना बेहतर है।
TypeScript के लिए उन्नत कैशिंग का उदाहरण:
\nname: TypeScript CI (Advanced)\non: [push, pull_request]\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n \n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n \n - name: Cache TypeScript cache\n uses: actions/cache@v4\n with:\n path: |\n **/node_modules\n **/.tsbuildinfo\n key: ${{ runner.os }}-ts-${{ hashFiles('**/package-lock.json') }}\n restore-keys: |\n ${{ runner.os }}-ts-\n \n - run: npm ci\n - run: npm run build --if-present\n - run: npm test\nयहाँ मुख्य अनुकूलन कैश की एक अद्वितीय कुंजी उत्पन्न करने के लिए hashFiles('**/package-lock.json') का उपयोग है। यदि package-lock.json नहीं बदला है, तो कैश सेकंडों में पुनर्स्थापित हो जाता है। फ़्लैग --if-present यदि बिल्ड स्क्रिप्ट परिभाषित नहीं है तो उसे छोड़ने की अनुमति देता है।
2. मैट्रिक्स बिल्ड: Node.js और OS के विभिन्न संस्करणों पर परीक्षण
\nTypeScript JavaScript में संकलित होता है, लेकिन कोड का व्यवहार विभिन्न निष्पादन वातावरणों में भिन्न हो सकता है। GitHub Actions की मैट्रिक्स रणनीति आपको OS और Node.js संस्करणों के कई संयोजनों पर एक ही पाइपलाइन चलाने की अनुमति देती है। यह लाइब्रेरी और सर्वर एप्लिकेशन के लिए महत्वपूर्ण है।
\nTypeScript प्रोजेक्ट के लिए मैट्रिक्स सेटअप का उदाहरण:
\njobs:\n test:\n runs-on: ${{ matrix.os }}\n strategy:\n matrix:\n os: [ubuntu-latest, windows-latest, macos-latest]\n node-version: [18, 20, 22]\n exclude:\n - os: windows-latest\n node-version: 22\n fail-fast: false\n\n steps:\n - uses: actions/checkout@v4\n - name: Use Node.js ${{ matrix.node-version }}\n uses: actions/setup-node@v4\n with:\n node-version: ${{ matrix.node-version }}\n cache: 'npm'\n \n - run: npm ci\n - run: npx tsc --noEmit\n - run: npm test\n - name: Upload coverage\n uses: actions/upload-artifact@v4\n with:\n name: coverage-${{ matrix.os }}-${{ matrix.node-version }}\n path: coverage/\nमुख्य बिंदु:
\n- \n
fail-fast: false— किसी एक जॉब में त्रुटि होने पर अन्य जॉब को नहीं रोकता। आपको सभी समस्याओं को एक साथ देखने की अनुमति देता है। \n exclude— ज्ञात रूप से गैर-कार्यशील संयोजनों को बाहर करने की अनुमति देता है (उदाहरण के लिए, Windows पर Node 22, यदि कोई ज्ञात समस्या है)। \n ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें