[pkg] Add new autopkgtest for skeleton packaging
authorJérémy Bobbio <jeremy.bobbio@irq7.fr>
Mon, 17 Jun 2019 17:25:04 +0200
changeset 12686 74b8bceddee7
parent 12685 84a8a8915512
child 12691 3f0e64630d94
[pkg] Add new autopkgtest for skeleton packaging When running `cubicweb-ctl newcube`, the generated template provides debian packaging. So let's add automated tests for that using autopkgtest. The new test will generated a new cube, build a source tarball, build the package, try to install it, see if the Python 3 module is available and even run autopkgtest against the newly created packages. Along the way it will also print information about the generated package: buildinfo, package content, and lintian report.
debian/tests/control
debian/tests/skeleton-packaging
--- a/debian/tests/control	Tue May 21 16:36:12 2019 +0200
+++ b/debian/tests/control	Mon Jun 17 17:25:04 2019 +0200
@@ -7,3 +7,10 @@
  python3-psycopg2, postgresql, postgresql-plpython,
  python3-ldap3, slapd, ldap-utils
 Restrictions: allow-stderr, isolation-container
+
+Tests: skeleton-packaging
+Depends:
+ python3-cubicweb, cubicweb-ctl,
+ python3-pyramid, python3-wsgicors,
+ devscripts, equivs, lintian, autopkgtest
+Restrictions: allow-stderr, needs-root
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/tests/skeleton-packaging	Mon Jun 17 17:25:04 2019 +0200
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+set -e
+set -x
+
+if [ -z "$AUTOPKGTEST_TMP" ]; then
+	echo "Not running as part as autopkgtest" >&2
+	exit 250
+fi
+
+# Switch to unprivileged user if needed
+if [ "$(id -u)" = 0 ]; then
+	apt-get install -q -y sudo
+	echo 'Defaults !fqdn' > /etc/sudoers.d/fqdn
+	echo 'nobody ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/nobody
+	chown nobody:nogroup "$AUTOPKGTEST_TMP"
+	exec su nobody -s /bin/sh -c "$0"
+fi
+
+cd "$AUTOPKGTEST_TMP"
+
+# Create a cube
+PACKAGE="cubicweb-mytest"
+cubicweb-ctl newcube -s 'Just a test cube' ${PACKAGE#cubicweb-}
+cd "$PACKAGE"
+
+UPSTREAM_VERSION=$(python3 setup.py --version)
+DEBIAN_VERSION=$(dpkg-parsechangelog -S Version)
+
+# Create source tarball
+python3 setup.py sdist
+mv "dist/${PACKAGE}-${UPSTREAM_VERSION}.tar.gz" "../${PACKAGE}_${UPSTREAM_VERSION}.orig.tar.gz"
+
+# Install build-dependencies
+mk-build-deps --install --root-cmd sudo --remove \
+	--tool 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --quiet --assume-yes'
+
+# Build!
+dpkg-buildpackage
+
+# Output .buildinfo for posterity
+cat ../*.buildinfo
+
+# Output package content, again for posterity
+debc
+
+# Install the package
+sudo debi --with-depends
+
+lintian -i ../*.dsc ../*.changes
+
+# Test if Python module is usable
+python3 -c 'import cubicweb_mytest; print(dir(cubicweb_mytest))'
+
+# Run autopkgtest (uh… inception, anyone?)
+sudo autopkgtest ../*.changes -- null