CI/CD لمشاريع Rust: إعداد GitHub Actions

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا CI/CD مهم لمشاريع Rust



التطوير بلغة Rust لا يقتصر فقط على أمان الذاكرة والأداء العالي. في العالم الحديث، أي مشروع جاد يتطلب أتمتة عمليات البناء والاختبار والنشر. CI/CD (التكامل المستمر / النشر المستمر) يسمح للفرق بإصدار التحديثات بشكل أسرع، مما يقلل من خطر الأخطاء البشرية ويضمن استقرار قاعدة الكود.



GitHub Actions هي أداة مدمجة في GitHub لأتمتة سير العمل. وهي مثالية لمشاريع Rust لأنها توفر إجراءات جاهزة لتثبيت المترجم، وتخزين التبعيات مؤقتًا، ونشر الحزم في crates.io. في هذه المقالة، سنشرح كيفية إعداد خط أنابيب CI/CD كامل لتطبيق Rust من الصفر.



1. أساسيات GitHub Actions لـ Rust



قبل الغوص في الكود، دعنا نفهم البنية الأساسية لـ GitHub Actions. يتم تعريف كل سير عمل في ملف YAML موجود في الدليل .github/workflows/. يتكون سير العمل من job واحدة أو أكثر (مهام)، يتم تنفيذها بشكل تسلسلي أو متوازي على أجهزة افتراضية (runners).



بالنسبة لمشاريع Rust، يتضمن سير العمل الأدنى الخطوات التالية:



  • Checkout — الحصول على أحدث إصدار من الكود من المستودع.
  • تثبيت Rust — عبر إجراء actions-rs/toolchain أو الإجراء الرسمي dtolnay/rust-toolchain.
  • تخزين التبعيات مؤقتًا — تسريع البناء عن طريق حفظ target/ و ~/.cargo/.
  • البناء والاختبار — تنفيذ cargo build و cargo test.


مثال على سير عمل أساسي (ملف .github/workflows/ci.yml):



name: Rust CI

on: push: branches: [ main ] pull_request: branches: [ main ]

env: CARGO_TERM_COLOR: always

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v3 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - name: Cache dependencies uses: actions/cache@v3 with: path: | ~/.cargo/ target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Build run: cargo build --verbose - name: Run tests run: cargo test --verbose - name: Lint with clippy run: cargo clippy -- -D warnings - name: Check formatting run: cargo fmt --check


يتم تشغيل سير العمل هذا عند كل push إلى الفرع main وعند إنشاء pull request. يتحقق من أن الكود يتم تجميعه، واجتياز الاختبارات، وعدم وجود أخطاء في أداة التحليل، ومطابقته لأسلوب التنسيق.



2. استراتيجيات متقدمة: البناء المصفوفي والتخزين المؤقت



Rust هي لغة متعددة المنصات، وغالبًا ما يكون من الضروري التحقق من البناء على أنظمة تشغيل أو معماريات متعددة. لهذا، يتم استخدام البناء المصفوفي (matrix build).



دعنا نضيف دعمًا لـ Windows و macOS إلى سير العمل الخاص بنا:



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]        rust: [stable, beta]        runs-on: ${{ matrix.os }}        steps:    - uses: actions/checkout@v3        - name: Install Rust      uses: dtolnay/rust-toolchain@master      with:        toolchain: ${{ matrix.rust }}        components: clippy        - name: Cache      uses: actions/cache@v3      with:        path: |          ~/.cargo/registry/          ~/.cargo/git/          target/        key: ${{ matrix.os }}-cargo-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }}        - name: Build      run: cargo build --                

المدونات

توصيات الكتب