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

Using & Extending Composer

Using & Extending Composer

My talk from Symfony Live 2013 in Berlin.

Till Klampaeckel

November 07, 2013
Tweet

More Decks by Till Klampaeckel

Other Decks in Technology

Transcript

  1. www.easybib.com [email protected]
    Using & Extending Composer
    Your daily life with Composer

    View Slide

  2. www.easybib.com [email protected]
    Till
    I’m Till Klampäckel

    View Slide

  3. www.easybib.com [email protected]
    Till
    Good to meet you.

    View Slide

  4. www.easybib.com [email protected]
    Find me online
    @klimpong

    http://github.com/till

    http://till.klampaeckel.de/


    View Slide

  5. www.easybib.com [email protected]
    Till
    15 years of experience

    View Slide

  6. www.easybib.com [email protected]
    ImagineEasy Solutions LLC
    An information literacy company.

    View Slide

  7. www.easybib.com [email protected]
    Information Literacy
    •avoid plagiarism

    •evaluate sources

    View Slide

  8. www.easybib.com [email protected]
    EasyBib.com
    EasyBib is an citation management platform. 40 million students use EasyBib every year.
    Over 1000 institutions subscribe, including 100 large US universities and 900 high schools
    and districts.

    View Slide

  9. www.easybib.com [email protected]
    ResearchReady.com
    ResearchReady teaches information literacy skills in a core curriculum. Universities and
    districts subscribe to give their students a research skill boost. Launched in January 2013.

    View Slide

  10. www.easybib.com [email protected]
    Stack
    •PHP (5.3 & 5.4, on the way to 5.5)

    •Nginx + Linux

    •AWS (OpsWorks, RDS, ElasticCache)

    •Solr, ElasticSearch

    •CouchDB / BigCouch

    •Travis-CI, PHPUnit, Behat

    •Vagrant, Chef, Virtualbox, Packer

    View Slide

  11. www.easybib.com [email protected]
    Commercial break
    Some rights reserved by claire.whitehouse
    http://www.flickr.com/photos/citysnidget/
    SOUNDS GOOD?

    WE’RE HIRING!
    [email protected]

    View Slide

  12. www.easybib.com [email protected]
    Composer
    We embrace it.

    View Slide

  13. www.easybib.com [email protected]
    Composer
    Dependency management

    View Slide

  14. www.easybib.com [email protected]
    Composer
    Dependency resolution

    View Slide

  15. www.easybib.com [email protected]
    Composer
    Semantic Versioning


    View Slide

  16. www.easybib.com [email protected]
    Composer
    Major.Minor.Bugfix

    1.0.1

    View Slide

  17. www.easybib.com [email protected]
    Composer
    http://semver.org/

    View Slide

  18. www.easybib.com [email protected]
    Composer
    Your first package

    View Slide

  19. www.easybib.com [email protected]
    Composoring your code
    {

    “name”: “till/secret-sauce”,

    “license”: “MIT”

    }

    View Slide

  20. www.easybib.com [email protected]
    Next step
    Publish code. —

    View Slide

  21. www.easybib.com [email protected]
    Packagist
    •register on packagist.org
    •submit your package
    •setup the service-hook

    (Github)

    View Slide

  22. www.easybib.com [email protected]
    Ship it!

    View Slide

  23. www.easybib.com [email protected]
    Shipping it
    • `git tag -a 1.0.0 -m “this is my rock-solid 1.0.0”`

    `git push --tags`

    • `svn cp trunk tags/1.0.0`

    View Slide

  24. www.easybib.com [email protected]
    Consuming
    {

    “name”: “fabpot/awesome”,

    “require”: {

    “till/secret-sauce”: “~1.0”

    }

    }

    View Slide

  25. www.easybib.com [email protected]
    Consuming
    {

    “name”: “fabpot/awesome”,

    “repositories”: [

    {

    “type”:”package”,

    “package”: {

    “name”: “sensio/legacy-code”,

    “version”: “3.2.4”,

    “dist”: {

    “url”: “http://dev.local/secret.zip”,

    “type”: “zip”

    }

    }

    }

    ],

    “require”: {

    “sensio/legacy-code”: “3.2.4”,

    “till/secret-sauce”: “~1.0”

    }

    }

    View Slide

  26. ACHTUNG, ACHTUNG.

    View Slide

  27. www.easybib.com [email protected]
    Repositories
    • Repositories are not inherited.

    • Put open source code on packagist, or get satis.

    View Slide

  28. www.easybib.com [email protected]
    Consuming
    • There are a lot, lot more options.

    • Check http://getcomposer.org/

    View Slide

  29. www.easybib.com [email protected]
    Installing
    cd awesome-application

    curl -sS http://getcomposer.org/installer |php

    ./composer.phar install

    View Slide

  30. www.easybib.com [email protected]
    What else?
    • Update your dependencies.

    • Search for dependencies.

    • Development dependencies.

    • Classmap and PSR-0 autoloaders.

    • “help”

    View Slide

  31. Breath.

    View Slide

  32. www.easybib.com [email protected]
    One more thing
    Do you know composer’s global command?

    View Slide

  33. www.easybib.com [email protected]
    Go PEAR! Go global!
    •$COMPOSER_HOME/composer.json
    •./composer.phar global install

    View Slide

  34. www.easybib.com [email protected]
    Satis
    Your own private packagist.org.

    View Slide

  35. Because what could go wrong?

    View Slide

  36. www.easybib.com [email protected]
    Things that will go wrong
    • Github is down.

    • Packagist is down.

    • Internet is slow.

    • Internet doesn’t work.

    • Tags get deleted. (cc fabpot :)

    View Slide

  37. Own your availability!

    View Slide

  38. www.easybib.com [email protected]
    Captain Obvious
    Your proprietary code is private.

    View Slide

  39. www.easybib.com [email protected]
    Setup
    ./composer.phar \

    create-project \

    composer/satis \

    --stability=dev \

    --prefer-dist

    View Slide

  40. www.easybib.com [email protected]
    satis.json
    {

    "name": "Till's satis",

    "homepage": "http://satis.local",

    "require-all": true,

    "repositories": [

    {"packagist": false},

    {

    "type":"vcs",

    "url":"http://github.com/fabpot/symfony"

    }

    ]

    }

    View Slide

  41. www.easybib.com [email protected]
    Build
    ./bin/satis build ./satis.json public
    php -S 0.0.0.0:80 -t public

    View Slide

  42. www.easybib.com [email protected]
    Build

    View Slide

  43. www.easybib.com [email protected]
    Go back
    {

    “name”: “fabpot/awesome”,

    “repositories”: [

    {

    “type”:”composer”,

    “url”: “http://satis.local”

    }

    ],

    “require”: {

    “sensio/legacy-code”: “3.2.4”,

    “till/secret-sauce”: “~1.0”

    }

    }

    View Slide

  44. www.easybib.com [email protected]
    Next steps
    • fork code — e.g. to a local backup server

    • generate your own downloads

    • configure Amazon S3 as a backend

    View Slide

  45. www.easybib.com [email protected]
    Next steps
    http://www.flickr.com/photos/mightymightymatze/

    View Slide

  46. Want even more?

    View Slide

  47. www.easybib.com [email protected]
    Extending Composer
    Or, bending Composer to your will.

    View Slide

  48. www.easybib.com [email protected]agineeasy.com
    Plugins

    View Slide

  49. www.easybib.com [email protected]
    Composer installer

    View Slide

  50. www.easybib.com [email protected]
    Composer installer
    Install jQuery, bootstrap, etc.!

    https://github.com/RobLoach/component-installer

    View Slide

  51. www.easybib.com [email protected]
    Composer installer
    • aura

    • ezPublish

    • flow/typo3

    • fuel

    • magento

    • wordpress

    • yii

    View Slide

  52. www.easybib.com [email protected]
    Event-Plugins

    View Slide

  53. www.easybib.com [email protected]
    Plugin Events
    COMMAND

    https://github.com/easybiblabs/composer-newrelic


    View Slide

  54. www.easybib.com [email protected]
    Plugin Events
    PRE_FILE_DOWNLOAD

    https://github.com/naderman/composer-aws


    View Slide

  55. We’re almost done!

    View Slide

  56. Lessons learned.

    View Slide

  57. www.easybib.com [email protected]
    Deploying with Composer is hard

    View Slide

  58. www.easybib.com [email protected]
    Github is down more

    often than you think

    View Slide

  59. www.easybib.com [email protected]
    Github is not down
    as often as you think :)

    View Slide

  60. www.easybib.com [email protected]
    API limits suck

    View Slide

  61. www.easybib.com [email protected]
    Composer wants your RAM

    View Slide

  62. www.easybib.com [email protected]
    ~/.composer/config.json

    View Slide

  63. www.easybib.com [email protected]
    Always “composer validate”

    View Slide

  64. www.easybib.com [email protected]
    Always check in the
    “composer.phar”

    View Slide

  65. www.easybib.com [email protected]
    Versioning is hard

    View Slide

  66. www.easybib.com [email protected]
    Dependency resolution

    View Slide

  67. www.easybib.com [email protected]
    “composer update” broke my app

    View Slide

  68. www.easybib.com [email protected]
    #1 contender for merge conflicts:
    The composer.lock

    View Slide

  69. www.easybib.com [email protected]
    Thanks! Questions?

    View Slide