xref: /openbmc/qemu/tests/lcitool/refresh (revision 05e47b75cb0310210321028eee98116a0006f93e)
14ebb040fSDaniel P. Berrangé#!/usr/bin/python3
24ebb040fSDaniel P. Berrangé#
34ebb040fSDaniel P. Berrangé# Re-generate container recipes
44ebb040fSDaniel P. Berrangé#
54ebb040fSDaniel P. Berrangé# This script uses the "lcitool" available from
64ebb040fSDaniel P. Berrangé#
74ebb040fSDaniel P. Berrangé#   https://gitlab.com/libvirt/libvirt-ci
84ebb040fSDaniel P. Berrangé#
94ebb040fSDaniel P. Berrangé# Copyright (c) 2020 Red Hat Inc.
104ebb040fSDaniel P. Berrangé#
114ebb040fSDaniel P. Berrangé# This work is licensed under the terms of the GNU GPL, version 2
124ebb040fSDaniel P. Berrangé# or (at your option) any later version. See the COPYING file in
134ebb040fSDaniel P. Berrangé# the top-level directory.
144ebb040fSDaniel P. Berrangé
154ebb040fSDaniel P. Berrangéimport sys
164ebb040fSDaniel P. Berrangéimport os
174ebb040fSDaniel P. Berrangéimport subprocess
184ebb040fSDaniel P. Berrangé
194ebb040fSDaniel P. Berrangéfrom pathlib import Path
204ebb040fSDaniel P. Berrangé
214ebb040fSDaniel P. Berrangéif len(sys.argv) != 1:
224ebb040fSDaniel P. Berrangé   print("syntax: %s" % sys.argv[0], file=sys.stderr)
234ebb040fSDaniel P. Berrangé   sys.exit(1)
244ebb040fSDaniel P. Berrangé
254ebb040fSDaniel P. Berrangéself_dir = Path(__file__).parent
264ebb040fSDaniel P. Berrangésrc_dir = self_dir.parent.parent
274ebb040fSDaniel P. Berrangédockerfiles_dir = Path(src_dir, "tests", "docker", "dockerfiles")
284ebb040fSDaniel P. Berrangé
294ebb040fSDaniel P. Berrangélcitool_path = Path(self_dir, "libvirt-ci", "lcitool")
304ebb040fSDaniel P. Berrangé
314ebb040fSDaniel P. Berrangélcitool_cmd = [lcitool_path, "--data-dir", self_dir]
324ebb040fSDaniel P. Berrangé
334ebb040fSDaniel P. Berrangédef atomic_write(filename, content):
344ebb040fSDaniel P. Berrangé   tmp = filename.with_suffix(filename.suffix + ".tmp")
354ebb040fSDaniel P. Berrangé   try:
364ebb040fSDaniel P. Berrangé      with tmp.open("w") as fp:
374ebb040fSDaniel P. Berrangé         print(content, file=fp, end="")
384ebb040fSDaniel P. Berrangé         tmp.rename(filename)
394ebb040fSDaniel P. Berrangé   except Exception as ex:
404ebb040fSDaniel P. Berrangé      tmp.unlink()
414ebb040fSDaniel P. Berrangé      raise
424ebb040fSDaniel P. Berrangé
434ebb040fSDaniel P. Berrangédef generate(filename, cmd, trailer):
444ebb040fSDaniel P. Berrangé   print("Generate %s" % filename)
454ebb040fSDaniel P. Berrangé   lcitool=subprocess.run(cmd, capture_output=True)
464ebb040fSDaniel P. Berrangé
474ebb040fSDaniel P. Berrangé   if lcitool.returncode != 0:
484ebb040fSDaniel P. Berrangé      raise Exception("Failed to generate %s: %s" % (filename, lcitool.stderr))
494ebb040fSDaniel P. Berrangé
504ebb040fSDaniel P. Berrangé   content = lcitool.stdout.decode("utf8")
514ebb040fSDaniel P. Berrangé   if trailer is not None:
524ebb040fSDaniel P. Berrangé      content += trailer
534ebb040fSDaniel P. Berrangé   atomic_write(filename, content)
544ebb040fSDaniel P. Berrangé
554ebb040fSDaniel P. Berrangédef generate_dockerfile(host, target, cross=None, trailer=None):
564ebb040fSDaniel P. Berrangé   filename = Path(src_dir, "tests", "docker", "dockerfiles", host + ".docker")
574ebb040fSDaniel P. Berrangé   cmd = lcitool_cmd + ["dockerfile"]
584ebb040fSDaniel P. Berrangé   if cross is not None:
594ebb040fSDaniel P. Berrangé      cmd.extend(["--cross", cross])
604ebb040fSDaniel P. Berrangé   cmd.extend([target, "qemu"])
614ebb040fSDaniel P. Berrangé   generate(filename, cmd, trailer)
624ebb040fSDaniel P. Berrangé
634ebb040fSDaniel P. Berrangétry:
6421ea888fSDaniel P. Berrangé   generate_dockerfile("centos8", "centos-8")
65*05e47b75SDaniel P. Berrangé   generate_dockerfile("fedora", "fedora-35")
6621ea888fSDaniel P. Berrangé
674ebb040fSDaniel P. Berrangé   sys.exit(0)
684ebb040fSDaniel P. Berrangéexcept Exception as ex:
694ebb040fSDaniel P. Berrangé   print(str(ex), file=sys.stderr)
704ebb040fSDaniel P. Berrangé   sys.exit(1)
71