debian-koji/plugins/cli/kiwi.py
Neal Gompa a5dd795043 kiwi: Add support for overriding version and releasever
This allows for kiwi descriptions that are compatible across
multiple targets to be easily used without needless modifications.

Additionally, it allows for custom values when preparing milestone
releases without needlessly modifying the descriptions.
2024-08-26 10:02:43 -04:00

111 lines
5 KiB
Python

from optparse import OptionParser
from koji import canonArch
from koji.plugin import export_cli
from koji_cli.lib import (
_running_in_bg,
activate_session,
watch_tasks,
warn,
)
@export_cli
def handle_kiwi_build(goptions, session, args):
"[build] Run a command in a buildroot"
usage = "usage: %prog kiwi-build [options] <target> <description_scm> <description_path>"
usage += "\n(Specify the --help global option for a list of other help options)"
parser = OptionParser(usage=usage)
parser.add_option("--scratch", action="store_true", default=False,
help="Perform a scratch build")
parser.add_option("--version", help="Override default version of the output image")
parser.add_option("--release", help="Release of the output image")
parser.add_option("--repo", action="append",
help="Specify a repo that will override the repo used to install "
"RPMs in the image. May be used multiple times. The "
"build tag repo associated with the target is the default.")
parser.add_option("--repo-releasever", help="Override default releasever of the output image")
parser.add_option("--noprogress", action="store_true",
help="Do not display progress of the upload")
parser.add_option("--kiwi-profile", action="store", default=None,
help="Select profile from description file")
parser.add_option("--type", help="Override default build type from description")
parser.add_option("--type-attr", action="append", default=[],
help="Override default attributes for the build type from description. "
"May be used multiple times.")
parser.add_option("--result-bundle-name-format", help="Override default bundle name format")
parser.add_option("--make-prep", action="store_true", default=False,
help="Run 'make prep' in checkout before starting the build")
parser.add_option("--buildroot-repo", action="store_true",
dest="use_buildroot_repo", default=False,
help="Add buildroot repo to installation sources. This is off by default, "
"but if there is no --repo used, it will be turned on automatically.")
parser.add_option("--can-fail", action="store", dest="optional_arches",
metavar="ARCH1,ARCH2,...", default="",
help="List of archs which are not blocking for build "
"(separated by commas.")
parser.add_option("--arch", action="append", dest="arches", default=[],
help="Limit arches to this subset")
parser.add_option("--nowait", action="store_false", dest="wait", default=True)
parser.add_option("--wait", action="store_true",
help="Wait on the image creation, even if running in the background")
(options, args) = parser.parse_args(args)
if len(args) != 3:
parser.error("Incorrect number of arguments")
assert False # pragma: no cover
target, scm, path = args
activate_session(session, goptions)
kwargs = {
'arches': [],
'target': target,
'desc_url': scm,
'desc_path': path,
}
if options.scratch:
kwargs['scratch'] = True
if options.optional_arches:
kwargs['optional_arches'] = [
canonArch(arch)
for arch in options.optional_arches.split(',')
if arch]
if options.kiwi_profile:
kwargs['profile'] = options.kiwi_profile
if options.version:
kwargs['version'] = options.version
if options.release:
kwargs['release'] = options.release
if options.make_prep:
kwargs['make_prep'] = True
if options.type:
kwargs['type'] = options.type
if options.type_attr:
kwargs['type_attr'] = options.type_attr
if options.result_bundle_name_format:
kwargs['result_bundle_name_format'] = options.result_bundle_name_format
if options.arches:
kwargs['arches'] = [canonArch(arch) for arch in options.arches]
if options.repo:
kwargs['repos'] = options.repo
if options.repo_releasever:
kwargs['repo_releasever'] = options.repo_releasever
if session.hub_version < (1, 35, 0):
warn("hub version is < 1.35, buildroot repo is always used in addition to specified repos")
elif options.use_buildroot_repo:
kwargs['use_buildroot_repo'] = True
elif not options.repo:
warn("no repos given, using buildroot repo")
kwargs['use_buildroot_repo'] = True
task_id = session.kiwiBuild(**kwargs)
if not goptions.quiet:
print("Created task: %d" % task_id)
print("Task info: %s/taskinfo?taskID=%s" % (goptions.weburl, task_id))
if options.wait or (options.wait is None and not _running_in_bg()):
session.logout()
return watch_tasks(session, [task_id], quiet=goptions.quiet,
poll_interval=goptions.poll_interval, topurl=goptions.topurl)