From 13f52052db1263667703423ff806bda975367efe Mon Sep 17 00:00:00 2001 From: Otto Kekäläinen Date: Wed, 10 Jan 2024 22:38:48 +0800 Subject: tests: Implement 'run-in-docker -c docker' Typically developers have either Docker or Podman on their laptops for running containers. As Podman follows nearly identical syntax as Docker, add new option '-c' that allows to specify Podman or Docker as the container command, with Podman being default if nothing is defined as the main developer is using Podman. Also ignore log files both in .gitignore and resulting .dockerignore so that tests runs can be logged with 'tee x.log' without triggering rebuilds of the container via polluting the 'COPY . .' step. --- .gitignore | 1 + packaging/run-in-docker | 43 ++++++++++++++++++++++++++++--------------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index dcf6b220..924d020b 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ nosetests.xml *.sw? \#*# .#* +*.log docs/*.1 docs/*.5 diff --git a/packaging/run-in-docker b/packaging/run-in-docker index 9fdaf2fc..9a3a2ef4 100755 --- a/packaging/run-in-docker +++ b/packaging/run-in-docker @@ -10,13 +10,14 @@ debian_tag="${DEBIAN_TAG:-sid}" usage() { cat << EOF -Usage: $(basename ${this}) [OPTION]... [ACTION] -Run tests or create package in a docker container +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 @@ -31,10 +32,11 @@ EOF die() { { echo "ERROR: ${@}"; usage; } >&2; exit 1; } # convenience wrapper -docker_build() { - docker build \ - --force-rm=${DOCKER_BUILD_FORCE_RM:-false} \ - --no-cache=${DOCKER_BUILD_NO_CACHE:-false} \ +# 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}" \ ${@} } @@ -55,7 +57,7 @@ ${this##${PWD}/} .git* EOF ) >${project_dir}/.dockerignore - docker_build \ + container_build \ --pull=${DOCKER_BUILD_PULL:-false} \ --build-arg=FROM_IMAGE=debian:${debian_tag} \ -t gbp-base:${debian_tag} -f- ${project_dir} <<'EOF' @@ -80,7 +82,8 @@ EOF gbp_test() { base_build for L in C.UTF-8 C; do - docker run --rm -ie"TEST_LOCALE=${L}" gbp-base:${debian_tag} sh <<'EOF' + ${container_cmd} run --rm -ie"TEST_LOCALE=${L}" \ + "gbp-base:${debian_tag}" sh <<'EOF' set -euvx make all+net make -C docs @@ -91,16 +94,16 @@ EOF # create debian package artifacts, copy to host gbp_package() { base_build - docker_build \ - --build-arg=FROM_IMAGE=gbp-base:${debian_tag} \ - -t gbp-package:${debian_tag} -f- ${project_dir} <<'EOF' + 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 - docker run --rm -iu0:0 \ - --mount type=bind,source="${PWD}",target=/mnt/host-volume \ - gbp-package:${debian_tag} sh <