Exercício – Usar o GitHub Script no GitHub Actions

Concluído

Nesta unidade, você aprenderá mais sobre como usar o Script do GitHub 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 abaixo, você criará um fluxo de trabalho que é executado sempre que alguém adiciona um novo problema ao repositório. Isso adiciona o problema a um painel 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 desse fluxo de trabalho gera um comentário sempre que um problema é criado, conforme 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 do uso de ações é que você pode separar trabalhos em unidades de trabalho menores 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 isso 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:

  • Dê um nome a cada etapa para que seja possível rastreá-las da guia Ações.
  • Use expressões para determinar se uma etapa deve ser executada (opcional).

Neste exemplo, as duas tarefas do 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 etapa Add issue to project board também inclui uma instrução if que especifica que o problema só deve ser adicionado ao painel do projeto se for rotulado como bug.

Use o ambiente Node.js

O Script do GitHub também concede a você acesso a um ambiente completo do Node.js. Embora o Script do GitHub não seja recomendado para escrever a lógica para ações complexas, você pode usá-lo para adicionar mais funcionalidades à API octo/rest.js.

Um exemplo seria usar o Node.js para exibir um guia de contribuição sempre que um problema for aberto. Você pode usar o Sistema de Arquivos do 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 abaixo faz as seguintes alterações no arquivo de fluxo de trabalho:

  • Adiciona a ação action/checkout para ler o arquivo de resposta com modelo localizado em .github/ISSUE_COMMENT/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 Script do GitHub ajudou você a criar uma resposta abrangente para um novo problema que está sendo aberto. Essa resposta também se baseia em um modelo do repositório para que seja fácil de ser alterada no futuro. 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.