ما هو برنامج GitHub Script؟

مكتمل

في هذه الوحدة، ستتعلم كيف يمكنك GitHub Script من أتمتة عمليات GitHub الشائعة باستخدام مهام سير عمل GitHub Actions.

ما هو برنامج GitHub Script؟

GitHub Script هو إجراء يوفر عميل Octokit مصادق عليه ويمكن JavaScript من الكتابة مباشرة في ملف سير العمل. يتم تشغيله في Node.js، لذلك لديك قوة هذا النظام الأساسي المتوفر عند كتابة البرامج النصية.

ما هو Octokit؟

Octokit هو المجموعة الرسمية من العملاء لواجهة برمجة تطبيقات GitHub. يوفر أحد هؤلاء العملاء، rest.js، وصول JavaScript إلى واجهة GitHub REST.

لقد كنت دائما قادرا على أتمتة واجهة برمجة تطبيقات GitHub عبر octokit/rest.js، على الرغم من أنه يمكن أن يكون إجراء روتينيا لإعداده وصيانته بشكل صحيح. إحدى المزايا العظيمة لاستخدام GitHub Script هو أنه يتعامل مع كل هذا الحمل حتى تتمكن من البدء على الفور باستخدام API. لا داعي للقلق بشأن التبعيات أو التكوين أو حتى المصادقة.

ماذا يمكن أن يفعل octokit/rest.js؟

الجواب القصير هو أنه يمكنه أن يفعل أي شيء تقريبًا فيما يتعلق بجعل GitHub تلقائيًا. بالإضافة إلى إمكانية الوصول إلى التثبيتات وطلبات السحب والمشكلات، يمكنك أيضا الوصول إلى المستخدمين والمشاريع والمؤسسات. يمكنك استرداد قوائم الملفات شائعة الاستخدام مثل التراخيص الشائعة أو ملفات .gitignore. يمكنك حتى تقديم إنزال.

إذا كنت تقوم بإنشاء شيء يدمج GitHub، فإن الاحتمالات جيدة ستجد ما تبحث عنه في وثائق octokit/rest.js الكاملة.

كيف يختلف استخدام GitHub Script عن octokit/rest.js؟

الفرق الرئيسي في الاستخدام هو أن GitHub Script يوفر عميل ثماني/rest.js تمت مصادقته مسبقا باسم github.

لذا بدلا من

octokit.issues.createComment({

يمكنك استخدام

Person.

بالإضافة إلى المتغير github، يتم توفير المتغيرات التالية:

إنشاء سير عمل يستخدم GitHub Script

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

ستبدأ بجملة name و on التي تحدد تشغيل سير العمل عند فتح المشكلات:

name: Learning GitHub Script

on:
  issues:
    types: [opened]

بعد ذلك، ستقوم بتعريف وظيفة تسمى comment تعمل على Linux مع سلسلة من الخطوات:

jobs:
  comment:
    runs-on: ubuntu-latest
    steps:

في هذه الحالة، هناك خطوة واحدة فقط: إجراء GitHub Script.

      - uses: actions/github-script@0.8.0
        with:
          github-token: ${{secrets.GITHUB_TOKEN}}
          script: |
            github.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: "🎉 You've created this issue comment using GitHub Script!!!"
            })

يمكن أن يساعد استخدام GitHub Actions في أتمتة الأحداث التي تقع في مستودعاتك. تخيل أن زائر المستودع فتح مشكلة جديدة تحتوي على معلومات حول خطأ حرج. قد ترغب في شكرهم على لفت انتباهك إلى الخطأ، ولكن يمكن أن تصبح هذه المهمة البسيطة مرهقة لأن مستودعك يجذب المزيد من الزوار. من خلال أتمتة تعليق المشكلة، يمكنك أتمتة عملية شكر الزوار في كل مرة.

باستخدام actions/github-script@0.8.0

يقوم actions/github-script@0.8.0 الإجراء، المعروف أيضا باسم GitHub Script، بجميع الأعمال الصعبة لتكاملك مع واجهة برمجة تطبيقات GitHub.

يتطلب github-token هذا الإجراء الذي يتم توفيره في وقت التشغيل بحيث تتم مصادقة الطلبات. يتم ذلك تلقائيًا لك، بحيث يمكنك استخدام هذا الرمز كما هو.

script يمكن أن تكون المعلمة تقريبا أي JavaScript يستخدم عميل octokit/rest/js المخزن في github. في هذه الحالة، هي مجرد سطر واحد (مقسم عبر خطوط متعددة لقابلة القراءة) الذي ينشئ تعليقًا ثابتًا.

بعد تشغيل سير العمل، يسجل GitHub Script التعليمات البرمجية التي تم تشغيلها للمراجعة في علامة التبويب Actions :

لقطة شاشة لسير عمل برنامج GitHub النصي المكتمل.

قيد التشغيل من ملف منفصل

قد تحتاج أحيانا إلى استخدام كمية كبيرة من التعليمات البرمجية لتلبية سيناريو GitHub Script. عندما يحدث ذلك، يمكنك الاحتفاظ بالنص في ملف منفصل والإشارة إليه من سير العمل بدلاً من وضع كل النص المضمن.

فيما يلي مثال على سير عمل بسيط يستخدم هذه التقنية:

on: push

jobs:
  echo-input:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/github-script@v2
        with:
          script: |
            const path = require('path')
            const scriptPath = path.resolve('./path/to/script.js')
            console.log(require(scriptPath)({context}))

تحقق من المزيد من أمثلة GitHub Script.