mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
ci: Implement 'refresh' helper action
This provides the same functionality as the two refresh scripts that are currently in the repository, with the following advantages: * all files are refreshed with a single command; * if lcitool is present in the user's $PATH, it will be discovered and used automatically; * some output is produced, so the user can follow along with the progress of the operation. Signed-off-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
parent
b204cdab69
commit
06cb54f36b
104
ci/helper
104
ci/helper
@ -5,10 +5,22 @@
|
||||
|
||||
import argparse
|
||||
import pathlib
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
class Parser:
|
||||
def __init__(self):
|
||||
# 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",
|
||||
)
|
||||
|
||||
# Main parser
|
||||
self.parser = argparse.ArgumentParser()
|
||||
subparsers = self.parser.add_subparsers(
|
||||
@ -17,6 +29,14 @@ class Parser:
|
||||
)
|
||||
subparsers.required = True
|
||||
|
||||
# refresh action
|
||||
refreshparser = subparsers.add_parser(
|
||||
"refresh",
|
||||
help="refresh data generated with lcitool",
|
||||
parents=[lcitoolparser],
|
||||
)
|
||||
refreshparser.set_defaults(func=Application.action_refresh)
|
||||
|
||||
def parse(self):
|
||||
return self.parser.parse_args()
|
||||
|
||||
@ -26,6 +46,90 @@ 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 lcitool_run(self, args):
|
||||
output = subprocess.check_output([self.args.lcitool] + args)
|
||||
return output.decode("utf-8")
|
||||
|
||||
def lcitool_get_hosts(self):
|
||||
output = self.lcitool_run(["hosts"])
|
||||
return output.splitlines()
|
||||
|
||||
def generate_dockerfile(self, host, cross=None):
|
||||
args = ["dockerfile", host, "libvirt"]
|
||||
outdir = self.basedir.joinpath("containers")
|
||||
outfile = f"ci-{host}.Dockerfile"
|
||||
|
||||
if cross:
|
||||
args.extend(["--cross", cross])
|
||||
outfile = f"ci-{host}-cross-{cross}.Dockerfile"
|
||||
|
||||
outpath = outdir.joinpath(outfile)
|
||||
print(outpath)
|
||||
|
||||
output = self.lcitool_run(args)
|
||||
with open(outpath, "w") as f:
|
||||
f.write(output)
|
||||
|
||||
def generate_vars(self, host):
|
||||
args = ["variables", host, "libvirt"]
|
||||
outdir = self.basedir.joinpath("cirrus")
|
||||
outfile = f"{host}.vars"
|
||||
|
||||
outpath = outdir.joinpath(outfile)
|
||||
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 host in self.lcitool_get_hosts():
|
||||
if host.startswith("freebsd-") or host.startswith("macos-"):
|
||||
continue
|
||||
|
||||
self.generate_dockerfile(host)
|
||||
|
||||
if host == "fedora-rawhide":
|
||||
for cross in fedora_cross:
|
||||
self.generate_dockerfile(host, cross)
|
||||
|
||||
if host.startswith("debian-"):
|
||||
for cross in debian_cross:
|
||||
if host == "debian-sid" and cross == "mips":
|
||||
continue
|
||||
self.generate_dockerfile(host, cross)
|
||||
|
||||
def refresh_cirrus(self):
|
||||
for host in self.lcitool_get_hosts():
|
||||
if not (host.startswith("freebsd-") or host.startswith("macos-")):
|
||||
continue
|
||||
|
||||
self.generate_vars(host)
|
||||
|
||||
def action_refresh(self):
|
||||
self.refresh_containers()
|
||||
self.refresh_cirrus()
|
||||
|
||||
def run(self):
|
||||
self.args.func(self)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user