#!/usr/bin/python3
# Take an srpm and build it in the default mock environment of a given cockpit test VM image. This is necessary as
# e. g. an rpm built on Fedora ≥ 31 cannot be installed on continuous-atomic any more due to a format change.

import argparse
import os
import sys

BOTS_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "bots")
sys.path.append(BOTS_DIR)

from machine.machine_core import machine_virtual  # noqa: E402

parser = argparse.ArgumentParser(description="Build rpm inside a cockpit test VM image")
parser.add_argument("-v", "--verbose", action="store_true", help="Verbose output")
parser.add_argument("srpm", help="path to SRPM")
parser.add_argument("image", help="image name in which to build the SRPM")
args = parser.parse_args()

network = machine_virtual.VirtNetwork(0, image=args.image)
machine = machine_virtual.VirtMachine(image=args.image,
                                      networking=network.host(),
                                      memory_mb=1024,
                                      verbose=args.verbose)
machine.start()
machine.wait_boot()
machine.upload([args.srpm], "/tmp/", relative_dir=os.getcwd())

machine.execute("su builder -c 'rm -rf /tmp/build-results; /usr/bin/mock --no-clean --resultdir /tmp/build-results "
                "--rebuild /tmp/%s'" % os.path.basename(args.srpm), stdout=1)

rpms = machine.execute("ls /tmp/build-results/*.rpm").strip().split()
for rpm in rpms:
    if args.verbose:
        print("Downloading built rpm", rpm)
    machine.download(rpm, os.getcwd())

machine.stop()
