Exercício – Utilizar o GitHub Script no GitHub Actions
Nesta unidade, você aprenderá mais sobre como usar o script do GitHub para melhorar seu fluxo de trabalho.
Adicionar problemas a um quadro de projeto
Além de usar octokit/rest.js para criar comentários e abrir solicitações pull, você também pode usar octokit/rest.js para gerenciar projetos do GitHub. No exemplo de código abaixo, você criará um fluxo de trabalho que será executado sempre que alguém adicionar um novo problema ao repositório. Isso adiciona o problema a um quadro de projeto, facilitando a triagem do 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 deste fluxo de trabalho cria um comentário sempre que um novo problema é criado, que abordamos na unidade anterior. A próxima seção cria um cartão com base nesse problema e o adiciona ao quadro do projeto.
Separe o 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 anterior, 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 lógica. O uso de etapas permite que você crie regras sobre quando as etapas podem ser executadas e pode 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 foram 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 a rastreá-la na guia Ações.
A Add issue to project board
etapa também inclui uma if
instrução que especifica que o problema só deve ser adicionado ao quadro do projeto se estiver rotulado bug
.
Usar o ambiente Node.js
O script GitHub também concede acesso a um ambiente de Node.js completo. Embora o script GitHub não seja recomendado para escrever a lógica para ações complexas, você pode usá-lo para adicionar mais funcionalidade à API octo/rest.js.
Um exemplo seria usar o Node.js para exibir um guia de contribuição sempre que uma questão é aberta. Você pode usar o Node.js File System para ler um arquivo e usá-lo como o corpo do comentário do problema. Para acessar arquivos dentro do repositório, inclua a actions/checkout
ação como a primeira etapa no fluxo de trabalho.
O exemplo abaixo faz as seguintes alterações no arquivo de fluxo de trabalho:
- Adiciona a
action/checkout
ação para ler o arquivo de resposta de modelo localizado em.github/ISSUE_COMMENT/comment.md
- Adiciona JavaScript para usar o módulo Node.js File System para colocar o conteúdo de nossa resposta modelada 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 script do GitHub ajudou você a criar uma resposta abrangente para um novo problema que estava sendo aberto. Essa resposta também é baseada em um modelo no repositório, por isso é fácil de alterar no futuro. Finalmente, você também incluiu um gatilho para adicionar o problema ao quadro do projeto para que você possa facilmente triá-lo para trabalhos futuros.