Exercício – Usar o GitHub Script no GitHub Actions
Nesta unidade, você aprenderá mais sobre como usar o GitHub Script para melhorar seu fluxo de trabalho.
Adicionar problemas a um painel de projeto
Além de usar octokit/rest.js para criar comentários e abrir solicitações de pull, você também pode usar octokit/rest.js para gerenciar Projetos do GitHub. No exemplo de código a seguir, você cria um fluxo de trabalho que é executado sempre que alguém adiciona um novo problema ao repositório. Isso adiciona o problema a uma placa de projeto, o que facilita a triagem de seu trabalho.
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"
});
A primeira seção desse fluxo de trabalho cria um comentário sempre que um novo problema é criado, que é abordado na unidade anterior. A próxima seção cria um cartão com base nesse problema e o adiciona ao painel do projeto.
Separar fluxo de trabalho em etapas
Um benefício de usar ações é que você pode separar trabalhos em unidades menores de trabalho chamadas etapas. No fluxo de trabalho de exemplo acima, você pode separar o fluxo de trabalho em duas etapas.
Uma vantagem de dividir o fluxo de trabalho atual em várias etapas é que ele permite que você use expressões para aplicar a lógica. O uso de etapas permite que você crie regras para quando as etapas têm permissão para executar e podem ajudar a otimizar a execução do fluxo de trabalho.
Para separar o fluxo de trabalho de exemplo em etapas:
- Nomeie cada etapa para que você possa rastreá-la na guia Ações .
- Use expressões para determinar se uma etapa deve ser executada (opcional).
Neste exemplo, as duas tarefas no arquivo de fluxo de trabalho original são separadas em etapas individuais:
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"
});
Cada etapa inclui um elemento descritivo name que também ajuda você a rastreá-lo na guia Ações .
A Add issue to project board etapa também inclui uma instrução if que especifica que o problema deve ser adicionado ao quadro de projetos somente se ele for rotulado bug.
Use o ambiente Node.js
O Script do GitHub também concede acesso a um ambiente de Node.js completo. Embora não recomendemos usar o GitHub Script para escrever a lógica para ações complexas, você pode usá-la para adicionar mais funcionalidade à API octo/rest.js.
Por exemplo, você pode usar Node.js para exibir um guia de contribuição sempre que um problema for aberto. Você pode usar o sistema de arquivos Node.js para ler um arquivo e usá-lo como o corpo do comentário do problema. Para acessar arquivos do repositório, inclua a ação actions/checkout como a primeira etapa no fluxo de trabalho.
O exemplo a seguir faz as seguintes alterações no arquivo de fluxo de trabalho:
- Adiciona a ação
action/checkoutpara ler o arquivo de resposta modelo localizado em.github/ISSUE_RESPONSES/comment.md - Adiciona JavaScript para usar o módulo do Sistema de Arquivos do Node.js a fim de posicionar o conteúdo da nossa resposta com modelo como o corpo do comentário do problema
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"
});
O GitHub Script ajudou você a criar uma resposta abrangente para um novo problema. Essa resposta também é baseada em um modelo no repositório, portanto, é fácil de alterar. Por fim, você também incluiu um gatilho para adicionar o problema ao painel do projeto para que ele possa ser facilmente triado para o trabalho futuro.