تمرين - باستخدام GitHub Script في GitHub Actions
في هذه الوحدة، ستتعرف على المزيد حول كيفية استخدام GitHub Script لتحسين سير العمل الخاص بك.
إضافة مشاكل إلى لوحة مشروع
بالإضافة إلى استخدام octokit/rest.js لإنشاء تعليقات وفتح طلبات السحب، يمكنك أيضاً استخدام octokit/rest.js لإدارة مشاريع GitHub. في نموذج التعليمات البرمجية التالي، يمكنك إنشاء سير عمل يتم تشغيله كلما أضاف أي شخص مشكلة جديدة إلى المستودع. يؤدي ذلك إلى إضافة المشكلة إلى لوحة مشروع، مما يسهل عليك فرز عملك.
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
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.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
ينشئ القسم الأول من سير العمل هذا تعليقا كلما تم إنشاء مشكلة جديدة، والتي تتم تغطيتها في الوحدة السابقة. ينشئ القسم التالي بطاقة استناداً إلى هذه المشكلة وإضافتها إلى لوحة المشروع.
فصل سير العمل إلى خطوات
تتمثل إحدى فوائد استخدام الإجراءات في أنه يمكنك فصل المهام إلى وحدات عمل أصغر تسمى الخطوات. في سير العمل المثال السابق، يمكنك فصل سير العمل إلى خطوتين.
تتمثل إحدى ميزات تقسيم سير العمل الحالي إلى خطوات متعددة في أنه يمكنك من استخدام التعبيرات لتطبيق المنطق. يسمح لك استخدام الخطوات بإنشاء قواعد حول الوقت الذي يسمح فيه بتشغيل الخطوات ويمكن أن يساعد في تحسين تشغيل سير العمل.
لفصل سير العمل المثال إلى خطوات:
- قم بتسمية كل خطوة بحيث يمكنك تعقبها من علامة التبويب Actions .
- استخدم التعبيرات لتحديد ما إذا كان يجب تشغيل خطوة (اختياري).
في هذا المثال، يتم فصل المهمتين في ملف سير العمل الأصلي إلى خطوات فردية:
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Comment on new issue
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
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!!!"
})
- name: Add issue to project board
if: contains(github.event.issue.labels.*.name, 'bug')
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
تتضمن كل خطوة عنصرا وصفيا name يساعدك أيضا على تعقبه من علامة التبويب Actions .
Add issue to project board تتضمن الخطوة أيضا عبارة if تحدد أنه يجب إضافة المشكلة إلى لوحة المشروع فقط إذا تمت تسميتها bug.
استخدام بيئة Node.js
يمنحك GitHub Script أيضا حق الوصول إلى بيئة Node.js كاملة. على الرغم من أننا لا نوصي باستخدام GitHub Script لكتابة المنطق للإجراءات المعقدة، يمكنك استخدامه لإضافة المزيد من الوظائف إلى octo/rest.js API.
على سبيل المثال، يمكنك استخدام Node.js لعرض دليل المساهمة كلما تم فتح مشكلة. يمكنك استخدام نظام الملفات Node.js لقراءة ملف واستخدامه كنص أساسي لتعليق المشكلة. للوصول إلى الملفات داخل المستودع، باشر بتضمين الإجراء actions/checkout كخطوة أولى في سير العمل.
يقوم المثال التالي بإجراء التغييرات التالية على ملف سير العمل:
-
action/checkoutإضافة الإجراء لقراءة ملف الاستجابة المقالب الموجود في.github/ISSUE_RESPONSES/comment.md - إضافة JavaScript لاستخدام وحدة نظام الملفات Node.js لوضع محتويات استجابتنا المقالب كنص أساسي لتعليق المشكلة
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
- name: Comment on new issue
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
const fs = require('fs')
const issueBody = fs.readFileSync(".github/ISSUE_RESPONSES/comment.md", "utf8")
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: issueBody
})
- name: Add issue to project board
if: contains(github.event.issue.labels.*.name, 'bug')
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
ساعدك GitHub Script على إنشاء استجابة شاملة لقضية جديدة. تستند هذه الاستجابة أيضا إلى قالب في المستودع، لذلك من السهل تغييره. وأخيرا، قمت أيضا بتضمين مشغل لإضافة المشكلة إلى لوحة المشروع حتى تتمكن من فرزها بسهولة للعمل في المستقبل.