PR#4184: kiwi: Add support for overriding version and releasever

Merges #4184
https://pagure.io/koji/pull-request/4184

Fixes: #4183
https://pagure.io/koji/issue/4183
kiwi: Add support for overriding version and release-version attributes
This commit is contained in:
Tomas Kopecek 2024-08-26 16:18:23 +02:00
commit 7ce96c9ec3
3 changed files with 24 additions and 6 deletions

View file

@ -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'

View file

@ -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")

View file

@ -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: