CI/CD لمشاريع Go: GitHub Actions من الألف إلى الياء
\n\nفي تطوير البرمجيات الحديثة، أصبحت أتمتة عمليات البناء والاختبار والنشر (CI/CD) ضرورة وليست مجرد راحة. بالنسبة للمشاريع المكتوبة بلغة Go (Golang)، فإن استخدام GitHub Actions هو أحد أبسط وأكثر الطرق فعالية لتنظيم التكامل المستمر والتسليم المستمر. في هذه المقالة، سنستعرض دورة كاملة لإعداد خط أنابيب CI/CD لتطبيقات Go، بدءًا من التكوين الأساسي وصولاً إلى النشر التلقائي.
\n\nما هو GitHub Actions ولماذا هو مهم لـ Go؟
\n\nGitHub Actions هي منصة مدمجة لأتمتة سير العمل (workflows) في مستودعات GitHub. تتيح لك إنشاء خطوط أنابيب يتم تشغيلها بناءً على أحداث معينة: الدفع إلى فرع، إنشاء طلب سحب، نشر إصدار، إلخ.
\n\nبالنسبة لمشاريع Go، تقدم GitHub Actions العديد من المزايا الرئيسية:
\n- \n
- ترجمة سريعة — يتم ترجمة Go بسرعة كبيرة، مما يقلل من وقت تنفيذ خط الأنابيب. \n
- الربط الثابت — لا تتطلب الملفات الثنائية لـ Go تبعيات خارجية، مما يبسط عملية النشر. \n
- اختبار مدمج — أداة
go testتتكامل بشكل ممتاز مع أنظمة CI. \n - تعدد المنصات — من السهل بناء ملفات ثنائية لأنظمة تشغيل وبنى مختلفة. \n
إعداد خط أنابيب CI الأساسي
\n\nلنبدأ بإنشاء سير عمل بسيط يقوم بتشغيل الاختبارات والتحقق من الكود وفقًا لمعايير Go. للقيام بذلك، في جذر المستودع الخاص بك، قم بإنشاء مجلد .github/workflows وملف ci.yml.
مثال على التكوين الأساسي:
\n\nname: CI Pipeline for Go\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n build-and-test:\n runs-on: ubuntu-latest\n \n steps:\n - name: Checkout code\n uses: actions/checkout@v4\n\n - name: Setup Go\n uses: actions/setup-go@v5\n with:\n go-version: '1.22'\n\n - name: Cache Go modules\n uses: actions/cache@v4\n with:\n path: ~/go/pkg/mod\n key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}\n restore-keys: |\n ${{ runner.os }}-go-\n\n - name: Download dependencies\n run: go mod download\n\n - name: Run vet\n run: go vet ./...\n\n - name: Run tests\n run: go test -v -race -count=1 ./...\n\n - name: Build\n run: go build -o myapp ./cmd/app\n\nيقوم سير العمل هذا بالخطوات التالية:
\n- \n
- استنساخ المستودع. \n
- تثبيت Go الإصدار 1.22. \n
- تخزين الوحدات النمطية مؤقتًا لتسريع عمليات التشغيل اللاحقة. \n
- تحميل التبعيات عبر
go mod download. \n - تشغيل
go vetللتحليل الثابت. \n - تنفيذ الاختبارات مع علامة
-raceلاكتشاف سباقات البيانات. \n - بناء الملف الثنائي. \n
تكوين متقدم: البناء عبر المنصات وأدوات الفحص
\n\nتسمح Go ببناء التطبيقات لمنصات مختلفة بسهولة. سنضيف إلى خط الأنابيب مصفوفة بناء (build matrix) وتشغيل أداة الفحص golangci-lint.
الملف المحدث ci.yml:
name: Advanced Go CI/CD\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\njobs:\n lint:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-go@v5\n with:\n go-version: '1.22'\n - name: golangci-lint\n uses: golangci/golangci-lint-action@v4\n with:\n version: latest\n args: --timeout=5m\n\n test:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-go@v5\n with:\n go-version: '1.22'\n - run: go test -v -race -coverprofile=covera