CI/CD لمشاريع Rust: GitHub Actions من الألف إلى الياء

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

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

ابدأ الدورة

مقدمة: لماذا يعتبر CI/CD أمرًا بالغ الأهمية لمشاريع Rust



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



GitHub Actions هي منصة مدمجة لأتمتة سير العمل في GitHub. وهي مثالية لمشاريع Rust بفضل مرونتها، والحد المجاني للدقائق للمستودعات العامة، والنظام البيئي الضخم من الإجراءات الجاهزة. في هذه المقالة، سنشرح دورة الإعداد الكاملة لـ CI/CD لـ Rust: من البناء الأساسي إلى التحسين باستخدام التخزين المؤقت والنشر.



1. الأساسيات: أول سير عمل للبناء والاختبار



لنبدأ بإنشاء سير عمل بسيط. في جذر المستودع الخاص بك، أنشئ مجلد .github/workflows وملف ci.yml.



الملف الأساسي 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@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Build run: cargo build --verbose - name: Run tests run: cargo test --verbose


تحليل العناصر الرئيسية:

  • on: المشغلات - التشغيل عند الدفع إلى main وعند إنشاء Pull Request.
  • env: المتغير CARGO_TERM_COLOR يقوم بتفعيل إخراج السجلات بالألوان.
  • actions/checkout: الإجراء القياسي لاستنساخ المستودع.
  • dtolnay/rust-toolchain: الإجراء الأكثر شيوعًا لتثبيت Rust. استخدم stable أو nightly أو إصدارًا محددًا.


سير العمل هذا مفيد بالفعل: فهو يضمن أن الكود يتم تجميعه وأن جميع الاختبارات تمر. لكن بالنسبة لمشروع حقيقي، هذا غير كافٍ.



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



كل تشغيل لـ CI يقوم بتنزيل جميع التبعيات من جديد. بالنسبة لمشاريع Rust التي تحتوي على عدد كبير من الكريتات، قد يستغرق هذا دقائق. الحل هو التخزين المؤقت لمجلد ~/.cargo و target.



إضافة التخزين المؤقت



jobs:  build:    runs-on: ubuntu-latest    steps:    - uses: actions/checkout@v4    - name: Install Rust      uses: dtolnay/rust-toolchain@stable    - name: Cache dependencies      uses: actions/cache@v3      with:        path: |          ~/.cargo/bin/          ~/.cargo/registry/index/          ~/.cargo/registry/cache/          target/        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}    - name: Build      run: cargo build --verbose    - name: Run tests      run: cargo test --verbose


النقاط الرئيسية:

  • hashFiles('**/Cargo.lock'): يتم إبطال التخزين المؤقت فقط عند تغيير Cargo.lock.
  • path: نقوم بتخزين الملفات الثنائية وفهرس السجل ومجلد target مؤقتًا.
  • الاستعادة: عند تطابق المفتاح، يتم استعادة التخزين المؤقت، ويتخطى cargo عملية التنزيل.


البناء عبر المنصات المتعددة



Rust تدعم العديد من المنصات. للتأكد من أن كودك يعمل في كل مكان، استخدم مصفوفة البناء:



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]    runs-on: ${{ matrix.os }}    steps:    - uses: actions/checkout@v4    - name: Install Rust      uses: dtolnay/rust-toolchain@stable                

المدونات

توصيات الكتب