xref: /openbmc/qemu/tests/lcitool/refresh (revision e3000245a0b2737d2e690c3f5a38dcc1ca9b36a2)
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é
63c45a540fSDaniel P. Berrangédef generate_cirrus(target, trailer=None):
64c45a540fSDaniel P. Berrangé   filename = Path(src_dir, ".gitlab-ci.d", "cirrus", target + ".vars")
655d3539d5SPhilippe Mathieu-Daudé   cmd = lcitool_cmd + ["variables", target, "qemu"]
66c45a540fSDaniel P. Berrangé   generate(filename, cmd, trailer)
67c45a540fSDaniel P. Berrangé
68e4821916SDaniel P. Berrangéubuntu1804_skipssh = [
69e4821916SDaniel P. Berrangé   "# https://bugs.launchpad.net/qemu/+bug/1838763\n",
70e4821916SDaniel P. Berrangé   "ENV QEMU_CONFIGURE_OPTS --disable-libssh\n"
71e4821916SDaniel P. Berrangé]
72e4821916SDaniel P. Berrangé
73bb317c32SDaniel P. Berrangéubuntu2004_tsanhack = [
74bb317c32SDaniel P. Berrangé   "# Apply patch https://reviews.llvm.org/D75820\n",
75bb317c32SDaniel P. Berrangé   "# This is required for TSan in clang-10 to compile with QEMU.\n",
76bb317c32SDaniel P. Berrangé   "RUN sed -i 's/^const/static const/g' /usr/lib/llvm-10/lib/clang/10.0.0/include/sanitizer/tsan_interface.h\n"
77bb317c32SDaniel P. Berrangé]
78bb317c32SDaniel P. Berrangé
79*e3000245SAlex Bennéedef debian_cross_build(prefix, targets):
80*e3000245SAlex Bennée   conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix)
81*e3000245SAlex Bennée   targets = "ENV DEF_TARGET_LIST %s\n" % (targets)
82*e3000245SAlex Bennée   return "".join([conf, targets])
83*e3000245SAlex Bennée
84*e3000245SAlex Bennée
854ebb040fSDaniel P. Berrangétry:
868b11f4c3SThomas Huth   generate_dockerfile("centos8", "centos-stream-8")
8705e47b75SDaniel P. Berrangé   generate_dockerfile("fedora", "fedora-35")
88e4821916SDaniel P. Berrangé   generate_dockerfile("ubuntu1804", "ubuntu-1804",
89e4821916SDaniel P. Berrangé                       trailer="".join(ubuntu1804_skipssh))
90bb317c32SDaniel P. Berrangé   generate_dockerfile("ubuntu2004", "ubuntu-2004",
91bb317c32SDaniel P. Berrangé                       trailer="".join(ubuntu2004_tsanhack))
9212219839SDaniel P. Berrangé   generate_dockerfile("opensuse-leap", "opensuse-leap-152")
93e1cb5c75SDaniel P. Berrangé   generate_dockerfile("alpine", "alpine-edge")
94c45a540fSDaniel P. Berrangé
95*e3000245SAlex Bennée   generate_dockerfile("debian-arm64-cross", "debian-11",
96*e3000245SAlex Bennée                       cross="aarch64",
97*e3000245SAlex Bennée                       trailer=debian_cross_build("aarch64-linux-gnu-",
98*e3000245SAlex Bennée                                                  "aarch64-softmmu,aarch64-linux-user"))
99*e3000245SAlex Bennée
100c45a540fSDaniel P. Berrangé   generate_cirrus("freebsd-12")
101c45a540fSDaniel P. Berrangé   generate_cirrus("freebsd-13")
102c45a540fSDaniel P. Berrangé   generate_cirrus("macos-11")
103c45a540fSDaniel P. Berrangé
1044ebb040fSDaniel P. Berrangé   sys.exit(0)
1054ebb040fSDaniel P. Berrangéexcept Exception as ex:
1064ebb040fSDaniel P. Berrangé   print(str(ex), file=sys.stderr)
1074ebb040fSDaniel P. Berrangé   sys.exit(1)
108