From: "Jérôme Pouiller" <jezz@sysmic.org>
To: buildroot@busybox.net
Subject: [Buildroot] [RFC] Continuous integration
Date: Fri, 25 Oct 2013 14:46:49 +0200 [thread overview]
Message-ID: <1464774.i3ScgRtXEf@sagittae> (raw)
Hello,
Unfortunately, I am really not sure to be able to follow Buildroot
Developpers' Day (even with Google Hangout). However, I would like to
expose one my ideas about patch integration scalability problem.
IMHO, current autobuilder is great to find corner cases, but for simple
case, I think we can do better. I suggest to build ALL packages with a
selection of representative reference configurations (uclibc, glibc,
static, w/o IPv6, w/o MMU...). To make sense, this autobuilder should
pool git changes and compile in priority new packages, modified package
and packages which depends (directly or indirectly) from modified
packages.
Ideally, it should be able to give test results for branches before they
would be merged.
It should also detect regression and send necessary alert. It would be
better if it may identify commit and author of a regression.
I begin to wrote an autobuilder that would looks like that. You can sees
results there : http://sysmic.org/~jezz/autobuilder/ (at beginning, it
was mainly for my personal needs)
It use a set of reference configurations which normally include all
packages (at least as much as possible). It compute list of packages and
their directories, list of targets for each configuration and
dependencies of of each packages for each configuration. It is able to
compute reverse dependencies and recursive dependencies.
Next, it ask to git modification time for each package directory. It is
able to detect couple of packages/configuration which build time is
older than package directory modification time.
It compute list of packages/configuration couple and sort it : never
built first, modified next, a dependency modified after and finally
other packages, ordered by last build time. Job queue is available
there: http://sysmic.org/~jezz/autobuilder/jobqueue.html (/!\ 4Mo).
It build elements of job list until change is detected on git repository
(in this case, it rebuild job queue).
For performance reasons, I don't run make clean between each package. I
know it may be problematic for reproducibility. However, script will run
make clean when it is about to rebuild a package that was not modified
since last build and output directory had not been cleaned since last
build (= same package with same output directory).
Finally, it dump result. It is able to detect when a package has
compiled correctly, or it has failed or if a dependency has failed (and
in this case, it shows problematic package).
Code is available there:
https://github.com/jerome-pouiller/br-continuous
--
J?r?me Pouiller, Sysmic
Embedded Linux specialist
http://www.sysmic.fr
next reply other threads:[~2013-10-25 12:46 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-25 12:46 Jérôme Pouiller [this message]
2013-10-28 6:50 ` [Buildroot] [RFC] Continuous integration Arnout Vandecappelle
2013-10-28 9:47 ` Jérôme Pouiller
2013-10-29 21:14 ` rjbarnet at rockwellcollins.com
2013-11-05 16:29 ` Matt Weber
2013-11-07 13:37 ` Jérôme Pouiller
2013-11-08 19:35 ` Matthew Weber
2013-11-10 11:18 ` Maxime Ripard
2013-11-11 13:53 ` Matthew Weber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1464774.i3ScgRtXEf@sagittae \
--to=jezz@sysmic.org \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox