You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koji/0006-kiwi-Add-support-for-o...

147 lines
6.5 KiB

From a5dd7950434e4ff8dc37d77803f23dcb480aaa4b Mon Sep 17 00:00:00 2001
From: Neal Gompa <ngompa@velocitylimitless.com>
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