xref: /openbmc/qemu/tests/lcitool/refresh (revision 89767579cad2e371bc966e6cc6094faca2743401)
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é
79e3000245SAlex Bennéedef debian_cross_build(prefix, targets):
80e3000245SAlex Bennée   conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix)
81e3000245SAlex Bennée   targets = "ENV DEF_TARGET_LIST %s\n" % (targets)
82e3000245SAlex Bennée   return "".join([conf, targets])
83e3000245SAlex Bennée
84e3000245SAlex 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é
95e3000245SAlex Bennée   generate_dockerfile("debian-arm64-cross", "debian-11",
96e3000245SAlex Bennée                       cross="aarch64",
97e3000245SAlex Bennée                       trailer=debian_cross_build("aarch64-linux-gnu-",
98e3000245SAlex Bennée                                                  "aarch64-softmmu,aarch64-linux-user"))
99e3000245SAlex Bennée
100*89767579SAlex Bennée   generate_dockerfile("debian-s390x-cross", "debian-11",
101*89767579SAlex Bennée                       cross="s390x",
102*89767579SAlex Bennée                       trailer=debian_cross_build("s390x-linux-gnu-",
103*89767579SAlex Bennée                                                  "s390x-softmmu,s390x-linux-user"))
104*89767579SAlex Bennée
105c45a540fSDaniel P. Berrangé   generate_cirrus("freebsd-12")
106c45a540fSDaniel P. Berrangé   generate_cirrus("freebsd-13")
107c45a540fSDaniel P. Berrangé   generate_cirrus("macos-11")
108c45a540fSDaniel P. Berrangé
1094ebb040fSDaniel P. Berrangé   sys.exit(0)
1104ebb040fSDaniel P. Berrangéexcept Exception as ex:
1114ebb040fSDaniel P. Berrangé   print(str(ex), file=sys.stderr)
1124ebb040fSDaniel P. Berrangé   sys.exit(1)
113