Come sviluppatore PHP, è probabile che tu conosca già Composer, il gestore delle dipendenze per PHP. È uno strumento essenziale per gestire i pacchetti, semplificare gli aggiornamenti e garantire che i tuoi progetti funzionino senza intoppi. Un aspetto cruciale dell'uso di Composer è mantenere i pacchetti aggiornati. In questo blog post, discuteremo l'importanza di mantenere aggiornati i pacchetti Composer e come Composer Guardian, uno script open-source, può aiutarti a raggiungere questo obiettivo.

Perché Mantenere Aggiornati i Pacchetti Composer?

  1. Sicurezza: I pacchetti obsoleti possono esporre la tua applicazione a rischi di sicurezza, poiché potrebbero contenere vulnerabilità che sono state risolte nelle versioni più recenti. Mantenendo i pacchetti aggiornati, riduci al minimo il rischio di essere preso di mira dagli hacker.
  2. Prestazioni: Le versioni più recenti dei pacchetti spesso contengono miglioramenti delle prestazioni e ottimizzazioni che possono portare a un'applicazione più veloce ed efficiente. Rimanere aggiornati garantisce che tu stia usando la versione più efficiente di un pacchetto.
  3. Compatibilità: Con l'evolversi di PHP e di altri pacchetti, possono sorgere problemi di compatibilità. Aggiornando regolarmente i pacchetti, riduci al minimo il rischio di incontrare conflitti o problemi legati a funzionalità deprecate.
  4. Correzioni di Bug: Gli aggiornamenti dei pacchetti spesso contengono correzioni di bug che possono risolvere problemi che potresti riscontrare nella tua applicazione. Rimanendo aggiornato, puoi evitare potenziali problemi e garantire un processo di sviluppo più fluido.
  5. Nuove Funzionalità: I pacchetti aggiornati spesso introducono nuove funzionalità che possono beneficiare la tua applicazione. Mantenendo i pacchetti aggiornati, puoi sfruttare queste funzionalità e continuare a innovare nei tuoi progetti.

Presentazione del Composer Guardian

Lo script fornito, chiamato Composer Guardian, è progettato per aiutarti a rimanere aggiornato sugli aggiornamenti dei pacchetti. Legge il tuo file composer.json, controlla gli aggiornamenti e genera un report che descrive quali pacchetti devono essere aggiornati.

Caratteristiche Principali:

  • Recupera l'ultima versione stabile di ogni pacchetto elencato nel tuo file composer.json
  • Salta i pacchetti con certi prefissi (es. 'ext-') o pacchetti esclusi (es. 'php')
  • Mostra una tabella con il nome del pacchetto, la versione attuale e l'ultima versione
  • Opzionalmente invia il report a un canale Slack usando un URL webhook

Utilizzo:

Per usare Composer Guardian, clona semplicemente il repository GitHub ed esegui lo script con le opzioni appropriate da riga di comando o variabili d'ambiente. Ad esempio:

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

Oppure, usando le variabili d'ambiente:

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

Automatizza il controllo: CI/CD pianificata

Eseguire lo script a mano funziona esattamente fino alla settimana in cui te ne dimentichi. Il controllo ripaga solo quando gira secondo una pianificazione, senza che nessuno debba ricordarsene. Composer Guardian termina con un codice di uscita diverso da zero quando ci sono aggiornamenti disponibili, quindi qualsiasi sistema CI può trattare le dipendenze obsolete come un risultato di prima classe: segnalarlo, o far fallire la pipeline.

Con GitHub Actions bastano un cron settimanale più un trigger manuale. Copia questo nel tuo progetto PHP come .github/workflows/composer-guardian.yml e aggiungi l'URL del tuo webhook Slack come secret del repository chiamato 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

Il || true finale è l'unica decisione da prendere. Tienilo e il job resta sempre verde: il report arriva su Slack e nessun deploy viene bloccato da un pacchetto che ha pubblicato una patch durante la notte. Rimuovilo e le dipendenze obsolete fanno fallire la pipeline, la scelta giusta per i team che trattano la deriva delle dipendenze come errore di build invece che come notifica. Nessun default va bene per tutti; scegli la modalità di fallimento con cui puoi convivere.

Su GitLab lo stesso schema è una pipeline pianificata: il repository fornisce un job pronto all'uso in examples/gitlab-ci.yml, configurato per girare solo quando viene attivato da una pianificazione di pipeline. Entrambi i file si trovano nella directory examples/ del repository, pronti da copiare nel tuo progetto.

Conclusione

Mantenere i pacchetti Composer aggiornati è cruciale per mantenere la sicurezza, le prestazioni e la salute generale delle tue applicazioni PHP. Composer Guardian fornisce una soluzione facile da usare per rimanere aggiornati sugli aggiornamenti dei pacchetti e può aiutarti a semplificare il processo di sviluppo. Provalo e vedi come può beneficiare i tuoi progetti. Non dimenticare di mettere una stella al repository se lo trovi utile, e sentiti libero di contribuire o aprire issue se incontri problemi.

Leggi questo dopo

Riferimenti