sme version of tag2distrepo

This commit is contained in:
Trevor Batley
2024-11-14 10:58:43 +11:00
parent 921c7f84af
commit 554d021527
4 changed files with 140 additions and 23 deletions

View File

@@ -1,22 +1,23 @@
# tag2distrepo
# tag2distrepo_sme
Koji plugin to automatically regenerate distrepos on tag operations
Koozali version which allows additional dist-repo settings
It uses the following options on a tag to control behaviour:
- `tag2distrepo.enabled`: set to "true" to enable automatic distrepos
- `tag2distrepo.keys`: set to a space-separated list of keys to use for distrepos
- `tag2distrepo_sme.enabled`: set to "true" to enable automatic distrepos
- `tag2distrepo_sme.keys`: set to a space-separated list of keys to use for distrepos
The tag must have at least one arch configured on it.
# Installing plugin on Koji Hub
1. Copy `tag2distrepo.py` to `/usr/lib/koji-hub-plugins`
1. Copy `tag2distrepo_sme.py` to `/usr/lib/koji-hub-plugins`
2. Edit the following settings in `/etc/koji-hub/hub.conf` to enable the plugin:
PluginPath = /usr/lib/koji-hub-plugins
Plugins = tag2distrepo
Plugins = tag2distrepo_sme
3. Reload Apache
@@ -26,22 +27,22 @@ The tag must have at least one arch configured on it.
Here is an example of enabling the plugin on an "f33-infra" tag. Create the tag and ensure it has at least one arch and a package list (direct or inherited) so we can tag packages into it.
koji add-tag f33-infra --arches=x86_64
koji add-pkg --owner kdreyer f33-infra bash
koji add-tag smeserver11 --arches=x86_64
koji add-pkg --owner kojiadmin smeserver11 bash
Set the extra options on the tag so the plugin will generate the repository:
koji edit-tag -x tag2distrepo.enabled=True -x tag2distrepo.keys=47dd8ef9 f33-infra
koji edit-tag -x tag2distrepo_sme.enabled=True -x tag2distrepo_sme.keys=44922a28 -x tag2distrepo_sme=skip_missing_signatures=True smeserver11
Tag a new build to trigger the plugin:
koji tag f33-infra bash-5.0.17-2.fc33
koji tag smeserver11 bash-5.0.17-2.el8.sme
The hub will immediately queue a new distRepo task, using the tagBuild task host as the distRepo task owner. When the distRepo task completes, you can find the new repository under the ``topurl`` for your Koji instance.
To confirm that the tag has the correct options set, use the `koji taginfo` command:
koji taginfo f33-infra
koji taginfo smeserver11
Tag: f33-infra [18680]
Arches: x86_64
Tag options:
@@ -50,7 +51,7 @@ To confirm that the tag has the correct options set, use the `koji taginfo` comm
To disable the plugin for the same tag:
koji edit-tag -r tag2distrepo.enabled -r tag2distrepo.keys f33-infra
koji edit-tag -r tag2distrepo_sme.enabled smeserver11
# Using Multiple Keys
@@ -58,6 +59,6 @@ If you want to create a repository that contains builds signed by more than one
For example:
koji edit-tag coreos-pool -x tag2distrepo.keys="45719a39 9867c58f 38ab71f4 5323552a"
koji edit-tag smecontribs11 -x tag2distrepo_sme.keys="44922a28 9867c58f 38ab71f4 5323552a"
For each RPM in the tag, Koji will use the first signed copy that it finds. In other words, Koji will try the first key (`45719a39`), and if Koji does not have the first key's signature for that RPM, then it will try the second key (`9867c58f`), third key (`38ab71f4`), and so on.
For each RPM in the tag, Koji will use the first signed copy that it finds. In other words, Koji will try the first key (`44922a28`), and if Koji does not have the first key's signature for that RPM, then it will try the second key (`9867c58f`), third key (`38ab71f4`), and so on.

View File

@@ -12,20 +12,20 @@ import logging
@callback('postTag')
def tag2distrepo(cbtype, tag, build, user, force=False):
logger = logging.getLogger('koji.plugin.tag2distrepo')
logger = logging.getLogger('koji.plugin.tag2distrepo_sme')
if not tag['extra'].get("tag2distrepo.enabled"):
logger.debug("No tag2distrepo enabled for tag %s" % tag['name'])
logger.debug("No tag2distrepo_sme enabled for tag %s" % tag['name'])
return
if not tag['arches']:
raise ValueError("Tag %s has no arches configured but tag2distrepo is enabled" % tag['name'])
raise ValueError("Tag %s has no arches configured but tag2distrepo_sme is enabled" % tag['name'])
keys = tag['extra'].get("tag2distrepo.keys", '').split()
compfile = tag['extra'].get("tag2distrepo.comp", 'none')
inherit = tag['extra'].get("tag2distrepo.inherit", False)
latest = tag['extra'].get("tag2distrepo.latest", False)
split_debuginfo = tag['extra'].get("tag2distrepo.split_debuginfo", False)
skip_missing = tag['extra'].get("tag2distrepo.skip_missing_signatures", False)
keys = tag['extra'].get("tag2distrepo_sme.keys", '').split()
compfile = tag['extra'].get("tag2distrepo_sme.comp", 'none')
inherit = tag['extra'].get("tag2distrepo_sme.inherit", False)
latest = tag['extra'].get("tag2distrepo_sme.latest", False)
split_debuginfo = tag['extra'].get("tag2distrepo_sme.split_debuginfo", False)
skip_missing = tag['extra'].get("tag2distrepo_sme.skip_missing_signatures", False)
if keys:
logger.debug("Ensuring signed RPMs are written out")
@@ -35,7 +35,7 @@ def tag2distrepo(cbtype, tag, build, user, force=False):
if rpm['sigkey'] == key:
write_signed_rpm(rpm['id'], key, False)
if tag['extra'].get("tag2distrepo.allow_missing_signatures"):
if tag['extra'].get("tag2distrepo_sme.allow_missing_signatures"):
task_opts = {
'arch': tag['arches'].split(),
'comp': compfile,