Todas as receitas
Receita de 5 minutos

Os PRs do Dependabot, no seu telemóvel

Quando o Dependabot abre um pull request, o Zenhook envia o título, o repositório e um botão que abre o PR. Nenhum GitHub App e nenhuma permissão de escrita no repositório.

Gatilho

Novo PR do Dependabot

Destino

Um canal do Zenhook

Ação

Tocar em “Ver o PR”

1. Crie um canal

Crie um canal chamado dependabot e copie o URL completo do webhook nas definições do canal.

2. Teste o canal

Substitua o marcador e execute este comando uma vez. O alerta de exemplo deve chegar de imediato no seu telemóvel.

bash
curl -X POST "O_SEU_URL_DE_WEBHOOK_DO_ZENHOOK" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Bump lodash from 4.17.20 to 4.17.21",
    "level": "info",
    "emoji": "package",
    "source": "Dependabot",
    "message": "Atualização proposta em acme/api",
    "linkUrl": "https://github.com/acme/api/pull/42",
    "linkText": "Ver o PR"
  }'

3. Adicione um secret do Dependabot

No GitHub, abra Settings → Secrets and variables → Dependabot. Crie um secret de repositório chamado ZENHOOK_WEBHOOK_URL e cole o URL completo do webhook do canal.

Use um secret do Dependabot, e não um secret normal do Actions. O GitHub só expõe os secrets do Dependabot aos workflows iniciados pelo Dependabot.

4. Copie o workflow

Guarde este ficheiro como .github/workflows/zenhook-dependabot.yml na sua branch padrão.

yaml
name: Zenhook - Alertas do Dependabot

on:
  pull_request:
    types: [opened, reopened]

permissions:
  contents: read

jobs:
  notify:
    if: github.event.pull_request.user.login == 'dependabot[bot]'
    runs-on: ubuntu-latest
    steps:
      - name: Enviar o pull request ao Zenhook
        env:
          ZENHOOK_WEBHOOK_URL: ${{ secrets.ZENHOOK_WEBHOOK_URL }}
          PR_TITLE: ${{ github.event.pull_request.title }}
          PR_URL: ${{ github.event.pull_request.html_url }}
          PR_NUMBER: ${{ github.event.pull_request.number }}
          REPOSITORY: ${{ github.repository }}
        run: |
          jq -n \
            --arg title "$PR_TITLE" \
            --arg url "$PR_URL" \
            --arg number "$PR_NUMBER" \
            --arg repository "$REPOSITORY" \
            '{
              title: $title,
              level: "info",
              emoji: "package",
              source: "Dependabot",
              message: ("Atualização proposta em " + $repository),
              fields: [
                { label: "Repositório", value: $repository },
                { label: "Pull request", value: ("#" + $number) }
              ],
              linkUrl: $url,
              linkText: "Ver o PR"
            }' | curl --fail-with-body --retry 2 \
              -X POST "$ZENHOOK_WEBHOOK_URL" \
              -H "Content-Type: application/json" \
              --data-binary @-

O workflow não descarrega nem executa o código do pull request. O token do GitHub é só de leitura; limita-se a reencaminhar os metadados que já estão no evento para a o seu URL privado do Zenhook.

Um repositório ou vários?

  • Um: adicione o secret e o workflow a esse repositório.
  • Vários: crie um secret do Dependabot ao nível da organização, autorize apenas os repositórios escolhidos e adicione o mesmo workflow em cada um.

Esta receita envia um alerta e um link. Não aprova nem faz merge do PR. Consulte a documentação do GitHub sobre os workflows do Dependabot e os secrets do Dependabot.