Exercício – Utilizar 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 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.