Browse Source
Implemented as follows: * build-and-provide-package uses the new pbuilder-hookdir directory by default. The pbuilder-hookdir script B20autopkgtest runs the actual tests using autopkgtest iff debian/tests/control is present in the Debian package, otherwise skipping the test execution so behaviour of build-and-provide-package is the same as before. The hook directory defaults to /usr/share/jenkins-debian-glue/pbuilder-hookdir/ and can be configured by the $PBUILDER_HOOKDIR setting. To skip any autopkgtest output handling the $SKIP_AUTOPKGTEST_RESULTS configuration can be set. * build-and-provide-package: copies autopkgtest output into directory 'adt' for later processing via adtsummary_tap * adtsummary_tap: this script generates a TAP report of the autopkgtest output, usage inside a Jenkins job as shell executer step like: mkdir -p report adt touch adt/summary # do not fail if no autopkgtest run took place adtsummary_tap adt/summary > report/autopkgtest.tap and using 'report/*.tap' for Post-build action "Publish TAP Results". It's recommended to use a recent version of autopkgtest. The one provided by Christoph Berg <myon@debian.org> at http://apt.postgresql.org/pub/repos/apt/pool/main/a/autopkgtest/ (autopkgtest_2.2.3.pgdg+1 at the time of this commit) is known to work fine and also includes a bugfix for: | TypeError: coercing to Unicode: need string or buffer, instance found which is reported as http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696625 Please note that autopkgtest isn't required on the system providing cowbuilder but instead *inside* the cowbuilder environment. Thanks to Christoph Berg <myon@debian.org> for his initial work on autopkgtest support in jenkins-debian-glue and his permission to integrate it in the mainline project.merge-requests/109/head

7 changed files with 112 additions and 4 deletions
@ -1,3 +1,4 @@ |
|||
debian/tmp/usr/bin/adtsummary_tap usr/bin/ |
|||
debian/tmp/usr/bin/checkbashism_tap usr/bin/ |
|||
debian/tmp/usr/bin/perlcritic_tap usr/bin/ |
|||
debian/tmp/usr/bin/tap_tool_dispatcher usr/bin/ |
|||
|
@ -0,0 +1,40 @@ |
|||
#!/bin/sh |
|||
# Copyright 2013 Michael Prokop <mika@debian.org> |
|||
# Copyright 2012 Christoph Berg <myon@debian.org> |
|||
# Licensed under the terms of the MIT License. |
|||
|
|||
set -ex |
|||
|
|||
cd /tmp/buildd/*/debian/.. |
|||
|
|||
if [ ! -f debian/tests/control ]; then |
|||
echo "Package does not have autopkgtest support, debian/tests/control is missing" |
|||
exit 0 |
|||
fi |
|||
|
|||
if [ ! -f debian/files ]; then |
|||
echo "Package source is not built, debian/files is missing" >&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
set -- /tmp/adt-*/ |
|||
TMPADT="$1" |
|||
if [ ! -d "$TMPADT" ]; then |
|||
echo "Didn't find any /tmp/adt-*/ directory. It should have been created before invoking cowbuilder." >&2 |
|||
ls -la /tmp |
|||
exit 1 |
|||
fi |
|||
|
|||
# runner/adt-run uses apt-utils's apt-ftparchive and |
|||
# pbuilder's pbuilder-satisfydepends-classic |
|||
apt-get install -y autopkgtest apt-utils pbuilder |
|||
|
|||
mkdir -p "$TMPADT/out" |
|||
binaries=$(awk '/\.deb / { print "--binary ../" $1 }' debian/files) |
|||
|
|||
adt-run --tmp-dir $TMPADT/out --summary $TMPADT/summary \ |
|||
$binaries --built-tree $PWD --- adt-virt-null || EXIT=$? |
|||
|
|||
# 4 means some test failed, exit 0 here and let adtsummary2junit report the failure |
|||
[ ${EXIT:-0} = 4 ] && exit 0 |
|||
exit ${EXIT:-0} |
@ -0,0 +1,38 @@ |
|||
#!/usr/bin/env ruby |
|||
|
|||
if ARGV[0].nil? |
|||
$stderr.puts "Usage: #{File.basename $0} <autopkgtest_summary_file>" |
|||
exit 1 |
|||
end |
|||
|
|||
file = ARGV[0] |
|||
counter = 1 |
|||
found_error = 0 |
|||
|
|||
begin |
|||
output = File.open("#{file}", "r").read |
|||
rescue |
|||
$stderr.puts "Error: can't read file #{file}" |
|||
exit 1 |
|||
end |
|||
|
|||
num_lines = output.lines.count |
|||
|
|||
if num_lines == 0 |
|||
puts "1..0 # Skipped: no autopkgtest output found" |
|||
exit 0 |
|||
end |
|||
|
|||
puts "1..#{num_lines}" |
|||
output.gsub(/:\n/, ':').each_line do |critic| |
|||
if critic =~ /.*PASS.*/ |
|||
cmd = /(.*)? (PASS)$/.match(critic)[1] |
|||
puts "ok #{counter} #{cmd}" |
|||
counter += 1 |
|||
elsif critic =~ /.*FAIL status.*/ |
|||
test = /(.*)? (FAIL status:)(.*)?/.match(critic)[1] |
|||
cmd = /(.*)? (FAIL status:)(.*)?/.match(critic)[3] |
|||
puts "not ok #{counter} #{test} #{cmd}" |
|||
counter += 1 |
|||
end |
|||
end |
Loading…
Reference in new issue