Como desenvolvedor PHP, e provavel que voce ja conheca o Composer, o gerenciador de dependencias para PHP. E uma ferramenta essencial para gerenciar pacotes, simplificar atualizacoes e garantir que seus projetos rodem sem problemas. Um aspecto crucial do uso do Composer e manter seus pacotes atualizados. Neste post, vamos discutir a importancia de manter seus pacotes Composer atualizados e como o Composer Guardian, um script open-source, pode ajudar voce a alcancar isso.

Por que Manter Pacotes Composer Atualizados?

  1. Seguranca: Pacotes desatualizados podem expor sua aplicacao a riscos de seguranca, pois podem conter vulnerabilidades que foram corrigidas em versoes mais recentes. Ao manter seus pacotes atualizados, voce minimiza o risco de ser alvo de hackers.
  2. Desempenho: Versoes mais recentes de pacotes frequentemente contem melhorias de desempenho e otimizacoes que podem levar a uma aplicacao mais rapida e eficiente. Manter-se atualizado garante que voce esteja usando a versao mais eficiente de um pacote.
  3. Compatibilidade: A medida que o PHP e outros pacotes evoluem, podem surgir problemas de compatibilidade. Ao atualizar seus pacotes regularmente, voce minimiza o risco de encontrar conflitos ou problemas relacionados a funcionalidades depreciadas.
  4. Correcoes de Bugs: Atualizacoes de pacotes frequentemente contem correcoes de bugs que podem resolver problemas que voce pode estar enfrentando em sua aplicacao. Ao manter-se atualizado, voce pode evitar problemas potenciais e garantir um processo de desenvolvimento mais tranquilo.
  5. Novos Recursos: Pacotes atualizados frequentemente introduzem novos recursos que podem beneficiar sua aplicacao. Ao manter seus pacotes atualizados, voce pode aproveitar esses recursos e continuar a inovar em seus projetos.

Apresentando o Composer Guardian

O script fornecido, chamado Composer Guardian, foi projetado para ajudar voce a ficar em dia com as atualizacoes de pacotes. Ele le seu arquivo composer.json, verifica atualizacoes e gera um relatorio detalhando quais pacotes precisam ser atualizados.

Funcionalidades Principais:

  • Busca a versao estavel mais recente de cada pacote listado no seu arquivo composer.json
  • Pula pacotes com certos prefixos (ex.: 'ext-') ou pacotes excluidos (ex.: 'php')
  • Exibe uma tabela com o nome do pacote, versao atual e versao mais recente
  • Opcionalmente envia o relatorio para um canal do Slack usando uma URL de webhook

Uso:

Para usar o Composer Guardian, basta clonar o repositorio GitHub e executar o script com as opcoes apropriadas de linha de comando ou variaveis de ambiente. Por exemplo:

python/python3 composer_guardian.py --composer-file-path /caminho/para/composer.json --slack-webhook-url https://hooks.slack.com/services/...

Ou, usando variaveis de ambiente:

export COMPOSER_FILE_PATH=/caminho/para/composer.json
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
python/python3 composer_guardian.py

Automatize a verificação: CI/CD agendado

Rodar o script manualmente funciona exatamente até a semana em que você esquece. A verificação só se paga quando roda de forma agendada, sem que ninguém precise lembrar. O Composer Guardian encerra com código de saída diferente de zero quando há atualizações disponíveis, então qualquer sistema de CI pode tratar dependências desatualizadas como um resultado de primeira classe: reportar, ou falhar a pipeline de vez.

Com GitHub Actions, um cron semanal mais um gatilho manual bastam. Copie isto para o seu projeto PHP como .github/workflows/composer-guardian.yml e adicione a URL do seu webhook do Slack como um secret do repositório chamado SLACK_WEBHOOK_URL:

name: Composer Guardian

on: schedule: - cron: “0 9 * * 1” # every Monday at 09:00 UTC workflow_dispatch: {}

jobs: check-dependencies: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3

  - uses: actions/setup-python@v4
    with:
      python-version: "3.11"

  - name: Get Composer Guardian
    run: |
      git clone --depth 1 https://github.com/flightlesstux/Composer-Guardian.git /tmp/composer-guardian
      pip install -r /tmp/composer-guardian/requirements.txt

  - name: Check Composer packages
    env:
      COMPOSER_FILE_PATH: ${{ github.workspace }}/composer.json
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
    run: |
      python3 /tmp/composer-guardian/composer_guardian.py || true

O || true no final é a única decisão que você precisa tomar. Mantenha-o e o job fica sempre verde: o relatório chega no Slack e nenhum deploy é bloqueado por um pacote que lançou um patch da noite para o dia. Remova-o e dependências desatualizadas falham a pipeline, que é a escolha certa para times que tratam a deriva de dependências como erro de build em vez de notificação. Nenhum padrão é correto para todos; escolha o modo de falha com o qual você consegue conviver.

No GitLab, o mesmo padrão é uma pipeline agendada: o repositório traz um job pronto em examples/gitlab-ci.yml, configurado para rodar apenas quando disparado por um agendamento de pipeline. Os dois arquivos ficam no diretório examples/ do repositório, prontos para copiar para o seu projeto.

Conclusao

Manter seus pacotes Composer atualizados e crucial para manter a seguranca, o desempenho e a saude geral de suas aplicacoes PHP. O Composer Guardian fornece uma solucao facil de usar para manter-se atualizado com as atualizacoes de pacotes e pode ajudar a simplificar seu processo de desenvolvimento. Experimente e veja como pode beneficiar seus projetos. Nao esqueca de dar uma estrela no repositorio se achar util e sinta-se a vontade para contribuir ou abrir issues se encontrar algum problema.

Leia isto a seguir

Referências