From 3e3cad52388f10bc4d3898c5d10c097635e8df25 Mon Sep 17 00:00:00 2001 From: Andrea Bolognani Date: Wed, 11 Dec 2019 18:40:31 +0100 Subject: [PATCH] ci: Fetch list of available container images dynamically Any static list of images is destined to become outdated eventually, so let's start generating it dynamically instead. Unfortunately there doesn't seem to be a straightforward way to get Podman/Docker to list all repositories under quay.io/libvirt, so we have to resort to searching and filtering manually; and since the two tools behave slightly differently in that regard, it's more sane to have the logic in a separate shell script than it would be to keep it inline in the Makefile with all the annoying escaping doing so would entail. Signed-off-by: Andrea Bolognani Reviewed-by: Cole Robinson --- Makefile.am | 1 + ci/Makefile | 37 +++++++++++++------------------------ ci/list-images.sh | 26 ++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 24 deletions(-) create mode 100644 ci/list-images.sh diff --git a/Makefile.am b/Makefile.am index 79ad83b0bf..0d7ccc74db 100644 --- a/Makefile.am +++ b/Makefile.am @@ -75,6 +75,7 @@ EXTRA_DIST = \ build-aux/vc-list-files \ ci/Makefile \ ci/build.sh \ + ci/list-images.sh \ ci/prepare.sh \ $(NULL) diff --git a/ci/Makefile b/ci/Makefile index 27c1049b38..acb655941c 100644 --- a/ci/Makefile +++ b/ci/Makefile @@ -238,6 +238,17 @@ ci-build@%: ci-check@%: $(MAKE) -C $(CI_ROOTDIR) ci-build@$* CI_MAKE_ARGS="check" +ci-list-images: + @echo + @echo "Available x86 container images:" + @echo + @sh list-images.sh "$(CI_ENGINE)" "$(CI_IMAGE_PREFIX)" | grep -v cross + @echo + @echo "Available cross-compiler container images:" + @echo + @sh list-images.sh "$(CI_ENGINE)" "$(CI_IMAGE_PREFIX)" | grep cross + @echo + ci-help: @echo "Build libvirt inside containers used for CI" @echo @@ -246,30 +257,8 @@ ci-help: @echo " ci-build@\$$IMAGE - run a default 'make'" @echo " ci-check@\$$IMAGE - run a 'make check'" @echo " ci-shell@\$$IMAGE - run an interactive shell" - @echo - @echo "Available x86 container images:" - @echo - @echo " centos-7" - @echo " debian-9" - @echo " debian-10" - @echo " debian-sid" - @echo " fedora-29" - @echo " fedora-30" - @echo " fedora-rawhide" - @echo " ubuntu-16" - @echo " ubuntu-18" - @echo - @echo "Available cross-compiler container images:" - @echo - @echo " debian-{9,10,sid}-cross-aarch64" - @echo " debian-{9,10,sid}-cross-armv6l" - @echo " debian-{9,10,sid}-cross-armv7l" - @echo " debian-{10,sid}-cross-i686" - @echo " debian-{9,10,sid}-cross-mips64el" - @echo " debian-{9,10,sid}-cross-mips" - @echo " debian-{9,10,sid}-cross-mipsel" - @echo " debian-{9,10,sid}-cross-ppc64le" - @echo " debian-{9,10,sid}-cross-s390x" + @echo " ci-list-images - list available images" + @echo " ci-help - show this help message" @echo @echo "Available make variables:" @echo diff --git a/ci/list-images.sh b/ci/list-images.sh new file mode 100644 index 0000000000..35efdb6982 --- /dev/null +++ b/ci/list-images.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +engine="$1" +prefix="$2" + +do_podman() { + # Podman freaks out if the search term ends with a dash, which ours + # by default does, so let's strip it. The repository name is the + # second field in the output, and it already starts with the registry + podman search --limit 100 "${prefix%-}" | while read _ repo _; do + echo "$repo" + done +} + +do_docker() { + # Docker doesn't include the registry name in the output, so we have + # to add it. The repository name is the first field in the output + registry="${prefix%%/*}" + docker search --limit 100 "$prefix" | while read repo _; do + echo "$registry/$repo" + done +} + +"do_$engine" | grep "^$prefix" | sed "s,^$prefix,,g" | while read repo; do + echo " $repo" +done | sort -u