Koji: expose image output metadata in build extra metadata

Expose the extra metadata information for each image output stored in
`ImageExtraInfo` also in the build extra metadata. The extra metadata
for each image is nested under key corresponding to the image filename.

Extend the Koji test case to check information in the buildinfo output
and specifically check for all expected metadata in the build Extra
metadata field.

Signed-off-by: Tomáš Hozza <thozza@redhat.com>
This commit is contained in:
Tomáš Hozza 2023-08-04 17:12:18 +02:00 committed by Ondřej Budai
parent 350762497f
commit af1c373407
3 changed files with 92 additions and 15 deletions

View file

@ -115,17 +115,10 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
return err
}
build := koji.Build{
TaskID: args.TaskID,
Name: args.Name,
Version: args.Version,
Release: args.Release,
StartTime: int64(args.StartTime),
EndTime: time.Now().Unix(),
}
var buildRoots []koji.BuildRoot
var outputs []koji.BuildOutput
// Extra info for each image output is stored using the image filename as the key
imgOutputsExtraInfo := map[string]koji.ImageExtraInfo{}
var osbuildResults []worker.OSBuildJobResult
initArgs, osbuildResults, err = extractDynamicArgs(job)
@ -133,7 +126,6 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
kojiFinalizeJobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorParsingDynamicArgs, "Error parsing dynamic args", err.Error())
return err
}
build.BuildID = initArgs.BuildID
// Check the dependencies early.
if hasFailedDependency(*initArgs, osbuildResults) {
@ -191,6 +183,11 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
// deduplicate
imageRPMs = rpmmd.DeduplicateRPMs(imageRPMs)
imgOutputExtraInfo := koji.ImageExtraInfo{
Arch: buildArgs.Arch,
}
imgOutputsExtraInfo[args.KojiFilenames[i]] = imgOutputExtraInfo
outputs = append(outputs, koji.BuildOutput{
BuildRootID: uint64(i),
Filename: args.KojiFilenames[i],
@ -201,13 +198,26 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
Type: koji.BuildOutputTypeImage,
RPMs: imageRPMs,
Extra: koji.BuildOutputExtra{
Image: koji.ImageExtraInfo{
Arch: buildArgs.Arch,
},
Image: imgOutputExtraInfo,
},
})
}
build := koji.Build{
BuildID: initArgs.BuildID,
TaskID: args.TaskID,
Name: args.Name,
Version: args.Version,
Release: args.Release,
StartTime: int64(args.StartTime),
EndTime: time.Now().Unix(),
Extra: koji.BuildExtra{
TypeInfo: koji.TypeInfo{
Image: imgOutputsExtraInfo,
},
},
}
err = impl.kojiImport(args.Server, build, buildRoots, outputs, args.KojiDirectory, initArgs.Token)
if err != nil {
kojiFinalizeJobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorKojiFinalize, err.Error(), nil)