virt-subproc/adt-virt-xenlvm \
virt-subproc/adt-virt-null \
runner/adt-run \
- runner/adt-testreport-onepackage
+ runner/adt-testreport-onepackage \
+ runner/adt-testreport-runloop \
+ runner/adt-testreport-cronjob
examples = runner/onepackage-config \
runner/ubuntu-config
-autopkgtest (1.1.0) nowhere; urgency=low
+autopkgtest (1.1.0~) unstable; urgency=low
+
+ * adt-testreport-runloop: manpage
+ * adt-testreport-runloop: better command line parsing
+ * adt-testreport-runloop: removed old lalonde junk
+ * adt-testreport-runloop: replaced `..._ok' vars with sentinel files
+ * hosts/chinstrap/update-suppressions: big comment
+ * adt-testreport-runloop: renamed from hosts/cadmium/lalonde-nightly
+ * hosts/cadmium/onepackage-config: set PATH (was in lalonde-nightly)
+ * adt-testreport-onepackage: many manpage improvements
+ * adt-testreport-runloop: add to Makefile
+ * hosts/* installed as examples with a big fat warning.
+ * adt-testreport-cronjob: renamed from hosts/cadmium/cronjob
+ * adt-testreport-runloop: copyright message.
+ * cfg and adt-testreport-runloop: do not cd in config files.
+ * adt-testreport-runloop: fix handling of test_classes (was xoptslist)
+ * hosts/cadmium/*, debian/rules: onepackage_config renamed to cfg.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk> Thu, 18 Oct 2007 17:17:31 +0100
+
+autopkgtest (1.0.9) unstable; urgency=low
* Separate email_sourcepackage_header and email_binarypackage_header
to allow us to properly file bugs in LP against binary packages built
--- /dev/null
+ *** WARNING ***
+
+ DO NOT BLINDLY CUT AND PASTE FROM THIS EXAMPLE
+
+If you do so you are likely to cause serious disruption to the
+projects whose configurations are kindly reproduced here for your
+enlightenment.
+
+Please in particular be careful with email addresses and URLs.
+
+If you need to copy out of these files please search your resulting
+configuration for the `@' character and check that the addresses are
+all correct and none of them belong to anyone else.
cd debian/$p-$x/etc/userv/services.d && \
mv -f adt-xenlvm-testbed:dist adt-xenlvm-testbed
+ set -e; \
+ d=debian/autopkgtest/usr/share/doc/autopkgtest/examples/; \
+ mkdir -p -m755 $$d; \
+ cp --preserve=timestamps -dR hosts $$d; \
+ find $$d -name '*~' -o -name '#*#' -exec rm -- '{}' ';'; \
+ for f in $$d/hosts/*; do \
+ cp debian/host-example-WARNING $$f/WARNING; \
+ cf=$$f/cfg; \
+ if test -f $$cf; then \
+ sed -e 's/^/# /' debian/host-example-WARNING >$$cf.new; \
+ echo >>$$cf.new; cat $$cf >>$$cf.new; \
+ mv -f $$cf.new $$cf; \
+ fi; \
+ done
+
set -e; for f in $p $p-$x; do \
cp debian/copyright debian/$$f/usr/share/doc/$$f/copyright; \
done
-cd /home/iwj/adt-play
+PATH=/home/iwj/autopkgtest/runner:/usr/local/sbin:/usr/sbin:$PATH
+export PATH
+
mirror=http://archive.ubuntu.com/ubuntu
distro=gutsy
suite=main
+++ /dev/null
-#!/bin/sh
-set -e
-cd adt-play
-exec >>overall.log 2>&1
-test -f go
-with-lock-ex -q nightly-lock ./lalonde-nightly max_test_count=100
# m h dom mon dow command
-4-59/5 * * * * adt-play/cronjob
-22 0 * * Mon savelog -n7 adt-play/overall.log
+4-59/5 * * * * autopkgtest/runner/adt-testreport-cronjob adt-play cfg
+22 0 * * Mon savelog -n7 adt-play/var/log adt-play/var/overall.log
58 7 * * * adt-play/cleanup
+++ /dev/null
-#!/bin/bash
-
-set -e
-
-PATH=/home/iwj/autopkgtest/runner:/usr/local/sbin:/usr/sbin:$PATH
-export PATH
-
-#any_tests_ok=false
-any_tests_ok=true
-source_tests_ok=true
-binary_tests_ok=true
-gutsy_tests_ok=true
-max_test_count=10
-go_anyway=false
-
-for x in "$@"; do eval "$x"; done
-
-: ${testbed_check_path:=/var/lib/autopkgtest/xenlvm/adt_gutsy/good}
-
-fail () { printf >&2 "%s\n" "$*"; exit 127; }
-progress () { printf "========== %s ==========\n" "$1"; }
-x () { printf "+ %s\n" "$*"; "$@"; }
-x2 () { printf >&2 "+ %s\n" "$*"; "$@"; }
-
-wait_for () {
- remain=$1; interval=$2; on_not=$3; shift;shift;shift
- progress "await ($interval/$remain) $*"
- while true; do
- date
- if "$@"; then return; fi
- remain=$(( $remain - $interval ))
- if [ $remain -lt 0 ]; then fail "wait timed out for $*"; fi
- eval "$on_not"
- sleep $interval
- done
-}
-
-progress testing
-
-xoptslist="source gutsy, target=source:binary gutsy, target=binary-amd64"
-
-test_count=0
-
-while $any_tests_ok && ($go_anyway || test -f go) && test $test_count -lt $max_test_count; do
- now=`date`
- printf "%s" "$now: "
-
- if ! test -f $testbed_check_path; then
- printf " testbed broken, bailing\n"
- break
- fi
-
- xopts="${xoptslist%%:*}"
- xopts_opts="${xopts#*,}"
- xoptslist="${xoptslist#*:}:$xopts"
- printf "considering (%s) " "$xopts_opts"
-
- anybroken=false
- for x in ${xopts%%,*}; do
- if eval \$${x}_tests_ok; then :; else
- printf " skipping because of %s\n" "$x"
- anybroken=true
- break
- fi
- done
- if $anybroken; then continue; fi
-
- adt-testreport-onepackage /home/iwj/adt-play/onepackage-config \
- adtrun_extra_opts=--built-binaries-filter=__ \
- interactive=false $xopts_opts
-
- test_count=$(( $test_count + 1 ))
-done
-
-progress 'stopping'
#!/bin/sh
+#
+# This is an absolutely hideous hack.
+#
+# We scrape a suitable launchpad advanced search to find bugs we've
+# previously submitted.
+#
+# We have to run this on chinstrap instead of
+# cadmium because cadmium (being treated as a buildd from a security
+# point of view) is not permitted to make external requests other than
+# to the archive.
+#
+#
+# For the reasons described below this should be replaced ASAP!
+#
+# BUGS
+#
+# This will break if the list gets too long for LP to display.
+#
+# Also, there is a problem with Duplicate bugs. See LP #147754. A
+# tedious workaround is needed for this case. When an autopkgtest
+# bug, which was marked a duplicate and not the master, is fixed, the
+# duplicate target will be marked fixed. To work around the LP bug,
+# it is necessary to adjust the status of the autopkgtest-filed bug:
+# 1. unduplicate the bug; 2. set it to Fix Released;
+# 3. duplicate it again.
+#
+# Occasionally LP seems to burp and give us an empty page.
+# This means that a cronmail is generated which reports
+# NO SUPPRESSIONS - PROBABLY WENT WRONG
+# It is not clear whether the lack of any error message or nonzero
+# exit status from curl is a bug in curl or LP.
+
cd ${0%/*}
--- /dev/null
+#!/bin/bash
+#
+# This script expects to be given at least two arguments:
+# directory to cd to
+# main config file for adt-testreport-runloop which sets PATH if need be
+# remaining arguments are passed through to a-t-r unchanged
+
+set -e
+cd "$1"
+shift
+. "$1"
+exec >>var/overall.log 2>&1
+test -f go
+with-lock-ex -q cronjob-lock \
+ adt-testreport-runloop max_test_count=100 "$@"
.SH DESCRIPTION
.B adt\-testreport\-onepackage
is a rather ad-hoc script which chooses a package to test, calls
-adt-run, and reports the results. a-t-o has the following
-functionality:
+adt-run, and reports the results. In a service installation
+a-t-o is usually called from
+.BR adt\-testreport\-runloop .
-a-t-o downloads the Sources file, chooses a package to test (see
-below), downloads its source, invokes adt-run, writes a report
-describing the outcome, and emails the report to some appropriate
-address.
+a-t-o has the following functionality:
+
+a-t-o downloads the Sources or Packages file, chooses a package to
+test (see below), downloads its source, invokes \fBadt\-run\fR, writes a
+report describing the outcome, and emails the report to some
+appropriate address.
\fBWARNING\fR - it is essential to reconfigure this program before
use, as the supplied examples will \fBsend emails\fR to people who
most usual ones, with default values, can be seen at the top of the
a-t-o script itself. Certain others are mentioned in this manpage.
There is no exhaustive list and no documentation of the semantics.
-.SH PACKAGE SELECTION
+.SH PACKAGE AND TEST SELECTION
+The configuration variable \fBtarget\fR specifies whether a source
+package, or a binary package, is to be tested. It should be set to
+\fBsource\fR or \fBbinary\-\fR\fIarch\fR.
+
a-t-o maintains a record of when each package was last tested, what
version was tested, and whether the package had any tests.
packages which have changed since the last test are preferred, as are
packages which didn't lack tests last time they were examined.
-If the configuration sets \fBpkg\fR to a package name (for example by
-passing \fBpkg=\fR\fIpackage-name\fR), this overrides
+If the configuration sets \fBpkg\fR to a package name (for example if
+\fBpkg=\fR\fIpackage\fR is passed as an argument), this overrides
a-t-o's package selection algorithm.
.SH REPORTING
If \fBinteractive\fR is set to \fBtrue\fR (the default), a-t-o will
\fBonepackage-config\fR example configuration file).
Some vague progress information is printed to a-t-o's stdout.
+.SH AUTOMATIC BUG REPORTING
+With suitable configuration, a-t-o can be made to automatically file
+bugs when it detects a problem with a package.
+
+It is necessary to avoid the submission of multiple reports for the
+same problem. This is done by fetching somehow a list of the open bug
+reports from the relevant bug system and extracting a list of the
+source package names. These are to be listed in the file named by the
+.B suppresspackages
+configuration variable. Testing frequency of these source packages is
+reduced, and when a problem is found the email is not sent.
+
+When the system does decide to send an email about a package it will
+normally email the maintainer as determined from the package's control
+file. To submit bugs instead, set
+.B maintainer_email_override
+to the submission email address for the bug system. You must also set
+.BR email_sourcepackage_header and email_binarypackage_header
+to appropriate templates. These templates specify what information
+should be prepended at the top of the body (not the RFC822 header) of
+the mail to be sent. In these templates
+.B @p
+stands for the package name being tested (the source package name for
+source packages or the binary package name for binary package tests),
+.B @v
+stands for the version being tested,
+.B @s
+stands for the source package name (even if a binary package generated
+by that source is being tested) and
+.B @a
+stands for a single at sign \fB@\fR.
+
+If you an appropriately useable GPG signing key is available, you may
+specify
+.B email_signing_key
+which is passed to gpg's \fB-u\fR option. Otherwise the email is not
+signed.
.SH FILES
The \fBtmp=\fR\fItmp\fR and \fBvar=\fR\fIvar\fR configuration
variables name two directories which must belong solely to this
\fItmp\fR will be erased by a-t-o at startup and then used for
temporary files. It is not cleaned up afterwards; it is assumed that
-the next run of a-t-o will do that.
+the next run of a-t-o will do that. \fItmp\fR should not be made to
+refer to a symlink or mountpoint as a-t-o would break the link or
+attempt to remove the mountpoint; specify a subdirectory instead.
\fIvar\fR is used to record the state, including the information about
each package used for package selection. \fIvar\fR\fB/log\fR contains
When a-t-o is run in a loop, the loop should stop pending
administrator intervention if a-t-o exits nonzero.
+.SH FILES
+.TP
+.IR tmp " (default: \fB./tmp\fR)"
+Temporary directory for working files. Do not specify /tmp.
+.TP
+.IR var " (default: \fB./var\fR)"
+Storage directory for package testing history, score reports,
+logfiles, etc.
+.TP
+.IB var /lastinfo- target
+Information about the last test and outcome for each package. This is
+used for package scoring and selection.
+.TP
+.IB var /scores- target
+Report giving the score for each package, and the factors which
+influenced that score.
+.TP
+.IB var /emailed/last- pkg , emailaddress
+The summary of the last message sent to emailaddress about pkg.
+If the configuration variable \fBsuppressrepeatedemails\fR is
+\fBtrue\fR then this is used to ensure that a maintainer (or the
+test installation operator) is only emailed when the situation for a
+particular package changes.
+.TP
+.IB var /emailed/diff- pkg
+Changes to the summary for the last email sent regarding pkg.
+This can be used to find out why an email was sent.
+.TP
+.IB var /log
+Logfile from a-t-o. If a-t-runloop is being used its stdout output
+often makes a better logfile.
+.TP
+.IB destrsynchead / destdirfin / pkg
+Full logfile and other information is rsync'd here. It is assumed
+that this area will be published via a webserver.
.SH SEE ALSO
\fBadt-run\fR(1).
.SH BUGS
be a facility for explicitly requesting retests (other than setting
\fBpkg\fR); there should be some kind of manual prioritisation queue.
-a-t-o cannot choose a distrorelease (eg, dapper, feisty, etch, sid) or
-suite (eg main, non-free, universe); the caller must do that.
+Distributions whose management systems permit archive skew (that is,
+distributions whose contents sometimes contains unsatisfiable
+dependencies) cause pathological behaviour. a-t-o will prefer to test
+the newly-changed packages and immediately detect and report the
+archive skew as test failures. It would be better if it would detect
+this situation and not report a failure unless the problem persisted.
+And there ought to be an option to have it not try to test a package
+until its version has been stable for a nominated period.
-Configuration by the use of bash fragments is rather unsophisticated.
+If multiple distributions (multiple values of \fBdistro\fR) are used,
+a-t-o will conflate their last-tested versions. It should use
+separate files.
+
+Cross-architecture testing (where host and target have differing
+Debian architectures) has not been tested and is likely to have
+bugs both in interfaces and implementation.
+
+a-t-o should be capable of automatically closing bug reports if it
+retests a package and finds that the bug is fixed.
The script lacks flexibility in many respects; many additional
configuration settings and hooks are needed.
+
+There is no facility for sharing test queues across multiple
+machines. This means that it is difficult to share the testing load.
.SH AUTHORS AND COPYRIGHT
This manpage is part of autopkgtest, a tool for testing Debian binary
packages. autopkgtest is Copyright (C) 2006-2007 Canonical Ltd and
--- /dev/null
+#!/bin/bash
+# This file is part of autopkgtest
+# autopkgtest is a tool for testing Debian packages
+#
+# autopkgtest is Copyright (C) 2006 Canonical Ltd.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# See the file CREDITS for a full list of credits information (often
+# installed as /usr/share/doc/autopkgtest/CREDITS).
+
+set -e
+
+max_test_count=10
+go_anyway=false
+
+for arg in "$@"; do
+ case "$arg" in
+ !*) arg="${arg#!}" ;;
+ *) onepackage_args[${#onepackage_args[*]}]="${arg#@}" ;;
+ esac
+
+ case "$arg" in
+ @*) ;;
+ *=*) eval "$arg" ;;
+ *) . "$arg" ;;
+ esac
+done
+
+if [ "x$distro" = x ]; then
+ : ${testbed_check_path:=/var/lib/autopkgtest/xenlvm/adt_${distro}/good}
+else
+ : ${testbed_check_path:=/dev/null}
+fi
+
+if [ "x$test_classes" = x ]; then
+ : ${architecture:=`dpkg --print-architecture`}
+ test_classes="source $distro, target=source : binary $distro, target=binary-$architecture"
+fi
+
+fail () { printf >&2 "%s\n" "$*"; exit 127; }
+progress () { printf "========== %s ==========\n" "$1"; }
+x () { printf "+ %s\n" "$*"; "$@"; }
+x2 () { printf >&2 "+ %s\n" "$*"; "$@"; }
+
+progress testing
+
+test_count=0
+
+while ($go_anyway || test -f go) && test $test_count -lt $max_test_count; do
+ now=`date`
+ printf "%s" "$now: "
+
+ if ! test -e $testbed_check_path; then
+ printf " testbed broken, bailing\n"
+ break
+ fi
+
+ xopts="${test_classes%%:*}"
+ xopts_opts="${xopts#*,}"
+ printf "considering (%s) " "$xopts_opts"
+
+ case "$test_classes" in
+ *:*) test_classes="${test_classes#*:}:$xopts" ;;
+ esac
+
+ anybroken=false
+ for x in ${xopts%%,*}; do
+ if test -f "stop-$x"; then
+ printf " skipping because of %s" "$x"
+ anybroken=true
+ break
+ fi
+ done
+ if $anybroken; then
+ printf "\n"
+ continue
+ fi
+
+ adt-testreport-onepackage \
+ adtrun_extra_opts=--built-binaries-filter=__ \
+ interactive=false \
+ "${onepackage_args[@]}" \
+ $xopts_opts
+
+ test_count=$(( $test_count + 1 ))
+done
+
+progress 'stopping'
--- /dev/null
+.TH adt\-testreport\-runloop 1 2007 autopkgtest "Linux Programmer's Manual"
+.SH NAME
+adt\-testreport\-runloop \- repeatedly choose and test packages
+.SH SYNOPSYS
+.B adt\-testreport\-runloop
+.RI [[\fB!@\fR] variable \fB=\fR value |[\fB!@\fR] settings\-file ]...
+.br
+.SH DESCRIPTION
+.B adt\-testreport\-runloop
+is a rather ad-hoc script which repeatedly invokes
+.BR adt\-testreport\-onepackage ;
+it is designed to be invoked from cron.
+
+\fBWARNING\fR - it is essential to reconfigure this program before
+use, as the supplied examples will \fBsend emails\fR to people who
+will become \fBvery upset\fR with you!
+.SH CONFIGURATION
+Command-line arguments containing \fB=\fR are interpreted
+with \fBeval\fR; other arguments are sourced using \fB.\fR,
+in each case interpreted as bash script.
+
+Supplied arguments are both executed by a-t-r and passed through to
+the invocation of a-t-o. You may prefix an argument with \fB@\fR to
+indicate that it is for a-t-onepackage only, or with \fB!\fR to
+indicate that it is for a-t-runloop only.
+
+Thus the set of variables which can be set is the union of those for
+a-t-runloop itself and those for a-t-onepackage. See the a-t-o
+manpage for such information about its configuration as is available.
+Configuration fragment authors should bear in mind that both programs
+use \fBset -e\fR.
+
+It is quite permissible to set PATH and other needed environmnet
+variables in the configuration file.
+
+The following variables may be set:
+.TP
+.B distro
+distribution (`suite') to be tested. There is no default. This
+variable is used only for the default values of
+.B testbed_check_path
+and
+.BR test_classes .
+However, it is probably a convenient way of specifying the intended
+effect particularly as attempting to do cross-distribution testing in a
+single installation does not work properly right now (see a-t-o's BUGS).
+.TP
+.B max_test_count
+the maximum number of times to invoke a-t-o. This counts both passed
+and failed tests, but it doesn't count possible runs which were
+suppressed. Default: 10.
+.TP
+.B go_anway
+Run even though the file \fBgo\fR does not exist. See SUPPRESSION,
+below. Default: \fBfalse\fR.
+.TP
+.B architecture
+Used in combination with \fBdistro\fR when calculating the right
+default for test_classes. The default is the result from
+.BR "dpkg --print-architecture" .
+.TP
+.B testbed_check_path
+If the file named by this variable doesn't exist, a-t-r will exit.
+This avoids it spinning and reporting many immediate failures due to a
+broken testbed. The default is
+.BI /var/lib/autopkgtest/xenlvm/adt_ distro /good
+if distro is set, which assumes that the Xen-based virtualisation
+system is being used; if distro is not set then default is /dev/null
+which nullifies this feature.
+.TP
+.B test_classes
+Specifies the set of test classes to try, with the details of each
+test class separated by a colon \fB:\fR from the next. a-t-r will run
+a-t-o once for each listed test class and then return to the beginning
+of the list.
+
+Tests in each class are thus selected approximately equally often.
+(If max_test_count is not a multiple of the number of actual test
+classes then early classes are used slightly more.)
+
+Each test class consists of a set of suppression checks, a comma
+\fB,\fR, and some configuration arguments for a-t-o. The suppression
+checks are whitespace-separated words; see SUPPRESSION. The
+configuration arguments are likewise whitespace-separated. There is
+no provision for passing configuration arguments containing spaces to
+a-t-o. a-t-o arguments in test classes override other configuration
+settings.
+
+The default is
+.BI "source " distro ", target=source : binary " distro ,
+.BI target=binary- architecture
+which tests binary packages and source packages from the same
+distribution in alternation
+.SH SUPPRESSION
+a-t-r is designed to be enabled and disabled by sentinel files.
+
+Firstly, if the file \fBgo\fR does not exist in its working directory,
+it will stop at the first sensible opportunity. (See also the
+go_anyway configuration variable.)
+
+Secondly, test classes may specify suppression checks. For each such
+check \fIclasscheck\fR, a-t-r will test for the existence of
+.BI stop- classcheck
+in its current directory. If that file exists, it will suppress that
+class of test. Do not suppress all of the tests without removing
+\fBgo\fR.
+.SH FILES
+.TP
+.BI /var/lib/autopkgtest/xenlvm/adt_ distro /good
+default sentinel file for testbed_check_path.
+.TP
+.B ./go
+Sentinel file indicating that operation should be enabled.
+.TP
+.BI ./stop- classcheck
+Sentinel file indicating that test classes mentioning \fIclasscheck\fR
+should be suppressed.
+.LP
+adt-testreport-runloop does not use any other files directly, but it
+will probably need a configuration file as an argument, and it will
+invoke adt-testreport-onepackage which uses many files in the current
+directory and which invokes an autopkgtest virtualisation server.
+.SH BUGS AND WARNINGS
+\fBIt is essential not to use the example configuration!\fR
+This configuration is likely to send inappropriate emails!
+
+There is no locking. Whatever invokes a-t-r should take out a lock of
+some kind. See the example cronjobs provided in
+.B hosts/*/cronjob
+in the source package.
+
+If all of the test classes are suppressed, a-t-r will spin in a tight
+loop looking for something to do.
+
+The
+.B testbed_check_path
+feature is rather ad-hoc. It would be better to query the
+virtualisation server to be used directly and then suppress the test
+class if relevant. (But the infinite loop bug would need to be fixed
+too.)
+
+The design precludes detecting attempts to set incorrectly
+named configuration options.
+.SH AUTHORS AND COPYRIGHT
+This manpage is part of autopkgtest, a tool for testing Debian binary
+packages. autopkgtest is Copyright (C) 2006-2007 Canonical Ltd and
+others.
+
+See \fB/usr/share/doc/autopkgtest/CREDITS\fR for the list of
+contributors and full copying conditions.