परिचय: Rust परियोजनाओं के लिए CI/CD क्यों महत्वपूर्ण है?
\nRust में डेवलपमेंट केवल मेमोरी सुरक्षा और उच्च प्रदर्शन के बारे में नहीं है, बल्कि सख्त अनुशासन के बारे में भी है। Rust कंपाइलर बिल्ड चरण में कई त्रुटियों को पकड़ लेता है, लेकिन यह गुणवत्तापूर्ण परीक्षण, लिंटिंग और निर्भरता संगतता जांच की आवश्यकता को समाप्त नहीं करता है। यहाँ CI/CD (Continuous Integration / Continuous Deployment) मदद के लिए आता है।
\nGitHub Actions एक अंतर्निहित स्वचालन प्रणाली है जो Rust परियोजनाओं के लिए एकदम उपयुक्त है। यह स्वचालित रूप से परीक्षण चलाने, कोड को फॉर्मेट करने, कमजोरियों की जाँच करने और यहाँ तक कि रिपॉजिटरी में प्रत्येक पुश पर crates.io रजिस्ट्री में क्रेट प्रकाशित करने की अनुमति देता है। इस लेख में, हम पूर्ण पाइपलाइन को कवर करेंगे: बुनियादी cargo build से लेकर प्रोडक्शन डिप्लॉयमेंट तक।
1. मूल बातें: Rust के लिए बुनियादी workflow सेटअप करना
\nGitHub Actions में कोई भी CI/CD पाइपलाइन .github/workflows/ निर्देशिका में YAML फ़ाइल बनाने से शुरू होती है। आइए Rust प्रोजेक्ट की बुनियादी जाँच के लिए ci.yml फ़ाइल बनाएँ।
1.1. पहला workflow: बिल्ड और परीक्षण
\nआइए न्यूनतम सेट से शुरू करें: रिपॉजिटरी को क्लोन करना, Rust स्थापित करना और परीक्षण चलाना।
\nname: Rust CI\n\non:\n push:\n branches: [ "main", "develop" ]\n pull_request:\n branches: [ "main" ]\n\nenv:\n CARGO_TERM_COLOR: always\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v4\n - name: Install Rust\n uses: dtolnay/rust-toolchain@stable\n - name: Build\n run: cargo build --verbose\n - name: Run tests\n run: cargo test --verbose\nयहाँ क्या हो रहा है?
\n- \n
actions/checkout@v4— आपके कोड को क्लोन करता है। \n dtolnay/rust-toolchain@stable— Rust स्थापित करने के लिए आधिकारिक एक्शन (nightly, beta और stable का समर्थन करता है)। \n cargo buildऔरcargo test— प्रोजेक्ट की जाँच के लिए मुख्य कमांड। \n
यह workflow main और develop शाखाओं में प्रत्येक पुश पर, साथ ही Pull Request बनाने पर चलेगा।
1.2. बिल्ड को गति देने के लिए निर्भरता कैशिंग
\nRust परियोजनाओं में अक्सर कई निर्भरताएँ होती हैं। उन्हें हर बार डाउनलोड करने से बचने के लिए, कैशिंग का उपयोग करें। इससे बिल्ड का समय 5-10 मिनट से घटकर 30-60 सेकंड हो जाएगा।
\n - name: Cache Cargo registry\n uses: actions/cache@v3\n with:\n path: |\n ~/.cargo/registry\n ~/.cargo/git\n target/\n key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}\n restore-keys: |\n ${{ runner.os }}-cargo-\nइस चरण को cargo build चलाने से पहले जोड़ें। Cargo.lock फ़ाइल का हैश सुनिश्चित करता है कि कैश केवल निर्भरता बदलने पर ही अपडेट होगा।
2. कोड गुणवत्ता की उन्नत जाँच
\nउच्च कोड गुणवत्ता बनाए रखने के लिए केवल परीक्षण पर्याप्त नहीं हैं। आइए लिंटिंग, फ़ॉर्मेटिंग और सुरक्षा जाँच जोड़ें।
\n\n2.1. फ़ॉर्मेटिंग (rustfmt) और लिंटिंग (clippy)
\nRust में कोड की एक समान शैली बनाए रखने के लिए अंतर्निहित उपकरण हैं। आइए उन्हें एक अलग job में जोड़ें:
\n lint:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: dtolnay/rust-toolchain@stable\n with:\n components: clippy, rustfmt\n - name: Check formatting\n run: cargo fmt --check\n - name: Run clippy\n run: cargo clippy -- -D warnings\n- \n
cargo fmt --check— जाँचता है कि कोडrustfmtमानक के अनुसार फ़ॉर्मेट किया गया है या नहीं। \n cargo clippy -- -D warnings— लिंटर चलाता है और चेतावनियों को त्रुटियों में बदल देता है (फ़्लैग-D). \n
यह रिपॉजिटरी में "गंदे" कोड से बचने में मदद करेगा।
\n\n