buildtest.pl

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:

2012-06-11 mesa
2012-06-27 mesa
2012-07-21 mesa
2012-10-09 mesa
2012-10-17 wayland
2012-10-25 weston
2012-11-13 mesa
2012-11-30 mesa
2012-11-30 mesa
2012-12-27 at-spi2-core
2013-01-24 gtk+
2013-01-29 harfbuzz
2013-01-30 gobject-introspectionopen, make check fails without cairo
2013-02-04 fontconfig
2013-02-07 gobject-introspection
2013-02-13 glibopen, intermittent problem with time related test
2013-02-15 at-spi2-coreopen, fails to find X libs without C_INCLUDE_PATH
2013-02-15 atkopen, doesn't find glib-gettext.m4 via ACLOCAL
2013-02-18 pango
2013-02-19 gobject-introspection
2013-02-22 westonopen, event-test hangs when make check is run from cron
2013-02-27 pango
2013-02-27 gobject-introspection
2013-03-05 glib
2013-03-06 mesa
2013-04-09 fontconfig
2013-06-17 gobject-introspection
2013-06-19 gtk+open, not handling uninstalled gsettings schemas
2013-06-19 libunwindopen, Lrs-race test fails with a segfault
2013-06-24 gdk-pixbufopen, build test fails, ".../loaders.cache': No such file or directory"

Sat Jun 22 13:35:23 EDT 2013