Exmple config file:
Config file for 45 repos, direct and indirect dependencies of wayland
Specify the path to the config file as the argument to buildtest.pl. Config files are "<git repo> -b <branch><tabs><configure command>". Email address, install directory, and source directory, must be specified like:
email=darxus@chaosreigns.com
installdir=/home/darxus/install.test.master
sourcedir=/home/darxus/source.test.master
Any time it finds a new commit in one of the repos, it deletes the install directory and rebuilds everything. So even in a case like when recently drm changed in a way that caused mesa to fail to build, it would have caught that the change that triggerred it was drm.
If a build fails, the next time it finds a new checkout in anything it'll still go back to the last known good commits for all the repos (except for the new commit being tested).
I run this with the following cron job:
0 */2 * * * /usr/bin/time /usr/bin/nice /home/darxus/progs/buildtest.pl /home/darxus/progs/buildtest.wayland-master.conf latest || /usr/bin/nice /home/darxus/progs/buildtest.pl /home/darxus/progs/buildtest.wayland-master.conf
The "latest" argument at the end of the first causes it to test all the latest comments at the same time. If that fails, it then tests each of the new commits one at a time, to see which is at fault. So if two commits change at the same time, in a way that is compatable with the other new commit, but incompatable with previous commits, it will handle that fine now. Previous versions didn't. The biggest down side is if there is only one new commit, and that fails, this method will run the entire build test twice. I hope to improve this situation further.
I'm also considering using an input file similar to jhbuild. And tracking which files were installed by what, so I can build only stuff for which a dependency has been updated, wiping its old files first. I'd like to one day include actually running tests, instead of just testing building.
It would also be nice if, when the last commit of anything is known to be bad, and therefore a build of all the latest commits would fail, it started off with something other than what it knows would fail. Probably just immediately failing a "latest" run if one of the latest comments is flagged bad.
And I'd like to automatically do a "git bisect run" where appropriate.
Found bugs: