From dd891c67a62c6f77455229051a28c2f059de6cc4 Mon Sep 17 00:00:00 2001 From: Otto Kekäläinen Date: Sat, 13 Jan 2024 23:14:50 -0800 Subject: tests: Rename run-in-docker to run-in-container to be more generic --- .travis.yml | 2 +- HACKING | 2 +- packaging/run-in-container | 145 +++++++++++++++++++++++++++++++++++++++++++++ packaging/run-in-docker | 145 --------------------------------------------- 4 files changed, 147 insertions(+), 147 deletions(-) create mode 100755 packaging/run-in-container delete mode 100755 packaging/run-in-docker diff --git a/.travis.yml b/.travis.yml index 4f567c6f..50a53cd4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,4 +18,4 @@ install: "pip install -r dev_requirements.txt" script: - flake8 - python $(which nosetests) -v tests/doctests/ tests/component/deb/ - - packaging/run-in-docker + - packaging/run-in-container diff --git a/HACKING b/HACKING index af56f95b..78082215 100644 --- a/HACKING +++ b/HACKING @@ -19,7 +19,7 @@ other tests use: You can run the tests in a `debian:sid` docker container by using - packaging/run-in-docker + packaging/run-in-container The python tests use `python-nose` so you can use all it's options. To run a single test e.g. diff --git a/packaging/run-in-container b/packaging/run-in-container new file mode 100755 index 00000000..6d750078 --- /dev/null +++ b/packaging/run-in-container @@ -0,0 +1,145 @@ +#!/bin/sh + +set -eu + +this="$(readlink -e "${0}")" + +# assign defaults +project_dir="$(dirname "$(dirname "${this}")")" +debian_tag="${DEBIAN_TAG:-sid}" + +usage() { + cat << EOF +Usage: $(basename "${this}") [OPTION]... [ACTION] +Run tests or create package in a podman (or docker) container + +Options: + -h print this usage and exit + -C PROJECT_DIR change to PROJECT_DIR (default: ${project_dir}) + -t DEBIAN_TAG debian release tag (default: ${debian_tag}) + -c CONTAINER_CMD container runner command (default: podman) + +Actions: + help print this usage and exit + package create debian package artifacts + test run tests (default) + +Example: + $(basename "${this}") -C ~/code/git-buildpackage -t stretch package +EOF +} + +die() { { echo "ERROR: ${*}"; usage; } >&2; exit 1; } + +# convenience wrapper +# shellcheck disable=SC2068 # re-splitting command arguments intentional +container_build() { + ${container_cmd} build \ + --force-rm="${DOCKER_BUILD_FORCE_RM:-false}" \ + --no-cache="${DOCKER_BUILD_NO_CACHE:-false}" \ + ${@} +} + +# take path to project dir; build docker image for base +base_build() { + ( + cd "${project_dir}" + [ -f .gitignore ] && cat .gitignore + [ -f .gitmodules ] && sed -nr 's|\s+path = (.+)|\1|gp' .gitmodules + cat < "${project_dir}/.dockerignore" + container_build \ + --pull="${DOCKER_BUILD_PULL:-false}" \ + --build-arg="FROM_IMAGE=debian:${debian_tag}" \ + -t "gbp-base:${debian_tag}" -f- "${project_dir}" <<'EOF' +ARG FROM_IMAGE +FROM ${FROM_IMAGE} +ENV DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true +WORKDIR /workdir/project +RUN set -euvx \ +&& apt-get update -y \ +&& apt-get -y --no-install-recommends install \ +build-essential devscripts equivs +COPY debian debian +RUN mk-build-deps -r -i debian/control -t 'apt-get -y -o Debug::pkgProblemResolver=yes --no-install-recommends' +# To avoid constantly invalidating previous container layers, run the slow +# dependency installation early and copy files (along with any changed files) +# later +COPY . . +RUN groupadd luser && useradd -g luser luser && chown -R luser:luser .. +USER luser +EOF + rm -vf "${project_dir}/.dockerignore" +} + + +# run tests +gbp_test() { + base_build + for L in C.UTF-8 C; do + ${container_cmd} run --rm -ie"TEST_LOCALE=${L}" \ + "gbp-base:${debian_tag}" sh <<'EOF' +set -euvx +make all+net +make -C docs +EOF + done +} + +# create debian package artifacts, copy to host +gbp_package() { + base_build + container_build \ + --build-arg="FROM_IMAGE=gbp-base:${debian_tag}" \ + -t "gbp-package:${debian_tag}" -f- "${project_dir}" <<'EOF' +ARG FROM_IMAGE +FROM ${FROM_IMAGE} +RUN dpkg-buildpackage -j$(nproc) -sa -us -uc +EOF + ${container_cmd} run --rm -iu0:0 \ + --mount="type=bind,source=${PWD},target=/mnt/host-volume" \ + "gbp-package:${debian_tag}" sh <&2; exit 1; } - -# convenience wrapper -# shellcheck disable=SC2068 # re-splitting command arguments intentional -container_build() { - ${container_cmd} build \ - --force-rm="${DOCKER_BUILD_FORCE_RM:-false}" \ - --no-cache="${DOCKER_BUILD_NO_CACHE:-false}" \ - ${@} -} - -# take path to project dir; build docker image for base -base_build() { - ( - cd "${project_dir}" - [ -f .gitignore ] && cat .gitignore - [ -f .gitmodules ] && sed -nr 's|\s+path = (.+)|\1|gp' .gitmodules - cat < "${project_dir}/.dockerignore" - container_build \ - --pull="${DOCKER_BUILD_PULL:-false}" \ - --build-arg="FROM_IMAGE=debian:${debian_tag}" \ - -t "gbp-base:${debian_tag}" -f- "${project_dir}" <<'EOF' -ARG FROM_IMAGE -FROM ${FROM_IMAGE} -ENV DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true -WORKDIR /workdir/project -RUN set -euvx \ -&& apt-get update -y \ -&& apt-get -y --no-install-recommends install \ -build-essential devscripts equivs -COPY debian debian -RUN mk-build-deps -r -i debian/control -t 'apt-get -y -o Debug::pkgProblemResolver=yes --no-install-recommends' -# To avoid constantly invalidating previous container layers, run the slow -# dependency installation early and copy files (along with any changed files) -# later -COPY . . -RUN groupadd luser && useradd -g luser luser && chown -R luser:luser .. -USER luser -EOF - rm -vf "${project_dir}/.dockerignore" -} - - -# run tests -gbp_test() { - base_build - for L in C.UTF-8 C; do - ${container_cmd} run --rm -ie"TEST_LOCALE=${L}" \ - "gbp-base:${debian_tag}" sh <<'EOF' -set -euvx -make all+net -make -C docs -EOF - done -} - -# create debian package artifacts, copy to host -gbp_package() { - base_build - container_build \ - --build-arg="FROM_IMAGE=gbp-base:${debian_tag}" \ - -t "gbp-package:${debian_tag}" -f- "${project_dir}" <<'EOF' -ARG FROM_IMAGE -FROM ${FROM_IMAGE} -RUN dpkg-buildpackage -j$(nproc) -sa -us -uc -EOF - ${container_cmd} run --rm -iu0:0 \ - --mount="type=bind,source=${PWD},target=/mnt/host-volume" \ - "gbp-package:${debian_tag}" sh <