Test against the lowest Composer dependencies on Travis
Composer just got a new awesome addition thanks to Nicolas Grekas: prefer the lowest versions of your dependencies.
composer update --prefer-lowest
This amazing option will install the lowest versions possible for all your dependencies.
What for? Tests of course!
Update Composer
OK before we get started, don't forget to update Composer right now if you want to use the new option:
sudo composer self-update
Testing against lowest dependencies
It might not make a lot of sense to test an application against its lowest dependencies, because unless something is done wrong it will be installed with controlled versions.
However, for libraries (or components…) it's a very good thing.
To give you an example, I wanted to give it a try and ran composer update --prefer-lowest
in PHP-DI's directory: all hell broke loose… PHPUnit wouldn't even start.
The reason for this were multiples, but they all boiled down to:
- I used a feature that didn't yet exist in version X of dependency Y
- or dependency Y had a bug in version X
and I allowed installing that problematic version X in composer.json
.
In the end, I was distributing a library that could not work at all (if people had insane version constraints).
Setting up tests on Travis
Let's be proactive and use continuous integration to prevent that from happening again.
Here is an example of a .travis.yml
configuration that would run the tests using the lowest dependencies with PHP 5.3.3:
language: php
php:
- 5.3.3
- 5.3
- 5.4
- 5.5
- 5.6
- hhvm
matrix:
include:
- php: 5.3.3
env: dependencies=lowest
before_script:
- composer self-update
- composer install -n
- if [ "$dependencies" = "lowest" ]; then composer update --prefer-lowest --prefer-stable -n; fi;
script:
- phpunit
You'll notice that we have to run composer self-update
because Travis hasn't picked up the latest Composer version yet.
Here was the result on Travis:
A new job was added to the build matrix, and this job ran on PHP 5.3.3 with the lowest dependency versions.
If you are interested, have a look at the pull request.