From afc0efb122ed72351277e5c9f697c42651a65446 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: May 27 2020 12:28:39 +0000 Subject: Support tag specific environment variables This makes it possible to specify an environment variable for a tag that will be used during builds. e.g. koji edit-tag -x rpm.env.CC=clang --- diff --git a/builder/kojid b/builder/kojid index 63467ac..d450e05 100755 --- a/builder/kojid +++ b/builder/kojid @@ -293,10 +293,13 @@ class BuildRoot(object): if self.internal_dev_setup is not None: opts['internal_dev_setup'] = bool(self.internal_dev_setup) opts['tag_macros'] = {} + opts['tag_envvars'] = {} for key in self.config['extra']: if key.startswith('rpm.macro.'): macro = '%' + key[10:] opts['tag_macros'][macro] = self.config['extra'][key] + elif key.startswith('rpm.env.'): + opts['tag_envvars'][key[8:]] = self.config['extra'][key] output = koji.genMockConfig(self.name, self.br_arch, managed=True, **opts) # write config diff --git a/docs/source/using_the_koji_build_system.rst b/docs/source/using_the_koji_build_system.rst index bdd1b01..92d1db0 100644 --- a/docs/source/using_the_koji_build_system.rst +++ b/docs/source/using_the_koji_build_system.rst @@ -395,6 +395,15 @@ environment follows: `--old-chroot` option is appended to any mock call. If it is not set, mock's default behavior is used. +You may also specify per-tag environment variables for mock to use. +For example, to set the CC environment variable to clang, you could +do: + +:: + + koji edit-tag dnf-fedora-tag -x rpm.env.CC=clang + + Using Koji to control tasks ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/koji/__init__.py b/koji/__init__.py index fb99e37..4dc8c7d 100644 --- a/koji/__init__.py +++ b/koji/__init__.py @@ -1697,6 +1697,13 @@ name=build value = macros[key] parts.append("config_opts['macros'][%r] = %r\n" % (key, value)) parts.append("\n") + envvars = opts.get('tag_envvars', {}) + for key in sorted(envvars): + value = envvars[key] + parts.append("config_opts['environment'][%r] = %r\n" % (key, value)) + if len(envvars): + parts.append("\n") + for key in sorted(files): value = files[key] parts.append("config_opts['files'][%r] = %r\n" % (key, value))