Como usar ações do Github para chamar webhooks e controlar a Internet a partir de seus RP

As Ações do Github são um novo recurso da ferramenta de código favorita de todos. Embora demorem um pouco para se acostumar, são ferramentas muito poderosas para CI (integração contínua) e outras verificações em suas solicitações pull.

Aqui, falarei sobre como usar o Github Actions para chamar webhooks. E como você sabe, uma vez que você pode chamar um webhook, a internet é sua ostra.

Por que não os velhos webhooks?

Agora, você pode estar dizendo: “O Github já tem webhooks, por que se preocupar com ações?” A resposta é simples: controle de versão.

Se você trabalha com qualquer outra pessoa em sua base de código, deseja rastrear como as mudanças na configuração ocorreram e quem é o responsável.

Com as configurações básicas do Github, você não sabe essas coisas – alguém define e configura um webhook. Talvez falhe um dia, e daí?

Com o Github Actions, você não precisa deixar seu editor de texto para ver o que acontece quando você envia seu código.

O outro motivo é que há um mundo de coisas que você pode fazer a partir do Github Actions, e algumas ideias estão abaixo. Eu precisava de webhooks para um projeto recente, mas há recursos para executar testes, coletar cobertura de código, linting e muito mais.

Visto que muitos de nós usamos o Github todos os dias, não custa nada familiarizar-se com esta nova ferramenta.

Então vamos começar. A primeira coisa que você precisa fazer é criar um .github > workflows pasta. Dentro dele, colocaremos nossas ações. Não importa como você chame o arquivo – o GitHub selecionará todas as ações que você colocar nesta pasta especial.

Aqui está o conteúdo do meu arquivo webhook. Eu tenho um endpoint de API “Test pedant” que verifica os arquivos do meu PR e deixa um comentário pedante se eu não tiver escrito nenhum teste.

# This is a basic workflow that is manually triggered
name: Test reminder

# Controls when the action will run. Workflow runs when manually triggered using the UI or API.
on:
  # Trigger the workflow on push or pull request,
  # but only for the master branch
  pull_request:
    branches: [ main ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  test_commentary:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    # Runs a single command using the runners shell
    - name: Webhook
      uses: distributhor/workflow-webhook
      with:
        url: "http://amberisgreat.ngrok.io/api/test_pedant"
        json: '{ "repository": "${{github.event.repository.full_name}}", "number": "${{github.event.number}}", "created_at": "${{github.event.pull_request.created_at}}", "updated_at": "${{github.event.pull_request.updated_at}}" }'

De cima para baixo:

  • Primeiro, damos um nome à ação (Test reminder)
  • Em seguida, especificamos quando queremos que ele seja executado (on) Você não precisa escolher ramos. Se você quiser para todos os RPs, basta fazer on: [pull_request]. Github tem uma lista enorme de eventos que podem desencadear uma ação.
  • jobs é uma lista de empregos. Onde eu tenho test_commentary você colocaria uma chave para o seu trabalho (pode ser qualquer coisa). Seu trabalho provavelmente será executado em ubuntu-latest mas verifique o próprio trabalho. Um trabalho pode ter várias etapas. O meu tem um.
  • Dê ao seu passo um name (também pode ser qualquer coisa)
  • uses refere-se a onde o código está armazenado. (Você pode escrever suas próprias ações se quiser!)
  • Ações diferentes levam a entradas diferentes – esta usa with e as teclas de entrada.

Estou usando um função webhook de “distributhor”. O Github ainda não tem um trabalho oficial de webhook, mas talvez tenha quando você ler isso.

Esta ação requer pelo menos uma entrada: url, o ponto de extremidade que você deseja atingir com esta ação. json refere-se aos dados que você vai enviar.

A carga útil do Github Actions

Esta informação foi um pouco complicada de localizar nos documentos de Ações do Github.

A carga útil para uma ação Github está aninhada em github.event. Você também precisa saber de qual ação está enviando dados – pois existem várias teclas disponíveis em event dependendo de qual ação você está se referindo (listada como action nos documentos de carga útil).

Os documentos relevantes são aqui.

Minha biblioteca não me deixava apenas empurrar tudo event no meu webhook – é por isso que você vê as chaves especificamente puxadas. Talvez a ação que você escreve leve ao todo event (e então você pode me falar sobre isso!)

E isso é tudo que você precisa! Contanto que seu webhook responda com 200, sua ação receberá uma marca de seleção verde.

Github Action em execução

Se sua ação falhar, você pode verificar o que deu errado na guia Ações. O meu falha porque não tenho mais meu túnel ngrok funcionando.

Falha de ação do Github

Não relacionado a este recurso, é muito útil ser capaz de abrir uma porta hospedada localmente para serviços externos.

Nesse caso, quero que minha ação Github acione meu host local, para que eu possa testar a carga útil e a execução de meu webhook. Quando eu colocar isso em produção, vou substituir o url com a versão de produção do código.

Ngrok para o resgate! Ngrok é um serviço que cria um túnel para seu host local. Também é grátis.

Minha empresa paga para que alguns de nós tenhamos URLs reservados (por causa das coisas de desenvolvimento web para celular), mas para seus propósitos aqui, o Grátis é ótimo.

Somente brew install ngrok (ou qualquer gerenciador de pacotes que você usa), gire seu host local servindo o código do webhook e ngrok http <your-port>.

Agora você criou uma conexão pública com seu host local. O Github poderá acessá-lo e você poderá testar sua execução. Esteja ciente de que os túneis gratuitos expiram depois de um tempo e exigirão uma nova URL.

Se isso lhe der algumas idéias interessantes sobre o que você pode fazer com as mudanças em seu Github, você deve verificar o Marketplace de ações.

Nele, você descobrirá que algumas pessoas muito espertas sonharam com todos os tipos de coisas que acontecem quando os eventos são acionados em seu Github. Aqui você encontrará auto-linters, conexões Jira, ferramentas de implantação e muito, muito mais.

Boas ações!