As vantagens de automatizar as atividades de dependência

Manter as dependências atualizadas em código aberto torna-se mais fácil com ferramentas de automação.

Manter as dependências atualizadas em código aberto é uma tarefa trabalhosa, mas necessária para obter patches para vulnerabilidades de segurança e correções de bugs. Também deve ser feito regularmente para evitar o aumento de dívidas técnicas. Lidar com um grande número de repositórios torna a tarefa mais desafiadora.

Felizmente, ferramentas de automação como Snyk, Renovate e Dependabot podem tornar o trabalho consideravelmente mais fácil. Esses bots podem ser muito úteis na análise de dependências, enviando alertas quando as dependências quebram ou quando versões vulneráveis ​​de bibliotecas externas são usadas.

Neste blog, examinamos mais de perto como Dependabot Ajuda a automatizar a tarefa de manutenção de dependências. Tendo sido adquirido pelo GitHub, o Dependabot está disponível de forma nativa e gratuita e certamente vale a pena tentar se você estiver procurando por uma abordagem mais fácil para manter as dependências atualizadas.

Usando Dependabot

Todos os dias, o Dependabot extrai seus arquivos de dependência e procura por quaisquer requisitos desatualizados. Se alguma dependência estiver desatualizada, o Dependabot abre solicitações pull individuais para aumentar cada uma. Tudo o que você precisa fazer é verificar seus testes, examinar o changelog incluído e as notas de lançamento e decidir se deseja mesclar ou pular a nova versão.

Suporta uma grande seleção de linguagens, incluindo Ruby, Python, JavaScript e PHP. Você pode configurar o Dependabot através de .github/dependabot.yml arquivo, onde você pode definir o cronograma de atualização e limitar o número de PRs abertos, etc. Veja a documentação para obter mais informações sobre as opções de configuração.

Aqui está um exemplo de uma solicitação pull Dependabot:

Captura de tela do Dependabot

Para continuar com esta atualização, apenas aprove o PR e o Dependabot irá mesclá-lo para você. No entanto, se você gerencia vários repositórios, deve revisar manualmente cada solicitação pull e aprová-la para permitir que o Dependabot se mescle para você. Essas lacunas na automação podem ser resolvidas com fastify / github-action-merge-dependdabot ação github.

Automação de Fusões de RP

É possível reduzir o ruído de PR mesclando automaticamente Dependabot PRs que passam nas verificações de CI usando fastify / github-action-merge-dependdabot. Após uma configuração simples, essa ação do Github passa por todos os RPs do Dependabot e os mescla para você. A captura de tela abaixo mostra um Dependabot PR que foi mesclado automaticamente depois que as verificações de CI foram aprovadas.

Captura de tela do Dependabot PR

a Avançar o ecossistema é enorme. Além disso, ele possui centenas de dependências que precisam ser monitoradas e atualizadas conforme surgem novas versões. Fazer isso manualmente não é prático, por isso criamos uma ação para simplificar a tarefa.

Para configurar essa ação em seu fluxo de trabalho Github, primeiro crie um fluxo de trabalho de CI simples:

Configure o CI

name: my-package

On: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/[email protected]
      - uses: actions/[email protected]
        with:
          node-version: 14
      - run: npm ci
      - run: npm test

Este é um exemplo muito básico de execução de testes em ações do Github. Conclua as seguintes etapas:

  • É ativado em push Y pull_request eventos
  • Verifique o repositório
  • Defina a versão do nó fornecida (v14 neste caso)
  • Instale dependências
  • Executar testes

Na prática, você pode configurar várias outras verificações, mas a maioria delas se aplicará a alterações de código. Se você tiver uma boa cobertura de teste em seu repositório, um pipeline verde com testes aprovados deve ser suficiente para lhe dar confiança no aumento da dependência.

Mesclagem automática

Este fluxo de trabalho pode ser estendido para adicionar mesclagem automática:

automerge:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: fastify/[email protected]
        if: ${{ github.actor == 'dependabot[bot]' &&
 github.event_name == 'pull_request' }}
        with:
          github-token: ${{secrets.github_token}}

Aqui, simplesmente criamos outro trabalho no fluxo de trabalho chamado automerge, que faz principalmente o seguinte:

  • Aguarde a conclusão do trabalho de teste (usando precisa) Isso é importante porque atrasa a execução deste trabalho até que os trabalhos especificados sejam concluídos com êxito. Se você tem mais de um trabalho que gostaria de esperar (por exemplo, test Y build), você pode passá-los como uma matriz, como needs: [test, build].
  • Tem um Ele passou usando fastify /[email protected] açao
  • Tem um expressão condicional o que impede que este trabalho seja executado para qualquer evento diferente de pull_request e qualquer PR que não seja do Dependabot.

Observação: a github_token Já é fornecido pelas ações do Github que podemos acessar usando secrets.github_token e fornecimento como entrada.

Excluindo pacotes

Para pacotes sobre os quais deseja ter mais certeza antes de adicionar sua versão, você pode fornecer um exclude entrada para a ação com uma matriz de nomes de pacote. Sempre que encontra um Dependabot PR que atualiza pacotes do exclude lista, pule a mesclagem automática.

Exemplo:

with:
    github-token: ${{secrets.github_token}}
    exclude: ['pkg-1', 'pkg-2']

Altere o método de junção

Por padrão, a ação tentará mesclar automaticamente os RPs do Dependabot usando squash ligação. No entanto, é configurável, então você pode passar outra entrada conforme mostrado abaixo para alterar o combine o método de sua escolha.

Exemplo:

with:
    github-token: ${{secrets.github_token}}
    merge-method: 'merge'

Os valores aceitáveis ​​para a entrada do método de junção são: merge, squash Y rebase.

Como funciona

fastify / github-action-merge-dependdabot é uma ferramenta muito simples, mas útil. Veja como funciona nos bastidores:

  • Quando ativado, verifica se o usuário PR é estritamente dependabot[bot]. Se não, não funciona. Isso é para garantir que nenhum outro RP seja tocado.
  • Verifica se a dependência da ocorrência é uma das excluídas. Nesse caso, não funciona.
  • Se passar nessas duas verificações, ele simplesmente passa no RP e o mescla.

Cuidado com as vulnerabilidades

Automatizar o desembarque de dependência dessa maneira pode introduzir novas vulnerabilidades no código sem que os desenvolvedores saibam disso. Infelizmente, a maioria dos desenvolvedores obteria essas atualizações com pouca ou nenhuma revisão; as ações propostas irão essencialmente automatizar esse comportamento. É importante neutralizar isso por algum escrutínio, por um humano antes do lançamento ou automaticamente, usando ferramentas como Snyk ou auditoria npm.

Conclusão

Melhorias iterativas são melhores do que grandes mudanças. Com essa estratégia, é importante se manter atualizado. Outros aplicativos podem ajudá-lo a conseguir isso, mas Dependabot é um dos mais fáceis de configurar e usar. Também é gratuito e está disponível nativamente no Github e tem um núcleo de código aberto.

Compartilhe este Link:

Compartilhar no facebook
Compartilhar no twitter
Compartilhar no linkedin
Compartilhar no pinterest
Compartilhar no email
Compartilhar no whatsapp
Compartilhar no telegram

Deixe um comentário

Receba nossos preços
e condções direto no seu email

Por favor, preencha os campos abaixo:

Preferência de contato: