]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
ci: Fetch list of available container images dynamically
authorAndrea Bolognani <abologna@redhat.com>
Wed, 11 Dec 2019 17:40:31 +0000 (18:40 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Mon, 6 Jan 2020 15:43:46 +0000 (16:43 +0100)
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 <abologna@redhat.com>
Reviewed-by: Cole Robinson <crobinso@redhat.com>
Makefile.am
ci/Makefile
ci/list-images.sh [new file with mode: 0644]

index 79ad83b0bfa50d0133da65915e847c5b0c31703f..0d7ccc74db86f7cd27d9bfcbd59b4c35cc6d02a9 100644 (file)
@@ -75,6 +75,7 @@ EXTRA_DIST = \
   build-aux/vc-list-files \
   ci/Makefile \
   ci/build.sh \
+  ci/list-images.sh \
   ci/prepare.sh \
   $(NULL)
 
index 27c1049b38224e6720073d7c0523523deba5a0c0..acb655941c95863428a6301da41deb967d0d04d0 100644 (file)
@@ -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 (file)
index 0000000..35efdb6
--- /dev/null
@@ -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