Exercício – Usar o GitHub Script no GitHub Actions

Concluído

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/checkout para 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.