INTRO
-----
This directory (nightly/) contains a simple, automatic build-and-test
system for Valgrind, intended to be run nightly by cron or a similar
program.


BASIC OPERATIONS
----------------
When run, the system checks out two trees:  the SVN trunk from 24 hours ago
and the SVN trunk from now.  ("24 hours ago" and "now" are determined when
the script starts running, so if any commits happen while the tests are
running they will not be tested.)

If the two trees are different (i.e. there have been commits in the past 24
hours, either to the trunk or a branch) it builds ("make"), installs ("make
install") and runs the regression tests ("make regtest") in both, and
compares the results.  Note that the "make install" isn't necessary in order
to run the tests because the regression tests use the code built (with
"make") within the tree, but it's worth doing because it tests that "make
install" isn't totally broken.  After checking both trees, it emails a
summary of the results to a recipient.  All this typically takes something
like 30 minutes.

If the two trees are identical, the tests are not run and no results are
emailed.  This avoids spamming people with uninteresting results emails when
no commits have happened recently.


SETTING UP
----------
To set up nightly testing for a machine, do the following.

(1) Check out just this directory from the repository, eg:

        svn co svn://svn.valgrind.org/valgrind/trunk/nightly $DIR

    where $DIR is the name of the directory you want it to be in.
    
    Note that this doesn't check out the whole Valgrind tree, just the
    directory containing the nightly testing stuff.  This is possible
    because the testing script doesn't check the code in the tree it belongs
    to; rather it checks out new trees (within $DIR) and tests them
    independently.

(2) Choose a tag that identifies the test results.  This is usually the
    machine name.  We'll call it $TAG in what follows.

(3) Create a configuration file $DIR/conf/$TAG.conf.  It is sourced by the
    'nightly' script, and can define any or all of the following environment
    variables.  (In most cases, only ABT_DETAILS is needed.)

    - ABT_DETAILS: describes the machine in more detail, eg. the OS.  The
      default is empty, but you should define it.  An example:

        export ABT_DETAILS="Ubuntu 9.04, Intel x86-64"

      You could also use some invocation of 'uname' or something similar
      to generate this string.  Eg. on Ubuntu Linux this works nicely:

        export ABT_DETAILS="`cat /etc/issue.net`, `uname -m`"

      And on Mac OS X this works nicely:

        export ABT_DETAILS=`uname -mrs`

      The advantage of doing it like this is that if you update the OS on
      the test machine you won't have to update ABT_DETAILS manually.

    - ABT_CONFIGURE_OPTIONS: gives extra configure options.  The default is
      empty.

    - ABT_EVAL: if provided, it must be the name of a shell script that
      executes the shell command $1 with arguments $2 .. ${$#}.  Allows to
      compile and run the Valgrind regression tests on another system than
      the system the 'nightly' script runs on.  It is assumed that the remote
      system shares the local filesystem tree through e.g. NFS.  It is the
      responsibility of the shell script to set the remote working directory
      such that it matches the local current directory ($PWD).

    - ABT_RUN_REGTEST: if provided, it must be the name of an argumentless
      shell function (also specified in the $TAG.conf file) that will be used
      to run the tests.  If not specified, the usual "make regtest" will be
      used.

    - ABT_JOBS: allows parallel builds -- it's passed as the argument to
      "make -j" when building Valgrind and the tests.  The default is 1.

    Note that the appropriate syntax to use in this file will depend on the
    shell from which the $DIR/bin/nightly script is run (which in turn may
    depend on what shell is used by cron or any similar program).

(4) Create a mailer script $DIR/conf/$TAG.sendmail.  It must be executable.
    It's used to send email results to the desired recipient (e.g. 
    valgrind-developers@lists.sourceforge.net)  It must handle three command
    line arguments.

    - The first argument is the email subject line.  It contains
      $ABT_DETAILS plus some other stuff.
      
    - The second argument is the name of the file containing the email's
      body (which shows the tests that failed, and the differences between now
      and 24 hours ago). 
      
    - The third is the name of the file containing all the diffs from
      failing tests.  Depending on the test results you get, you could
      inline this file into the email body, or attach it, or compress and
      attach it, or even omit it.  The right choice depends on how many
      failures you typically get -- if you get few failures, inlining the
      results make them easier to read;  if you get many failures,
      compressing might be a good idea to minimise the size of the emails.

    The best way to do this depends on how mail is set up on your machine.
    You might be able to use /usr/bin/mail, or you might need something more
    elaborate like using Mutt to send mail via an external account.

    At first, you should probably just send emails to yourself for testing
    purposes.  After it's working, then sending it to others might be
    appropriate.

(5) To run the tests, execute:

       $DIR/bin/nightly $DIR $TAG

    You probably want to put this command into a cron file or equivalent
    so it is run regularly (preferably every night).  Actually, it's
    probably better to put that command inside a script, and run the script
    from cron, rather than running $DIR/bin/nightly directly.  That way you
    can put any other configuration stuff that's necessary inside the
    script (e.g. make sure that programs used by the mailer script are in
    your PATH).


OUTPUT FILES
------------
If the tests are run, the following files are produced:

- $DIR/old.verbose and $DIR/new.verbose contain full output of the whole
  process for each of the two trees.

- $DIR/old.short and $DIR/new.short contain summary output of the process
  for each of the two trees.  The diff between these two files goes in
  $DIR/diff.short.

- $DIR/final contains the overall summary, constructed from $DIR/old.short,
  $DIR/new.short, $DIR/diff.short and some other bits and pieces.  (The name
  of this file is what's passed as the second argument to
  $DIR/conf/$TAG.sendmail.)

- $DIR/diffs holds the diffs from all the failing tests in the newer tree,
  concatenated together;  the diff from each failure is truncated at 100
  lines to minimise possible size blow-outs.  (The name of this file is
  what's passed as the third argument to $DIR/conf/$TAG.sendmail.)  

- $DIR/sendmail.log contains the output (stdout and stderr) from
  $DIR/conf/$TAG.sendmail goes in $DIR/sendmail.log.  

- $DIR/valgrind-old/ and $DIR/valgrind-new/ contain the tested trees (and
  $DIR/valgrind-old/Inst/ and $DIR/valgrind-new/Inst/ contain the installed
  code).

If the tests aren't run, the following file is produced:

- $DIR/unchanged.log is created only if no tests were run because the two
  trees were identical.  It will contain a short explanatory message.

Each time the tests are run, all files from previous runs are deleted.


TROUBLESHOOTING
---------------
If something goes wrong, looking at the output files can be useful.  For
example, if no email was sent but you expected one, check sendmail.log to
see if the mailer script had a problem.  Or check if unchanged.log exists.

Occasionally the SVN server isn't available when the tests runs, for either
or both trees.  When this happens the email will be sent but it won't be
very informative.  Usually it's just a temporary server problem and it'll
run fine the next time without you having to do anything.

Note that the test suite is imperfect:  
- There are very few machines where all tests pass;  that's why the old/new
  diff is produced.  Some of the tests may not be as portable as intended.
- Some tests are non-deterministic, and so may pass one day and fail the
  next.  

Improving the test suite to avoid these problems is a long-term goal but it
isn't easy.


MAINTENANCE
-----------
The scripts in the nightly/ directory occasionally get updated.  If that
happens, you can just "svn update" within $DIR to get the updated versions,
which will then be used the next time the tests run.  (It's possible that
the scripts will be changed in a way that requires changes to the files in
$DIR/conf/, but we try to avoid this.)

If you want such updates to happen automatically, you could write a script
that does all the steps in SETTING UP above, and instead run that script
from cron.


