Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Composer, le cercle vertueux des dépendances

Composer, le cercle vertueux des dépendances

L’objectif de ce talk sera de montrer comment utiliser Composer et l’intégration continue pour éviter les incompatibilités.

La vérification des versions viables les plus basses pour s’assurer que toute installation sera un succès et ainsi assurer la qualité du code fourni.

Stéphane HULARD

March 23, 2016
Tweet

More Decks by Stéphane HULARD

Other Decks in Programming

Transcript

  1. COMPOSER, LE CERCLE VERTUEUX DES DÉPENDANCES
    AFUP Lyon / 23 mars 2016

    View Slide

  2. QUI SUIS-JE ?
    CONSULTANT TECHNIQUE WEB
    Développements spéci ques, création de site, constitution
    d'équipes, accompagnement, méthodes agiles...




    https://chstudio.fr
    @s_hulard
    http://github.com/shulard
    [email protected]

    View Slide

  3. LES 10 PROCHAINES MINUTES...
    1. Composer ?
    2. L'option --prefer-lowest
    3. Cas réel avec HttpPlug

    View Slide

  4. COMPOSER ?

    View Slide

  5. QU'EST-CE QUE C'EST ?
    Composer is a tool for dependency management in PHP. It allows
    you to declare the libraries your project depends on and it will
    manage (install/update) them for you.
    getcomposer.org

    View Slide

  6. LA GESTION DE DÉPENDANCES
    Déclarer les librairies utilisées dans votre projet
    Trouver et installer les versions compatibles par rapport à
    l'environnement
    {
    "name": "symfony/framework-standard-edition",
    "require": {
    "php": ">=5.3.9",
    "symfony/console": "2.8.*",
    "symfony/yaml": "2.8.*"
    },
    "require-dev": {
    "phpunit/phpunit": "5.0"
    }
    }

    View Slide

  7. ASSURER LA COMPATIBILITÉ
    Différents environnements, différentes contraintes :
    Versions de PHP
    Extensions (xml, json, regex...)
    Versions patch, mineure, majeure
    Cassures de compatibilités (BC break)
    Garantie de fonctionnement de l'API publique
    Semantic Versioning

    View Slide

  8. L'OPTION `--PREFER-LOWEST`

    View Slide

  9. QU'EST-CE QUE C'EST ?
    Prefer lowest versions of dependencies.
    Useful for testing minimal versions of requirements, generally
    used with --prefer-stable.
    getcomposer.org
    Pour l'histoire :
    Introduit par le CTO de pour
    .
    Nicolas Grekas Black re.io aider
    à abiliser les tests sur Symfony

    View Slide

  10. POURQUOI ?
    Tester la compatibilité du code avec la version la plus
    ancienne
    Garantir que le contexte d'exécution est stable

    View Slide

  11. COMMENT ?
    Créer des conditions de test spéci ques
     Penser à la version de PHP
    Exemple avec un build :
    Travis CI
    matrix:
    include:
    - php: 5.4
    env: COMPOSER_FLAGS="--prefer-stable --prefer-lowest"
    install:
    - travis_retry composer update ${COMPOSER_FLAGS} --no-interaction
    script:
    - composer test

    View Slide

  12. QUAND ?
    Fiabiliser la diffusion d'une librairie
    Grande variété de contexte d'utilisation
    S'assurer que le composer.json ne ment pas

    View Slide

  13. CAS RÉEL AVEC HTTPPLUG
    HTTPS://GITHUB.COM/PHP-HTTP/REACT-ADAPTER

    View Slide

  14. CRÉATION D'UN ADAPTER
    1. Ajout de la dépendance:
    react/http-client: 0.4.*
    2. Développement de l'adapter
    \o/

    View Slide

  15. SAUF QUE...
    En testant avec --prefer-lowest :
    PHP Fatal error: Class 'React\Dns\Resolver\Factory' not found in
    /home/travis/build/php-http/react-adapter/src/ReactFactory.php on line 37
    Le projet React ne respecte pas les règles de Semantic
    Versionning, l'API publique a changé sur des versions
    PATCH.
    Mon chier composer.json ment...

    View Slide

  16. PROBLÈME / SOLUTION
    Personne ne doit pouvoir importer l'adapter sur une
    version de React incompatible.
    Il faut adapter les dépendances en conséquence.
    {
    "name": "php-http/react-adapter",
    "require": {
    "php": ">=5.4",
    ...
    "react/http-client": "^0.4.8",
    "react/dns": "^0.4.1",
    "react/stream": "^0.4.3"
    }
    }

    View Slide

  17. QUESTIONS ?
    http://shulard.github.io/talks/afup-lyon-lighting-mars-2016

    View Slide