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