Let's Build a Composer Package (php[tek] 2019 Uncon Track)

Let's Build a Composer Package (php[tek] 2019 Uncon Track)

I put together this talk for the php[tek] 2019 uncon track. In it, I show how to create a PHP package for Composer, complete with all the quality and automation tools many of the popular Composer packages use to maintain their code.

(Download the PDF to get a copy with clickable links to resources.)


Ben Ramsey

May 23, 2019


  1. 2.

    Hi. I’m Ben. ✦ Software Architect at ShootProof ✦ Organizer

    at Nashville PHP ✦ Open source advocate ✦ ramsey/uuid library ✦ Craft beer nerd ✦ @ramsey on Twitter ✦ @ramsey@phpc.social on Mastodon
  2. 6.
  3. 7.

    • MIT license • BSD 2-Clause “Simplified” • Apache License

    2.0 • GNU Library or “Lesser” General Public License (LGPL)
  4. 10.
  5. 13.

    • Add your tests/ directory • Add your docs/ directory

    • Add your phpunit.xml.dist file Add anything that shouldn’t be bundled into the distribution when someone requires your package with Composer. .gitattributes
  6. 14.
  7. 15.
  8. 16.
  9. 17.
  10. 18.

    "scripts": { "lint": "parallel-lint src tests", "phpcs": "phpcs src tests

    --standard=psr12 -sp --colors", "phpstan": [ "phpstan analyse src -c phpstan.neon --level max --no-progress", "phpstan analyse tests -c phpstan.neon --level 4 --no-progress" ], "phpunit": "phpunit --verbose --colors=always", "phpunit-ci": "phpunit --coverage-clover build/logs/clover.xml", "phpunit-coverage": "phpunit --coverage-html build/coverage", "test": ["@lint", "@phpcs", "@phpstan", "@phpunit"], "test-ci": ["@lint", "@phpcs", "@phpstan", "@phpunit-ci"] }
  11. 19.
  12. 20.
  13. 21.
  14. 23.
  15. 24.
  16. 25.
  17. 26.
  18. 27.
  19. 28.
  20. 30.
  21. 31.

    LINKS TO RESOURCES 1. Composer: https://getcomposer.org/ 2. Packagist: https://packagist.org/ 3.

    Open Source Licenses: https://opensource.org/licenses 4. ramsey/php-library-skeleton: https://github.com/ramsey/php-library-skeleton 5. PHP Framework Interoperability Group: http://www.php-fig.org/ 6. PHP Package Development Standards: http://php-pds.com/ 7. Semantic Versioning: http://semver.org/ 8. PHP CodeSniffer: https://github.com/squizlabs/PHP_CodeSniffer 9. PHPUnit: https://phpunit.de/ 10. phpstan: https://github.com/phpstan/phpstan 11. Travis CI: https://travis-ci.org/ 12. CHANGELOG.md: http://keepachangelog.com 13. Code of Conduct ‣Contributor Covenant: http://contributor-covenant.org/ ‣Citizen Code of Conduct: http://citizencodeofconduct.org/ 14. CONTRIBUTING.md: http://mozillascience.github.io/working-open-workshop/contributing/ 15. Open Source Guides: https://opensource.guide/ 16. A Beginner’s Guide to Creating a Readme: https://changelog.com/posts/a-beginners-guide-to-creating-a-readme 17. Use .gitattributes: https://blog.madewithlove.be/post/gitattributes/
  22. 32.

    benramsey.com @ramsey github.com/ramsey ben@benramsey.com THANK YOU. ANY QUESTIONS? If you

    want to talk more, feel free to contact me. Let’s Build a Composer Package Copyright © 2019 Ben Ramsey This work is licensed under Creative Commons Attribution- ShareAlike 4.0 International. For uses not covered under this license, please contact the author. Ramsey, Ben. “Let’s Build a Composer Package” php[tek]. Loudermilk Conference Center, Atlanta. 23 May 2019. Conference presentation. This presentation was created using Keynote. The text is set in Chunk Five and Helvetica Neue. The source code is set in Source Code Pro. The iconography is provided by Font Awesome. Unless otherwise noted, all photographs are from Unsplash and are used with permission. @ramsey@phpc.social