From a5dd7950434e4ff8dc37d77803f23dcb480aaa4b Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Mon, 26 Aug 2024 10:02:43 -0400 Subject: [PATCH 6/6] 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. --- plugins/builder/kiwi.py | 15 +++++++++++---- plugins/cli/kiwi.py | 6 ++++++ plugins/hub/kiwi.py | 9 +++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/plugins/builder/kiwi.py b/plugins/builder/kiwi.py index 2ac5cb3b..f222dec1 100644 --- a/plugins/builder/kiwi.py +++ b/plugins/builder/kiwi.py @@ -103,6 +103,8 @@ class KiwiBuildTask(BuildImageTask): name = "%s-%s" % (name, opts.get('profile', default_profile)) bld_info = {} + if opts.get('version'): + version = opts['version'] if opts.get('release'): release = opts['release'] else: @@ -188,7 +190,7 @@ class KiwiCreateImageTask(BaseBuildTask): Methods = ['createKiwiImage'] _taskWeight = 2.0 - def prepareDescription(self, desc_path, name, version, repos, arch): + def prepareDescription(self, desc_path, name, version, repos, repo_releasever, arch): # XML errors should have already been caught by parent task newxml = xml.dom.minidom.parse(desc_path) # nosec image = newxml.getElementsByTagName('image')[0] @@ -229,11 +231,15 @@ class KiwiCreateImageTask(BaseBuildTask): image.setAttribute('name', name) preferences = image.getElementsByTagName('preferences')[0] + + # Handle version and release-version + preferences.getElementsByTagName('version')[0].childNodes[0].data = version try: - preferences.getElementsByTagName('release-version')[0].childNodes[0].data = version + preferences.getElementsByTagName('release-version')[0].childNodes[0].data \ + = repo_releasever except IndexError: releasever_node = newxml.createElement('release-version') - text = newxml.createTextNode(version) + text = newxml.createTextNode(repo_releasever) releasever_node.appendChild(text) preferences.appendChild(releasever_node) @@ -357,6 +363,7 @@ class KiwiCreateImageTask(BaseBuildTask): baseurl = '%s/%s' % (repopath, arch) self.logger.debug('BASEURL: %s' % baseurl) repos.append(baseurl) + repo_releasever = self.opts.get('repo_releasever', version) base_path = os.path.dirname(desc_path) if opts.get('make_prep'): @@ -368,7 +375,7 @@ class KiwiCreateImageTask(BaseBuildTask): raise koji.GenericError("Preparation step failed") path = os.path.join(scmsrcdir, desc_path) - desc, types = self.prepareDescription(path, name, version, repos, arch) + desc, types = self.prepareDescription(path, name, version, repos, repo_releasever, arch) self.uploadFile(desc) target_dir = '/builddir/result/image' diff --git a/plugins/cli/kiwi.py b/plugins/cli/kiwi.py index 02958373..9d177ac9 100644 --- a/plugins/cli/kiwi.py +++ b/plugins/cli/kiwi.py @@ -19,11 +19,13 @@ def handle_kiwi_build(goptions, session, args): 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, @@ -71,6 +73,8 @@ def handle_kiwi_build(goptions, session, args): 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: @@ -85,6 +89,8 @@ def handle_kiwi_build(goptions, session, args): 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") diff --git a/plugins/hub/kiwi.py b/plugins/hub/kiwi.py index 81852e52..4aeb1048 100644 --- a/plugins/hub/kiwi.py +++ b/plugins/hub/kiwi.py @@ -17,9 +17,10 @@ koji.tasks.LEGACY_SIGNATURES['createKiwiImage'] = [ @export def kiwiBuild(target, arches, desc_url, desc_path, optional_arches=None, profile=None, scratch=False, priority=None, make_prep=False, repos=None, release=None, - type=None, type_attr=None, result_bundle_name_format=None, use_buildroot_repo=True): + type=None, type_attr=None, result_bundle_name_format=None, use_buildroot_repo=True, + version=None, repo_releasever=None): context.session.assertPerm('image') - for i in [desc_url, desc_path, profile, release]: + for i in [desc_url, desc_path, profile, version, release, repo_releasever]: if i is not None: kojihub.convert_value(i, cast=str, check_only=True) if repos: @@ -52,12 +53,16 @@ def kiwiBuild(target, arches, desc_url, desc_path, optional_arches=None, profile opts['scratch'] = True if profile: opts['profile'] = profile + if version: + opts['version'] = version if release: opts['release'] = release if optional_arches: opts['optional_arches'] = optional_arches if repos: opts['repos'] = repos + if repo_releasever: + opts['repo_releasever'] = repo_releasever if make_prep: opts['make_prep'] = True if type: -- 2.46.0