PR#3358: kojid: permit forcing releasever/arch within mock per tag

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

Fixes #3304
https://pagure.io/koji/issue/3304
This commit is contained in:
Tomas Kopecek 2022-05-16 16:15:10 +02:00
commit ba5ecbb0c9
4 changed files with 19 additions and 1 deletions

View file

@ -280,6 +280,9 @@ class BuildRoot(object):
opts['maven_envs'] = self.maven_envs
opts['bind_opts'] = self.bind_opts
opts['target_arch'] = self.target_arch
if 'mock.forcearch' in self.config['extra']:
if bool(self.config['extra']['mock.forcearch']):
opts['forcearch'] = self.target_arch
if 'mock.package_manager' in self.config['extra']:
opts['package_manager'] = self.config['extra']['mock.package_manager']
if 'mock.yum.module_hotfixes' in self.config['extra']:
@ -301,6 +304,8 @@ class BuildRoot(object):
}
if 'mock.module_setup_commands' in self.config['extra']:
opts['module_setup_commands'] = self.config['extra']['mock.module_setup_commands']
if 'mock.releasever' in self.config['extra']:
opts['releasever'] = self.config['extra']['mock.releasever']
if self.internal_dev_setup is not None:
opts['internal_dev_setup'] = bool(self.internal_dev_setup)
opts['tag_macros'] = {}

View file

@ -1131,11 +1131,14 @@ def anon_handle_mock_config(goptions, session, args):
if opts['repoid'] != 'latest':
event = session.repoInfo(opts['repoid'])['create_event']
buildcfg = session.getBuildConfig(opts['tag_name'], event=event)
if options.arch:
if arch:
if not buildcfg['arches']:
warn("Tag %s has an empty arch list" % opts['tag_name'])
elif arch not in buildcfg['arches']:
warn('%s is not in the list of tag arches' % arch)
if 'mock.forcearch' in buildcfg['extra']:
if bool(buildcfg['extra']['mock.forcearch']):
opts['forcearch'] = arch
if 'mock.package_manager' in buildcfg['extra']:
opts['package_manager'] = buildcfg['extra']['mock.package_manager']
if 'mock.yum.module_hotfixes' in buildcfg['extra']:
@ -1149,6 +1152,8 @@ def anon_handle_mock_config(goptions, session, args):
opts['use_bootstrap'] = buildcfg['extra']['mock.use_bootstrap']
if 'mock.module_setup_commands' in buildcfg['extra']:
opts['module_setup_commands'] = buildcfg['extra']['mock.module_setup_commands']
if 'mock.releasever' in buildcfg['extra']:
opts['releasever'] = buildcfg['extra']['mock.releasever']
opts['tag_macros'] = {}
for key in buildcfg['extra']:
if key.startswith('rpm.macro.'):

View file

@ -393,6 +393,8 @@ environment follows:
* ``mock.new_chroot`` - 0/1 value. If it is set, ``--new-chroot`` or
`--old-chroot` option is appended to any mock call. If it is not set,
mock's default behavior is used.
* ``mock.releasever`` - When doing cross-compiles it may be necessary
to explicitly set the ``releasever`` to be used.
* ``mock.use_bootstrap`` - 0/1 value. If it is set, ``--bootstrap-chroot``
is appended to the mock init call. This tells mock to build in two stages,
using chroot rpm for creating the build chroot. If it is not set, mock's
@ -431,6 +433,8 @@ environment follows:
* ``mock.module_setup_commands`` - commands for configuring the modules active
in a buildroot. Available in `mock 2.4
<https://github.com/rpm-software-management/mock/wiki/Release-Notes-2.4>`__.
* ``mock.forcearch`` - 0/1 value. If true mock will set the ``forcearch``
config option to match the target arch of each buildroot.
* ``mock.yum.best`` - 0/1 value. If set yum/dnf will use highest available rpm
version (see man yum.conf)
* ``mock.yum.module_hotfixes`` - 0/1 value. If set, yum/dnf will use packages

View file

@ -1629,6 +1629,8 @@ def genMockConfig(name, arch, managed=False, repoid=None, tag_name=None, **opts)
# turn off warning for yum being used in place of dnf
'dnf_warning': False,
}
if 'forcearch' in opts:
config_opts['forcearch'] = opts['forcearch']
if opts.get('package_manager'):
config_opts['package_manager'] = opts['package_manager']
if opts.get('bootstrap_image'):
@ -1638,6 +1640,8 @@ def genMockConfig(name, arch, managed=False, repoid=None, tag_name=None, **opts)
config_opts['use_bootstrap'] = bool(opts['use_bootstrap'])
if 'module_setup_commands' in opts:
config_opts['module_setup_commands'] = opts['module_setup_commands']
if 'releasever' in opts:
config_opts['releasever'] = opts['releasever']
# bind_opts are used to mount parts (or all of) /dev if needed.
# See kojid::LiveCDTask for a look at this option in action.