Discussion:
The anatomy of a build result
Anders Qvist
2002-09-09 09:18:25 UTC
Permalink
A build package looks like this:

buildid.txt 3.0 bytes text/plain
configure.pass 0.0 bytes application/octet-stream
configurelog.txt 13.1 kB text/plain
environ.txt 677.0 bytes text/plain
export.stamp 3.0 bytes application/octet-stream
exportstamp.txt 3.0 bytes text/plain
machineid.txt 321.0 bytes text/plain
mainlog.txt 226.0 bytes text/plain
make.fail 0.0 bytes application/octet-stream
makelog.txt 611.0 bytes text/plain
path.txt 146.0 bytes text/plain
pyconfig.h 23.8 kB text/x-include-file
shlog.txt 202.0 bytes text/plain
testlog.txt 60.0 bytes text/plain
unpack.pass 0.0 bytes application/octet-stream
unpacklog.txt 0.0 bytes text/plain
unzip.pass 0.0 bytes application/octet-stream
unziplog.txt 0.0 bytes text/plain

The farm does a series of steps (see
xenofarm/projects/python/source-transform.sh):

dotask 1 "unzip" "gzip -d $BASE.tar.gz"
dotask 1 "unpack" "tar xf $BASE.tar"
dotask 1 "configure" "cd $BASE/dist/src && ./configure $configure"
dotask 1 "make" "cd $BASE/dist/src && make $make_all"
dotask 1 "make test" "cd $BASE/dist/src && make test $make_test"

Each of these steps are reported in mainlog.txt and each have a log
file on its own (eg unziplog.txt, unpacklog.txt, configurelog.txt,
etc) containing all output from the command(s) run in that step. Also,
each step will have a flag to say wether it passed or failed. The
above set, for example, failed on the "make" task.

buildid.txt contains the number of this build. It is the same as the
directory_number, and the ID listed in the daily report.

machineid.txt tells about the particular builder: host info, contact
email, that sort of stuff.

Additionally, there are some extra files with info about environment,
pyconfig.h etc.

Right now, the daily report doesn't say which step failed, but it will
soon.

Hope this explains things. I will update the web page with an
introduction as soon as I get the time.
--
Anders "Quest" Qvist

"We've all heard that a million monkeys banging on a million typewriters
will eventually reproduce the entire works of Shakespeare. Now, thanks
to the Internet, we know this is not true." -- Robert Wilensky
Guido van Rossum
2002-09-09 12:22:54 UTC
Permalink
Post by Anders Qvist
Right now, the daily report doesn't say which step failed, but it will
soon.
Hope this explains things. I will update the web page with an
introduction as soon as I get the time.
Can't you add an index.html that shows the log files on order of
execution, with a fail/succeed indicator? That would be usable. I
think you're not going to get anybody interested in looking at
problems using the current setup, and then there's no point in running
the thing at all. A one-line summary of the first thing that failed
in the email summary would also be helpful.

Now, onto the failure at hand. Look at
http://www.lysator.liu.se/xenofarm/python/files/67_6/testlog.txt

It ends with two occurrences of

make[1]: *** [test] Killed

with no clues about why. That's very strange. Maybe something is
enforcing a strict time limit?

(The normal test output is not included,
which seems to point to another bug in xenofarm.)

--Guido van Rossum (home page: http://www.python.org/~guido/)
Guido van Rossum
2002-09-09 12:26:50 UTC
Permalink
I should mentione one more thing that Anders failed to mention. There
actually *is* an indicator of which test failed in the Xenofarm
directory listings. For each phase, there's an empty file named
"foo.pass" or "foo.fail" indicating success or failure for that phase.

For example, in
http://www.lysator.liu.se/xenofarm/python/files/68_9/?1031574402
there's a "test.fail" file, pointing out that the clues to the
failures are in "testlog.txt".

Now all we need is something that takes these directory listings and
produces usable HTML.

--Guido van Rossum (home page: http://www.python.org/~guido/)
Per Cederqvist
2002-09-09 13:10:52 UTC
Permalink
Post by Guido van Rossum
I should mentione one more thing that Anders failed to mention. There
actually *is* an indicator of which test failed in the Xenofarm
directory listings. For each phase, there's an empty file named
"foo.pass" or "foo.fail" indicating success or failure for that phase.
For example, in
http://www.lysator.liu.se/xenofarm/python/files/68_9/?1031574402
there's a "test.fail" file, pointing out that the clues to the
failures are in "testlog.txt".
Now all we need is something that takes these directory listings and
produces usable HTML.
Something like http://www.lysator.liu.se/~ceder/xeno/latest.html
maybe?

This output is for another project that uses the Xenofarm, but all you
should have to do to produce similar output for the Python builds is
to copy xenofarm/projects/lyskom-server/latest.sh, change a few paths
at the top of the script, change the string
"/home/ceder/.xeno-mysql-pwd" to a file where the MySQL password is
stored, change the string "lyskom-server" to "Python" in a couple of
places, and make sure that latest.sh is run every few minutes. (It
should be run by result_parser.pike when a new result has arrived. I
might get around to adding support for that sometime in the future.)

I don't know the MySQL password for the Python database, so I cannot
set this up.

The "latest.sh" script is a /bin/sh-script that has grown too large.
I need to rewrite it in a better language (read: Python).

There are two things I plan to do with the layout once I have
converted the script to Python:

- Replace the "Machine" column with two columns: a "OS" column to the
left, and a "Computer" column to the right. This will use the
vertical screen estate more efficiently.

- Sort the lines within each build on the "OS" column.

These changes will probably not be made for several weeks. I suggest
you use "latest.sh" as it is, for the time being.

/ceder
Guido van Rossum
2002-09-09 13:14:40 UTC
Permalink
Post by Per Cederqvist
Post by Guido van Rossum
Now all we need is something that takes these directory listings and
produces usable HTML.
Something like http://www.lysator.liu.se/~ceder/xeno/latest.html
maybe?
Hardly. As an outsider, I can't make heads or tails from the
variously colored dots and the links they point to. An explanation
in English could go a long way though!

--Guido van Rossum (home page: http://www.python.org/~guido/)

Loading...