Ως PHP developer, είναι πιθανό να είσαι ήδη εξοικειωμένος με το Composer, τον dependency manager για PHP. Είναι ένα απαραίτητο εργαλείο για τη διαχείριση πακέτων, τον εξορθολογισμό των ενημερώσεων και τη διασφάλιση ότι τα projects σου τρέχουν ομαλά. Μια κρίσιμη πτυχή της χρήσης του Composer είναι η διατήρηση των πακέτων σου ενημερωμένων. Σε αυτό το blog post, θα συζητήσουμε τη σημασία της διατήρησης των Composer πακέτων σου ενημερωμένων και πώς το Composer Guardian, ένα open-source script, μπορεί να σε βοηθήσει να το πετύχεις.

Γιατί να Κρατάς τα Composer Packages Ενημερωμένα;

  1. Ασφάλεια: Τα ξεπερασμένα πακέτα μπορούν να εκθέσουν την εφαρμογή σου σε κινδύνους ασφαλείας, καθώς μπορεί να περιέχουν ευπάθειες που έχουν αντιμετωπιστεί σε νεότερες εκδόσεις. Διατηρώντας τα πακέτα σου ενημερωμένα, ελαχιστοποιείς τον κίνδυνο να γίνεις στόχος hackers.
  2. Απόδοση: Οι νεότερες εκδόσεις πακέτων συχνά περιέχουν βελτιώσεις απόδοσης και βελτιστοποιήσεις που μπορούν να οδηγήσουν σε ταχύτερη, πιο αποδοτική εφαρμογή. Η παραμονή ενημερωμένος διασφαλίζει ότι χρησιμοποιείς την πιο αποδοτική έκδοση ενός πακέτου.
  3. Συμβατότητα: Καθώς η PHP και άλλα πακέτα εξελίσσονται, μπορεί να προκύψουν προβλήματα συμβατότητας. Ενημερώνοντας τακτικά τα πακέτα σου, ελαχιστοποιείς τον κίνδυνο να συναντήσεις συγκρούσεις ή προβλήματα που σχετίζονται με καταργημένη λειτουργικότητα.
  4. Διορθώσεις Σφαλμάτων: Οι ενημερώσεις πακέτων συχνά περιέχουν διορθώσεις σφαλμάτων που μπορούν να επιλύσουν προβλήματα που μπορεί να αντιμετωπίζεις στην εφαρμογή σου. Παραμένοντας ενημερωμένος, μπορείς να αποφύγεις πιθανά προβλήματα και να διασφαλίσεις μια ομαλότερη διαδικασία ανάπτυξης.
  5. Νέα Χαρακτηριστικά: Τα ενημερωμένα πακέτα συχνά εισάγουν νέα χαρακτηριστικά που μπορούν να ωφελήσουν την εφαρμογή σου. Διατηρώντας τα πακέτα σου ενημερωμένα, μπορείς να επωφεληθείς από αυτά τα χαρακτηριστικά και να συνεχίσεις να καινοτομείς στα projects σου.

Παρουσιάζοντας το Composer Guardian

Το παρεχόμενο script, που ονομάζεται Composer Guardian, έχει σχεδιαστεί για να σε βοηθά να παραμένεις ενήμερος για τις ενημερώσεις πακέτων. Διαβάζει το αρχείο composer.json σου, ελέγχει για ενημερώσεις και παράγει μια αναφορά που περιγράφει ποια πακέτα χρειάζονται ενημέρωση.

Βασικά Χαρακτηριστικά:

  • Ανακτά την τελευταία σταθερή έκδοση κάθε πακέτου που αναφέρεται στο αρχείο composer.json σου
  • Παραλείπει πακέτα με συγκεκριμένα prefixes (π.χ., 'ext-') ή εξαιρούμενα πακέτα (π.χ., 'php')
  • Εμφανίζει έναν πίνακα με το όνομα του πακέτου, την τρέχουσα έκδοση και την τελευταία έκδοση
  • Προαιρετικά στέλνει την αναφορά σε ένα Slack channel χρησιμοποιώντας ένα webhook URL

Χρήση:

Για να χρησιμοποιήσεις το Composer Guardian, απλά κάνε clone το GitHub repository και τρέξε το script με τις κατάλληλες επιλογές γραμμής εντολών ή μεταβλητές περιβάλλοντος. Για παράδειγμα:

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

Ή, χρησιμοποιώντας μεταβλητές περιβάλλοντος:

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

Αυτοματοποίησε τον έλεγχο: CI/CD σε πρόγραμμα

Το να τρέχεις το script με το χέρι δουλεύει ακριβώς μέχρι την εβδομάδα που θα το ξεχάσεις. Ο έλεγχος αποδίδει μόνο όταν τρέχει σε πρόγραμμα, χωρίς να χρειάζεται να τον θυμάται κανείς. Το Composer Guardian τερματίζει με μη μηδενικό exit code όταν υπάρχουν διαθέσιμες ενημερώσεις, οπότε οποιοδήποτε σύστημα CI μπορεί να αντιμετωπίσει τα παρωχημένα dependencies ως κανονικό αποτέλεσμα: να το αναφέρει, ή να αποτύχει το pipeline.

Με το GitHub Actions, ένα εβδομαδιαίο cron συν ένας χειροκίνητος trigger αρκούν. Αντέγραψε το παρακάτω στο PHP project σου ως .github/workflows/composer-guardian.yml και πρόσθεσε το URL του Slack webhook σου ως repository secret με όνομα 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

Το τελικό || true είναι η μόνη απόφαση που πρέπει να πάρεις. Κράτησέ το και το job μένει πάντα πράσινο: η αναφορά φτάνει στο Slack και κανένα deploy δεν μπλοκάρεται από ένα πακέτο που έβγαλε patch release μέσα στη νύχτα. Αφαίρεσέ το και τα παρωχημένα dependencies ρίχνουν το pipeline, που είναι η σωστή επιλογή για ομάδες που αντιμετωπίζουν το dependency drift ως σφάλμα build και όχι ως ειδοποίηση. Κανένα default δεν είναι σωστό για όλους. Διάλεξε τον τρόπο αποτυχίας με τον οποίο μπορείς να ζήσεις.

Στο GitLab, το ίδιο μοτίβο είναι ένα προγραμματισμένο pipeline: το repository παρέχει ένα έτοιμο job στο examples/gitlab-ci.yml, ρυθμισμένο να τρέχει μόνο όταν ενεργοποιείται από ένα pipeline schedule. Και τα δύο αρχεία βρίσκονται στον κατάλογο examples/ του repository, έτοιμα να αντιγραφούν στο project σου.

Συμπέρασμα

Η διατήρηση των Composer πακέτων σου ενημερωμένων είναι κρίσιμη για τη διατήρηση της ασφάλειας, της απόδοσης και της συνολικής υγείας των PHP εφαρμογών σου. Το Composer Guardian παρέχει μια εύχρηστη λύση για να παραμένεις ενημερωμένος με τις ενημερώσεις πακέτων και μπορεί να σε βοηθήσει να εξορθολογίσεις τη διαδικασία ανάπτυξής σου. Δοκίμασέ το και δες πώς μπορεί να ωφελήσει τα projects σου.

Διαβάστε στη συνέχεια

Αναφορές