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

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

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

ابدأ الدورة

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

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

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



1. الأساسيات: إنشاء أول workflow لـ Rust

Workflow في GitHub Actions هو ملف YAML يصف تسلسل الخطوات. بالنسبة لمشروع Rust، يجب أن يتضمن الحد الأدنى من workflow: تثبيت Rust، تحميل التبعيات، البناء، وتشغيل الاختبارات.

أنشئ ملف .github/workflows/ci.yml في جذر مستودعك:

name: Rust CI

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

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4 - name: Setup Rust uses: actions-rs/toolchain@v1 with: toolchain: stable override: true components: clippy, rustfmt - name: Cache dependencies uses: actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git 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

يتم تشغيل هذا workflow مع كل push إلى الفرع الرئيسي أو عند إنشاء pull request. يعمل التخزين المؤقت للتبعيات (actions/cache) على تسريع عمليات التشغيل اللاحقة بشكل كبير. لاحظ العلامة -- -D warnings في clippy - فهي تحول التحذيرات إلى أخطاء، مما يحسن جودة الكود.



1.1. اختبار المصفوفة: التحقق على إصدارات متعددة من Rust

لدى Rust ثلاث قنوات إصدار رئيسية: stable و beta و nightly. للتأكد من أن كودك يعمل على جميع الإصدارات، استخدم مصفوفة الاستراتيجيات:

jobs:  test:    runs-on: ubuntu-latest    strategy:      matrix:        rust: [stable, beta, nightly]    steps:    - uses: actions/checkout@v4    - name: Setup Rust ${{ matrix.rust }}      uses: actions-rs/toolchain@v1      with:        toolchain: ${{ matrix.rust }}        override: true    - name: Build and test      run: |        cargo build        cargo test

أضف أيضًا التحقق من الحد الأدنى من إصدار Rust المدعوم (MSRV). هذا مهم بشكل خاص للمكتبات. على سبيل المثال، إذا كان ملف Cargo.toml الخاص بك يحدد rust-version = "1.60"، أضف إلى المصفوفة rust: [1.60.0, stable].



2. تقنيات متقدمة: التحسين والأمان

2.1. التخزين المؤقت مع مراعاة الملفات الشخصية

افتراضيًا، يستخدم cargo build ملف التعريف debug. بالنسبة لبناءات release، سيكون التخزين المؤقت مختلفًا. قم بتقسيم التخزين المؤقت لملفات التعريف المختلفة:

- name: Cache dependencies  uses: actions/cache@v3  with:    path: |      ~/.cargo/registry      ~/.cargo/git      target    key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.rust }}-${{ matrix.profile }}  env:    CARGO_TERM_COLOR: always

أضف إلى المصفوفة profile: [debug, release].



2.2. التحقق من الأمان

المدونات

توصيات الكتب