Skip to main content

Simplifique as atualizações de dependências com Mergify e Snyk

Escrito por
blog feature snyk container custom base recommendations

23 de agosto de 2023

0 minutos de leitura

Gerenciar as dependências de um projeto é uma tarefa que exige esforço e atenção constantes. Ao manter um projeto, você provavelmente já se preocupou com alguma destas situações:

  • Uma dependência lança novas versões com recursos ou correções de bugs.

  • Uma dependência apresenta vulnerabilidades de segurança e lança correções em versões mais recentes.

  • Manter as versões das dependências atualizadas para evitar código desatualizado.

Felizmente, conseguimos automatizar em certa medida o gerenciamento de dependências com bots do GitHub e soluções como Dependabot e GreenKeeper.

No entanto, esses bots automatizam principalmente a criação de uma solicitação de pull request com as alterações propostas. A mesclagem de cada uma ainda é um processo manual que exige atenção para evitar mesclar uma solicitação que interrompa a CI.

O que é melhor do que automatizar as atualizações de dependências? Automatizar a mesclagem.

O que é Mergify?

Mergify é uma ferramenta poderosa e inovadora criada para automatizar seus workflows do GitHub, permitindo que você se concentre mais em desenvolver software de qualidade e menos em tarefas administrativas complicadas. Em essência, Mergify é um serviço de automação de solicitações de pull request que ajuda você a criar workflows personalizados com base em condições definidas por você. Isso pode incluir mesclar, fechar, comentar, revisar, rotular, encaminhar, fazer backport e rebase de solicitações de pull request automaticamente, entre muitas outras ações.

Depois de configurado, Mergify assume algumas das partes mais tediosas da revisão de código e do gerenciamento de projetos. Ele ajuda a manter seu repositório organizado, garante que a branch master continue íntegra e reduz o tempo perdido com processos manuais que poderiam ser automatizados.

Na próxima seção, mostraremos como aproveitar o Mergify para transformar as atualizações de dependências de um pesadelo em algo muito mais simples.

Sobre as PRs de atualização de dependências do Snyk

Quer manter as correções de vulnerabilidades em dia e evitar dependências desatualizadas? É aí que o Snyk entra.

Snyk é uma plataforma de segurança feita para desenvolvedores, que permite que eles assumam a responsabilidade pela segurança de suas aplicações. Embora seja conhecido pelos recursos de análise de vulnerabilidades, o Snyk também oferece uma experiência simples para gerenciar atualizações de dependências, especialmente por meio de solicitações de pull request automatizadas.

Como funcionam as PRs de atualização de dependências do Snyk? Em intervalos regulares, o Snyk verifica automaticamente todas as dependências do seu projeto em busca de atualizações disponíveis. Ao encontrar uma versão mais recente, ele cria uma solicitação de pull request com as alterações necessárias diretamente no seu repositório do GitHub. A solicitação inclui informações detalhadas sobre a atualização, como o histórico de divergência da dependência e a data de lançamento da versão mais recente, para que você possa analisá-la por completo antes de mesclar as alterações.

Upgrading dependencies with automatic PRs from Snyk.

Primeiros passos

Para começar, siga algumas etapas simples:

  1. Escolha um dos seus repositórios de código do GitHub para instalar o workflow automatizado de atualização e mesclagem de dependências.

  2. Crie uma conta no Mergify e convide o app do Mergify para GitHub para o seu repositório.

  3. Crie uma conta no Snyk e conecte seu repositório do GitHub a ela.

Ative a atualização automática de dependências com o Snyk

Abra o app do Snyk, continue o cadastro se necessário e conecte o repositório que você quer automatizar importando um repositório do GitHub. Acesse a página Projects na interface do Snyk, selecione Add projects, escolha os repositórios de código que deseja importar para o Snyk e clique em Add selected repositories.

Import GitHub repositories to Snyk.

Depois que o projeto for importado, ative as PRs de atualização de dependências do Snyk selecionando Settings, depois Integrations e, por fim, GitHub:

GitHub integrations menu in the Snyk app UI.

Em seguida, role a página para baixo até encontrar a seção de configuração Automatic dependency upgrade PRs e ative o recurso:

Configure automatic fix pull request policies with Snyk.

Agora que o bot do Snyk está abrindo automaticamente solicitações de pull request para atualizar as dependências do projeto, vamos configurar o Mergify para automatizar a mesclagem dessas solicitações.

Crie uma política de mesclagem automática no Mergify

Conecte-se ao Mergify com sua conta do GitHub, como você fez com o Snyk. Em seguida, vamos adicionar os repositórios que serão gerenciados pelo Mergify.

Para editar os repositórios Git que você quer gerenciar com o Mergify, você será redirecionado à página de aplicativos do GitHub, onde poderá escolher cada um deles no menu suspenso:

GitHub Mergify permissions screen highlighting “Only select repositories” and the “Select repositories” button.

Depois de selecionar os repositórios aos quais quer adicionar o Mergify, clique no botão Save.

Em seguida, precisamos configurar a política de mesclagem do projeto. Definimos essa configuração no arquivo .mergify.yml, localizado na raiz do repositório. Dica: você também pode colocar o arquivo no diretório .github/ junto com outros workflows e configurações relacionados à CI.

O arquivo de configuração YAML do Mergify é composto pelos seguintes elementos:

  • Filas de mesclagem - Uma fila na qual as PRs aguardam para ser mescladas, uma a uma, na sua branch principal, sem gerar conflitos de mesclagem nem alterações que causem problemas.

  • Regras de solicitação de pull request - Como o nome sugere, um conjunto de condições para validar solicitações de pull request e, em seguida, executar ações, como movê-las para uma fila de mesclagem.

Veja um exemplo simples:

pull_request_rules:
  - name: automatic merge on approval
    conditions:
      - "#approved-reviews-by>=1"
    actions:
      merge:
        method: merge

A configuração acima mescla a solicitação de pull request quando a condição é atendida, ou seja, quando pelo menos uma pessoa revisora aprova a solicitação.

Sem o Mergify, uma pessoa revisora poderia aprovar rapidamente as alterações da solicitação de pull request, mas teria que esperar a aprovação de todas as verificações de CI — ou até que quem criou a solicitação percebesse que a revisão aprovada já estava pronta para ser mesclada. A mesclagem é manual.

Com as condições acima e o Mergify, a solicitação de pull request será mesclada automaticamente na branch principal assim que for aprovada.

Mescle automaticamente as solicitações de pull request de atualização do Snyk

Vamos aplicar a mesma automação às solicitações de pull request do Snyk que atualizam dependências. O arquivo de configuração do Mergify ficará assim:

queue_rules:
  - name: Snyk PRs Queue
    conditions:
      - "check-success ~= .*"

pull_request_rules:
  - name: Automatic merge Snyk PRs on Status Checks passing
    conditions:
      - title~=^\[Snyk\]
      - head~=^snyk-fix
      - base=main
    actions:
      queue:
        name: "Snyk PRs Queue"
      label:
        add:
          - "auto-merge"

Vamos analisar cada parte para entender o que está acontecendo:

  • Uma nova fila de mesclagem chamada Snyk PRs Queue é criada. As solicitações de pull request só serão mescladas quando todos os testes de status da CI forem aprovados. Isso garante que nossos testes e outras automações executadas na CI sejam concluídos com sucesso e que as versões atualizadas das dependências não introduzam alterações que interrompam o funcionamento (pelo menos, de acordo com nossos testes).

  • Para entrar na Snyk PRs Queue, as solicitações de pull request precisam atender às seguintes condições:

    • O título da solicitação de pull request começa com [Snyk].

    • O nome da branch de origem da solicitação de pull request começa com snyk-fix.

    • O nome da branch de destino (aquela para a qual a solicitação de pull request será mesclada) é main.

Se as condições acima forem atendidas, adicionamos à solicitação de pull request o rótulo do GitHub “auto-merge” e a enviamos para a Snyk PRs Queue.

Vamos enviar o novo arquivo de configuração do Mergify para o repositório e ver a mágica acontecer quando o Snyk abrir uma nova solicitação de pull request:

A Snyk dependency upgrade pull request gets matched with a Mergify CI check integration that shows a rule condition matching and automatically gets merged when the CI tests finish running.

Dica: use as políticas de atualização de dependências do Snyk para reduzir o volume de notificações

Automatizar solicitações de pull request para dependências pode rapidamente sobrecarregar sua equipe com um grande volume de PRs. É essencial encontrar um equilíbrio para que as atualizações não atrapalhem o workflow da equipe. É aí que as políticas de atualização de dependências do Snyk ajudam.

1. Limite o número de PRs de atualização simultâneas: o Snyk permite controlar o volume de solicitações de pull request, limitando quantas PRs automatizadas de atualização podem ficar abertas ao mesmo tempo. Assim, sua equipe não fica soterrada por solicitações de atualização e pode se concentrar nas tarefas de desenvolvimento mais importantes.

2. Escolha quais pacotes você não quer atualizar: nem todos os pacotes precisam ou devem receber atualizações frequentes. Às vezes, atualizar continuamente para a versão mais recente pode quebrar seu código ou deixá-lo instável. Nesses casos, o Snyk permite excluir pacotes específicos das atualizações automáticas. Assim, você controla o cronograma de atualização das dependências e se concentra nos pacotes mais importantes para o seu projeto.

3. Limite o escopo das alterações atualizando apenas versões menores e de patch: lidar com atualizações de versões principais pode dar mais trabalho do que vale a pena, pois muitas vezes exige alterações adicionais no código devido a mudanças incompatíveis. Com o Snyk, você pode optar por atualizar automaticamente apenas versões menores e de patch. Assim, sua aplicação permanece estável e ainda recebe melhorias compatíveis e correções de segurança.

A adoção dessas três políticas ajuda a reduzir o volume de atualizações de dependências, facilita o acompanhamento de atualizações essenciais pela equipe de desenvolvimento e evita que a base de código vire um caos. Lembre-se: o objetivo das atualizações automatizadas é eliminar o trabalho manual, não transferi-lo para outro lugar. Aproveite os recursos avançados do Snyk para manter um workflow de CI organizado e sem distrações desnecessárias.

Automatize e esqueça

Mesclar automaticamente as atualizações de dependências pode aumentar a agilidade e a produtividade da sua equipe — e é uma ótima oportunidade para automatizar processos.

Com as PRs de atualização de dependências do Snyk, você não precisa mais acompanhar e verificar manualmente as atualizações. Diga adeus ao excesso de atualizações de dependências e adote um processo mais simples, seguro e organizado. Juntos, Mergify e Snyk podem levar seu workflow a outro nível.

Comece a resolver desafios de capture the flag

Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.