Alıştırma - GitHub Actions’ta GitHub Script’i kullanma
Bu ünitede, iş akışınızı geliştirmek için GitHub Betiğini nasıl kullanabileceğiniz hakkında daha fazla bilgi edineceksiniz.
Proje panosuna sorun ekleme
Octokit/rest.js kullanarak açıklama oluşturma ve çekme isteklerini açmanın yanı sıra GitHub Projelerini yönetmek için octokit/rest.js de kullanabilirsiniz. Aşağıdaki kod örneğinde, depoya yeni bir sorun ekleyen herkes için çalışan bir iş akışı oluşturacaksınız. Bu, sorunu proje panosuna ekler ve çalışmanızı önceliklendirmenizi kolaylaştırır.
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"
});
Bu iş akışının ilk bölümü, önceki ünitede ele aldığımız yeni bir sorun oluşturulduğunda bir açıklama oluşturur. Sonraki bölümde bu sorunu temel alan bir kart oluşturulur ve bu kart proje panosuna eklenir.
İş akışını adımlara ayırma
Eylemleri kullanmanın bir avantajı, işleri adım adı verilen daha küçük iş birimlerine ayırabilmenizdir. Yukarıdaki örnek iş akışında, iş akışını iki adıma ayırabilirsiniz.
Geçerli iş akışını birden çok adıma ayırmanın avantajlarından biri, mantığı uygulamak için ifadeleri kullanmanıza olanak sağlamasıdır. Adımları kullanmak, adımların çalışmasına izin verildiğinde kurallar oluşturmanıza olanak tanır ve iş akışı çalıştırmanızı iyileştirmenize yardımcı olabilir.
Örnek iş akışını adımlara ayırmak için:
- Eylemler sekmesinden izleyebilebilmeniz için her adımı adlandırın.
- Bir adımın yürütülip yürütülmeyeceğini belirlemek için ifadeleri kullanın (isteğe bağlı).
Bu örnekte, özgün iş akışı dosyasındaki iki görev ayrı adımlara ayrılmıştır.
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"
});
Her adım, Eylemler sekmesinden izlemenize de yardımcı olan açıklayıcı name bir öğe içerir.
Adım Add issue to project board ayrıca sorunun yalnızca etiketliyse ifproje panosuna eklenmesi gerektiğini belirten bir bug deyim içerir.
Node.js ortamını kullanma
GitHub Betiği, tam bir Node.js ortamına erişmenizi de sağlar. GitHub Betiği karmaşık eylemler için mantık yazmak için önerilmiyor olsa da, octo/rest.js API'sine daha fazla işlevsellik eklemek için bunu kullanabilirsiniz.
Bir sorun her açıldığında katkıda bulunma kılavuzunu görüntülemek için Node.js kullanmak buna örnek olarak gösterilebilir. Node.js Dosya Sistemi'ni kullanarak bir dosyayı okuyabilir ve sorun açıklamasının gövdesi olarak kullanabilirsiniz. Depodaki dosyalara erişmek için eylemi iş akışına actions/checkout ilk adım olarak ekleyin.
Aşağıdaki örnek, iş akışı dosyasında aşağıdaki değişiklikleri yapar:
-
action/checkoutkonumunda bulunan şablonlu yanıt dosyasını okumak için eylemi ekler.github/ISSUE_COMMENT/comment.md - Şablonlu yanıtımızın içeriğini sorun açıklamasının gövdesi olarak yerleştirmek için Node.js Dosya Sistemi modülünü kullanmak için JavaScript ekler
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 Betiği, açılan yeni bir soruna kapsamlı bir yanıt oluşturmanıza yardımcı oldu. Bu yanıt, depodaki bir şablonu da temel alır, bu nedenle gelecekte kolayca değiştirilebilir. Son olarak, sorunu proje panosuna eklemek için bir tetikleyici de eklediniz, böylece gelecekteki çalışmalarda kolayca önceliklendirme yapabilirsiniz.