Rust परियोजनाओं के लिए CI/CD: GitHub Actions A से Z तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: Rust परियोजनाओं के लिए CI/CD क्यों महत्वपूर्ण है?

\n

Rust में डेवलपमेंट केवल मेमोरी सुरक्षा और उच्च प्रदर्शन के बारे में नहीं है, बल्कि सख्त अनुशासन के बारे में भी है। Rust कंपाइलर बिल्ड चरण में कई त्रुटियों को पकड़ लेता है, लेकिन यह गुणवत्तापूर्ण परीक्षण, लिंटिंग और निर्भरता संगतता जांच की आवश्यकता को समाप्त नहीं करता है। यहाँ CI/CD (Continuous Integration / Continuous Deployment) मदद के लिए आता है।

\n

GitHub Actions एक अंतर्निहित स्वचालन प्रणाली है जो Rust परियोजनाओं के लिए एकदम उपयुक्त है। यह स्वचालित रूप से परीक्षण चलाने, कोड को फॉर्मेट करने, कमजोरियों की जाँच करने और यहाँ तक कि रिपॉजिटरी में प्रत्येक पुश पर crates.io रजिस्ट्री में क्रेट प्रकाशित करने की अनुमति देता है। इस लेख में, हम पूर्ण पाइपलाइन को कवर करेंगे: बुनियादी cargo build से लेकर प्रोडक्शन डिप्लॉयमेंट तक।

\n\n

1. मूल बातें: Rust के लिए बुनियादी workflow सेटअप करना

\n

GitHub Actions में कोई भी CI/CD पाइपलाइन .github/workflows/ निर्देशिका में YAML फ़ाइल बनाने से शुरू होती है। आइए Rust प्रोजेक्ट की बुनियादी जाँच के लिए ci.yml फ़ाइल बनाएँ।

\n\n

1.1. पहला workflow: बिल्ड और परीक्षण

\n

आइए न्यूनतम सेट से शुरू करें: रिपॉजिटरी को क्लोन करना, Rust स्थापित करना और परीक्षण चलाना।

\n
name: 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
\n

यह workflow main और develop शाखाओं में प्रत्येक पुश पर, साथ ही Pull Request बनाने पर चलेगा।

\n\n

1.2. बिल्ड को गति देने के लिए निर्भरता कैशिंग

\n

Rust परियोजनाओं में अक्सर कई निर्भरताएँ होती हैं। उन्हें हर बार डाउनलोड करने से बचने के लिए, कैशिंग का उपयोग करें। इससे बिल्ड का समय 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 फ़ाइल का हैश सुनिश्चित करता है कि कैश केवल निर्भरता बदलने पर ही अपडेट होगा।

\n\n

2. कोड गुणवत्ता की उन्नत जाँच

\n

उच्च कोड गुणवत्ता बनाए रखने के लिए केवल परीक्षण पर्याप्त नहीं हैं। आइए लिंटिंग, फ़ॉर्मेटिंग और सुरक्षा जाँच जोड़ें।

\n\n

2.1. फ़ॉर्मेटिंग (rustfmt) और लिंटिंग (clippy)

\n

Rust में कोड की एक समान शैली बनाए रखने के लिए अंतर्निहित उपकरण हैं। आइए उन्हें एक अलग 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\n

2.2. निर्भरता सुरक्षा जाँच (car

ब्लॉग

पुस्तक अनुशंसाएँ