debian-koji-osbuild/plugins/hub/osbuild.py
Tomas Hozza c725265081 Drop support for specifying more than one image type
While it is technically possible to build more than one image type
as part of a Koji compose in osbuild-composer, this option is not used
in reality and it also makes very little sense. If the user wants to
build more than one image type, they should submit multiple Koji builds.

Adjust affected unit tests.
2022-08-22 09:58:06 +02:00

136 lines
3.8 KiB
Python

"""Koji osbuild integration for Koji Hub"""
import sys
import jsonschema
import koji
from koji.context import context
sys.path.insert(0, "/usr/share/koji-hub/")
import kojihub # pylint: disable=import-error, wrong-import-position
OSBUILD_IMAGE_SCHEMA = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "osbuildImage arguments",
"type": "array",
"minItems": 7,
"items": [
{
"type": "string",
"description": "Name"
},
{
"type": "string",
"description": "Version"
},
{
"type": "string",
"description": "Distribution"
},
{
"type": "string",
"description": "Image Type",
},
{
"type": "string",
"description": "Target"
},
{
"type": "array",
"description": "Architectures",
"minItems": 1,
"items": {
"type": "string"
}
},
{
"type": "object",
"$ref": "#/definitions/options"
}],
"definitions": {
"repo": {
"title": "Repository options",
"type": "object",
"additionalProperties": False,
"properties": {
"baseurl": {
"type": "string"
},
"package_sets": {
"type": "array",
"description": "Repositories",
"items": {
"type": "string"
}
}
}
},
"ostree": {
"title": "OSTree specific options",
"type": "object",
"additionalProperties": False,
"properties": {
"parent": {
"type": "string"
},
"ref": {
"type": "string"
},
"url": {
"type": "string"
}
}
},
"options": {
"title": "Optional arguments",
"type": "object",
"additionalProperties": False,
"properties": {
"customizations": {
"type": "object",
"additionalProperties": True
},
"ostree": {
"type": "object",
"$ref": "#/definitions/ostree"
},
"repo": {
"type": "array",
"description": "Repositories",
"items": {
"oneOf": [
{"type": "string"},
{"$ref": "#/definitions/repo"}
]
}
},
"release": {
"type": "string",
"description": "Release override"
},
"skip_tag": {
"type": "boolean",
"description": "Omit tagging the result"
}
}
}
}
}
@koji.plugin.export
def osbuildImage(name, version, distro, image_type, target, arches, opts=None, priority=None):
"""Create an image via osbuild"""
context.session.assertPerm("image")
args = [name, version, distro, image_type, target, arches, opts]
task = {"channel": "image"}
try:
jsonschema.validate(args, OSBUILD_IMAGE_SCHEMA)
except jsonschema.exceptions.ValidationError as err:
raise koji.ParameterError(str(err)) from None
if priority and priority < 0 and not context.session.hasPerm('admin'):
raise koji.ActionNotAllowed('only admins may create high-priority tasks')
return kojihub.make_task('osbuildImage', args, **task)