mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
ci: remove obsolete logic for refreshing containers/cirrus
We now use lcitool's manifest feature to generate files. The logic for checking for stale containers in the registry, however, is still relevant so that is propagated to a standalone command. Reviewed-by: Pavel Hrdina <phrdina@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
30856d2865
commit
9810633253
121
ci/helper
121
ci/helper
@ -7,7 +7,6 @@ import argparse
|
||||
import os
|
||||
import pathlib
|
||||
import pty
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
@ -60,15 +59,6 @@ class Parser:
|
||||
help="additional arguments passed to ninja",
|
||||
)
|
||||
|
||||
# Options that are common to all actions that use lcitool
|
||||
lcitoolparser = argparse.ArgumentParser(add_help=False)
|
||||
lcitoolparser.add_argument(
|
||||
"--lcitool",
|
||||
metavar="PATH",
|
||||
default="lcitool",
|
||||
help="path to lcitool binary",
|
||||
)
|
||||
|
||||
# Options that are common to actions communicating with a GitLab
|
||||
# instance
|
||||
gitlabparser = argparse.ArgumentParser(add_help=False)
|
||||
@ -127,27 +117,14 @@ class Parser:
|
||||
)
|
||||
listimagesparser.set_defaults(func=Application._action_list_images)
|
||||
|
||||
# refresh action
|
||||
refreshparser = subparsers.add_parser(
|
||||
"refresh",
|
||||
help="refresh data generated with lcitool",
|
||||
parents=[lcitoolparser, gitlabparser],
|
||||
# check_stale action
|
||||
check_staleparser = subparsers.add_parser(
|
||||
"check-stale",
|
||||
help="check for existence of stale images on the GitLab instance",
|
||||
parents=[gitlabparser],
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
||||
)
|
||||
refreshparser.add_argument(
|
||||
"--quiet",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help="refresh data silently"
|
||||
)
|
||||
refreshparser.add_argument(
|
||||
"--check-stale",
|
||||
action="store",
|
||||
choices=["yes", "no"],
|
||||
default="yes",
|
||||
help="check for existence of stale images on the GitLab instance"
|
||||
)
|
||||
refreshparser.set_defaults(func=Application._action_refresh)
|
||||
check_staleparser.set_defaults(func=Application._action_check_stale)
|
||||
|
||||
def parse(self):
|
||||
return self._parser.parse_args()
|
||||
@ -158,10 +135,6 @@ class Application:
|
||||
self._basedir = pathlib.Path(__file__).resolve().parent
|
||||
self._args = Parser().parse()
|
||||
|
||||
if self._args.action == "refresh":
|
||||
if not shutil.which(self._args.lcitool):
|
||||
sys.exit("error: 'lcitool' not installed")
|
||||
|
||||
def _make_run(self, target):
|
||||
args = [
|
||||
"-C",
|
||||
@ -194,84 +167,12 @@ class Application:
|
||||
output = self._lcitool_run(["targets"])
|
||||
return output.splitlines()
|
||||
|
||||
def _generate_dockerfile(self, target, cross=None):
|
||||
args = ["dockerfile", target, "libvirt"]
|
||||
outdir = self._basedir.joinpath("containers")
|
||||
outfile = f"{target}.Dockerfile"
|
||||
|
||||
if cross:
|
||||
args.extend(["--cross", cross])
|
||||
outfile = f"{target}-cross-{cross}.Dockerfile"
|
||||
|
||||
outpath = outdir.joinpath(outfile)
|
||||
if not self._args.quiet:
|
||||
print(outpath)
|
||||
|
||||
output = self._lcitool_run(args)
|
||||
with open(outpath, "w") as f:
|
||||
f.write(output)
|
||||
|
||||
def _generate_vars(self, target):
|
||||
args = ["variables", target, "libvirt"]
|
||||
outdir = self._basedir.joinpath("cirrus")
|
||||
outfile = f"{target}.vars"
|
||||
|
||||
outpath = outdir.joinpath(outfile)
|
||||
if not self._args.quiet:
|
||||
print(outpath)
|
||||
|
||||
output = self._lcitool_run(args)
|
||||
with open(outpath, "w") as f:
|
||||
f.write(output)
|
||||
|
||||
def _refresh_containers(self):
|
||||
debian_cross = [
|
||||
"aarch64",
|
||||
"armv6l",
|
||||
"armv7l",
|
||||
"i686",
|
||||
"mips",
|
||||
"mips64el",
|
||||
"mipsel",
|
||||
"ppc64le",
|
||||
"s390x",
|
||||
]
|
||||
fedora_cross = [
|
||||
"mingw32",
|
||||
"mingw64",
|
||||
]
|
||||
|
||||
for target in self._lcitool_get_targets():
|
||||
if target.startswith("freebsd-") or target.startswith("macos-"):
|
||||
continue
|
||||
|
||||
self._generate_dockerfile(target)
|
||||
|
||||
if target == "fedora-rawhide":
|
||||
for cross in fedora_cross:
|
||||
self._generate_dockerfile(target, cross)
|
||||
|
||||
if target.startswith("debian-"):
|
||||
for cross in debian_cross:
|
||||
if target == "debian-sid" and cross == "mips":
|
||||
continue
|
||||
self._generate_dockerfile(target, cross)
|
||||
|
||||
def _refresh_cirrus(self):
|
||||
for target in self._lcitool_get_targets():
|
||||
if not (target.startswith("freebsd-") or target.startswith("macos-")):
|
||||
continue
|
||||
|
||||
self._generate_vars(target)
|
||||
|
||||
def _check_stale_images(self):
|
||||
namespace = self._args.namespace
|
||||
gitlab_uri = self._args.gitlab_uri
|
||||
registry_uri = util.get_registry_uri(namespace, gitlab_uri)
|
||||
lcitool_targets = self._lcitool_get_targets()
|
||||
|
||||
stale_images = util.get_registry_stale_images(registry_uri,
|
||||
lcitool_targets)
|
||||
stale_images = util.get_registry_stale_images(registry_uri, self._basedir)
|
||||
if stale_images:
|
||||
spacing = "\n" + 4 * " "
|
||||
stale_fmt = [f"{k} (ID: {v})" for k, v in stale_images.items()]
|
||||
@ -328,12 +229,8 @@ class Application:
|
||||
print("Available cross-compiler container images:\n")
|
||||
print(spacing + ("\n" + spacing).join(cross))
|
||||
|
||||
def _action_refresh(self):
|
||||
self._refresh_containers()
|
||||
self._refresh_cirrus()
|
||||
|
||||
if self._args.check_stale == "yes" and not self._args.quiet:
|
||||
self._check_stale_images()
|
||||
def _action_check_stale(self):
|
||||
self._check_stale_images()
|
||||
|
||||
def run(self):
|
||||
self._args.func(self)
|
||||
|
32
ci/util.py
32
ci/util.py
@ -1,4 +1,5 @@
|
||||
import json
|
||||
import pathlib
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
|
||||
@ -40,42 +41,37 @@ def get_registry_images(uri: str) -> List[Dict]:
|
||||
return json.loads(r.read().decode())
|
||||
|
||||
|
||||
def get_image_distro(image_name: str) -> str:
|
||||
def get_dockerfiles(base_dir) -> List:
|
||||
"""
|
||||
Extract the name of the distro in the GitLab image registry name, e.g.
|
||||
ci-debian-9-cross-mipsel --> debian-9
|
||||
List all container dockerfiles in the local directory.
|
||||
|
||||
:param image_name: name of the GitLab registry image
|
||||
:return: distro name as a string
|
||||
:return: list of dockerfile names
|
||||
"""
|
||||
name_prefix = "ci-"
|
||||
name_suffix = "-cross-"
|
||||
|
||||
distro = image_name[len(name_prefix):]
|
||||
|
||||
index = distro.find(name_suffix)
|
||||
if index > 0:
|
||||
distro = distro[:index]
|
||||
|
||||
return distro
|
||||
dkrs = []
|
||||
d = pathlib.Path(base_dir, "containers")
|
||||
for f in d.iterdir():
|
||||
if f.suffix == ".Dockerfile":
|
||||
dkrs.append(f.stem)
|
||||
return dkrs
|
||||
|
||||
|
||||
def get_registry_stale_images(registry_uri: str,
|
||||
supported_distros: List[str]) -> Dict[str, int]:
|
||||
def get_registry_stale_images(registry_uri: str, base_dir: str) -> Dict[str, int]:
|
||||
"""
|
||||
Check the GitLab image registry for images that we no longer support and
|
||||
which should be deleted.
|
||||
|
||||
:param uri: URI pointing to a GitLab instance's image registry
|
||||
:param supported_distros: list of hosts supported by lcitool
|
||||
:param base_dir: local repository base directory
|
||||
:return: dictionary formatted as: {<gitlab_image_name>: <gitlab_image_id>}
|
||||
"""
|
||||
|
||||
dockerfiles = get_dockerfiles(base_dir)
|
||||
images = get_registry_images(registry_uri)
|
||||
|
||||
stale_images = {}
|
||||
for img in images:
|
||||
if get_image_distro(img["name"]) not in supported_distros:
|
||||
if img["name"][3:] not in dockerfiles:
|
||||
stale_images[img["name"]] = img["id"]
|
||||
|
||||
return stale_images
|
||||
|
Loading…
Reference in New Issue
Block a user