From ea3e2faf2303daac3fd645588b5c2ca3547a15ac Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Aug 19 2024 13:33:49 +0000 Subject: [PATCH 1/2] kiwi: Add support for overriding image type attributes This allows setting things like the volume and application IDs for ISO builds. --- diff --git a/plugins/builder/kiwi.py b/plugins/builder/kiwi.py index a9d63cf..99737f7 100644 --- a/plugins/builder/kiwi.py +++ b/plugins/builder/kiwi.py @@ -389,6 +389,8 @@ class KiwiCreateImageTask(BaseBuildTask): '--description', os.path.join(os.path.basename(scmsrcdir), base_path), '--target-dir', target_dir, ]) + for typeattr in self.opts.get('type_attr', []):: + cmd.extend(['--set-type-attr', typeattr]) rv = broot.mock(['--cwd', broot.tmpdir(within=True), '--chroot', '--'] + cmd) if rv: raise koji.GenericError("Kiwi failed") diff --git a/plugins/cli/kiwi.py b/plugins/cli/kiwi.py index 6e965c0..7e3e977 100644 --- a/plugins/cli/kiwi.py +++ b/plugins/cli/kiwi.py @@ -28,6 +28,9 @@ def handle_kiwi_build(goptions, session, args): 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("--make-prep", action="store_true", default=False, help="Run 'make prep' in checkout before starting the build") parser.add_option("--can-fail", action="store", dest="optional_arches", @@ -68,6 +71,8 @@ def handle_kiwi_build(goptions, session, args): kwargs['make_prep'] = True if options.type: kwargs['type'] = options.type + if options.type_attr: + kwargs['type_attr'] = options.type_attr if options.arches: kwargs['arches'] = [canonArch(arch) for arch in options.arches] if options.repo: diff --git a/plugins/hub/kiwi.py b/plugins/hub/kiwi.py index 7b0c2f0..852cbad 100644 --- a/plugins/hub/kiwi.py +++ b/plugins/hub/kiwi.py @@ -17,13 +17,15 @@ 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=None, type_attr=None): context.session.assertPerm('image') for i in [desc_url, desc_path, profile, release]: if i is not None: kojihub.convert_value(i, cast=str, check_only=True) if repos: kojihub.convert_value(repos, cast=list, check_only=True) + if type_attr: + kojihub.convert_value(type_attr, cast=list, check_only=True) kojihub.get_build_target(target, strict=True) if isinstance(arches, list): arches = " ".join(arches) @@ -58,6 +60,8 @@ def kiwiBuild(target, arches, desc_url, desc_path, optional_arches=None, profile opts['make_prep'] = True if type: opts['type'] = type + if type_attr: + opts['type_attr'] = type_attr return kojihub.make_task('kiwiBuild', [target, arches, desc_url, desc_path, opts], **taskOpts) From df768ca9303b5da314d575af29b86712f5a9bf51 Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Aug 19 2024 13:34:10 +0000 Subject: [PATCH 2/2] kiwi: Add support for overriding kiwi image file name format In order to be able to support workflows where the exact structure of the image filenames matter (e.g. for Linux distribution artifacts), support optionally overriding the image file name structure. --- diff --git a/plugins/builder/kiwi.py b/plugins/builder/kiwi.py index 99737f7..1b4a948 100644 --- a/plugins/builder/kiwi.py +++ b/plugins/builder/kiwi.py @@ -408,6 +408,8 @@ class KiwiCreateImageTask(BaseBuildTask): '--target-dir', target_dir, '--bundle-dir', bundle_dir, '--id', release] + if self.opts.get('result_bundle_name_format'): + cmd.extend(['--bundle-format', self.opts['result_bundle_name_format']]) rv = broot.mock(['--cwd', broot.tmpdir(within=True), '--chroot', '--'] + cmd) if rv: raise koji.GenericError("Kiwi failed") diff --git a/plugins/cli/kiwi.py b/plugins/cli/kiwi.py index 7e3e977..f017257 100644 --- a/plugins/cli/kiwi.py +++ b/plugins/cli/kiwi.py @@ -31,6 +31,7 @@ def handle_kiwi_build(goptions, session, args): 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("--can-fail", action="store", dest="optional_arches", @@ -73,6 +74,8 @@ def handle_kiwi_build(goptions, session, args): 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: diff --git a/plugins/hub/kiwi.py b/plugins/hub/kiwi.py index 852cbad..15f352c 100644 --- a/plugins/hub/kiwi.py +++ b/plugins/hub/kiwi.py @@ -17,7 +17,7 @@ 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): + type=None, type_attr=None, result_bundle_name_format=None): context.session.assertPerm('image') for i in [desc_url, desc_path, profile, release]: if i is not None: @@ -26,6 +26,8 @@ def kiwiBuild(target, arches, desc_url, desc_path, optional_arches=None, profile kojihub.convert_value(repos, cast=list, check_only=True) if type_attr: kojihub.convert_value(type_attr, cast=list, check_only=True) + if result_bundle_name_format: + kojihub.convert_value(result_bundle_name_format, cast=str, check_only=True) kojihub.get_build_target(target, strict=True) if isinstance(arches, list): arches = " ".join(arches) @@ -62,6 +64,8 @@ def kiwiBuild(target, arches, desc_url, desc_path, optional_arches=None, profile opts['type'] = type if type_attr: opts['type_attr'] = type_attr + if result_bundle_name_format: + opts['result_bundle_name_format'] = result_bundle_name_format return kojihub.make_task('kiwiBuild', [target, arches, desc_url, desc_path, opts], **taskOpts)