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é 63*c45a540fSDaniel P. Berrangédef generate_cirrus(target, trailer=None): 64*c45a540fSDaniel P. Berrangé filename = Path(src_dir, ".gitlab-ci.d", "cirrus", target + ".vars") 65*c45a540fSDaniel P. Berrangé cmd = [lcitool_path, "variables", target, "qemu"] 66*c45a540fSDaniel P. Berrangé generate(filename, cmd, trailer) 67*c45a540fSDaniel 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é 794ebb040fSDaniel P. Berrangétry: 8021ea888fSDaniel P. Berrangé generate_dockerfile("centos8", "centos-8") 8105e47b75SDaniel P. Berrangé generate_dockerfile("fedora", "fedora-35") 82e4821916SDaniel P. Berrangé generate_dockerfile("ubuntu1804", "ubuntu-1804", 83e4821916SDaniel P. Berrangé trailer="".join(ubuntu1804_skipssh)) 84bb317c32SDaniel P. Berrangé generate_dockerfile("ubuntu2004", "ubuntu-2004", 85bb317c32SDaniel P. Berrangé trailer="".join(ubuntu2004_tsanhack)) 8612219839SDaniel P. Berrangé generate_dockerfile("opensuse-leap", "opensuse-leap-152") 87*c45a540fSDaniel P. Berrangé 88*c45a540fSDaniel P. Berrangé generate_cirrus("freebsd-12") 89*c45a540fSDaniel P. Berrangé generate_cirrus("freebsd-13") 90*c45a540fSDaniel P. Berrangé generate_cirrus("macos-11") 91*c45a540fSDaniel P. Berrangé 924ebb040fSDaniel P. Berrangé sys.exit(0) 934ebb040fSDaniel P. Berrangéexcept Exception as ex: 944ebb040fSDaniel P. Berrangé print(str(ex), file=sys.stderr) 954ebb040fSDaniel P. Berrangé sys.exit(1) 96