diff --git a/cmd/osbuild-worker/jobimpl-osbuild.go b/cmd/osbuild-worker/jobimpl-osbuild.go index b24db25d3..b48020fbc 100644 --- a/cmd/osbuild-worker/jobimpl-osbuild.go +++ b/cmd/osbuild-worker/jobimpl-osbuild.go @@ -748,7 +748,8 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { logWithId.Warnf("[Koji] logout failed: %v", err) } }() - file, err := os.Open(path.Join(outputDirectory, exportPath, args.ImageName)) + + file, err := os.Open(path.Join(outputDirectory, exportPath, options.Filename)) if err != nil { osbuildJobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorKojiBuild, fmt.Sprintf("failed to open the image for reading: %v", err)) return nil @@ -756,7 +757,7 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { defer file.Close() logWithId.Info("[Koji] ⬆ Uploading the image") - imageHash, imageSize, err := kojiAPI.Upload(file, options.UploadDirectory, options.Filename) + imageHash, imageSize, err := kojiAPI.Upload(file, options.UploadDirectory, args.Targets[0].ImageName) if err != nil { osbuildJobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorUploadingImage, err.Error()) return nil diff --git a/internal/cloudapi/v2/server.go b/internal/cloudapi/v2/server.go index 672a5b876..40ca19ed6 100644 --- a/internal/cloudapi/v2/server.go +++ b/internal/cloudapi/v2/server.go @@ -177,18 +177,21 @@ func (s *Server) enqueueKojiCompose(taskID uint64, server, name, version, releas ir.arch.Name(), splitExtension(ir.imageType.Filename()), ) + + kojiTarget := target.NewKojiTarget(&target.KojiTargetOptions{ + Server: server, + UploadDirectory: kojiDirectory, + Filename: ir.imageType.Filename(), + }) + kojiTarget.ImageName = kojiFilename + buildID, err := s.workers.EnqueueOSBuildAsDependency(ir.arch.Name(), &worker.OSBuildJob{ - ImageName: ir.imageType.Filename(), - Exports: ir.imageType.Exports(), + Exports: ir.imageType.Exports(), PipelineNames: &worker.PipelineNames{ Build: ir.imageType.BuildPipelines(), Payload: ir.imageType.PayloadPipelines(), }, - Targets: []*target.Target{target.NewKojiTarget(&target.KojiTargetOptions{ - Server: server, - UploadDirectory: kojiDirectory, - Filename: kojiFilename, - })}, + Targets: []*target.Target{kojiTarget}, ManifestDynArgsIdx: common.IntToPtr(1), }, []uuid.UUID{initID, manifestJobID}, channel) if err != nil { diff --git a/internal/cloudapi/v2/v2_koji_test.go b/internal/cloudapi/v2/v2_koji_test.go index 4d4e1df18..ad5361116 100644 --- a/internal/cloudapi/v2/v2_koji_test.go +++ b/internal/cloudapi/v2/v2_koji_test.go @@ -398,6 +398,7 @@ func TestKojiCompose(t *testing.T) { }, } for idx, c := range cases { + name, version, release := "foo", "1", "2" t.Run(fmt.Sprintf("Test case #%d", idx), func(t *testing.T) { composeRawReply := test.TestRouteWithReply(t, handler, false, "POST", "/api/image-builder-composer/v2/compose", fmt.Sprintf(` { @@ -424,12 +425,12 @@ func TestKojiCompose(t *testing.T) { ], "koji": { "server": "koji.example.com", - "name":"foo", - "version":"1", - "release":"2", + "name":"%[4]s", + "version":"%[5]s", + "release":"%[6]s", "task_id": 42 } - }`, test_distro.TestDistroName, test_distro.TestArch3Name, string(v2.ImageTypesGuestImage)), + }`, test_distro.TestDistroName, test_distro.TestArch3Name, string(v2.ImageTypesGuestImage), name, version, release), c.composeReplyCode, c.composeReply, "id", "operation_id") // determine the compose ID from the reply @@ -476,7 +477,9 @@ func TestKojiCompose(t *testing.T) { require.NoError(t, err) jobTarget := osbuildJob.Targets[0].Options.(*target.KojiTargetOptions) require.Equal(t, "koji.example.com", jobTarget.Server) - require.Equal(t, "test.img", osbuildJob.ImageName) + require.Equal(t, "test.img", jobTarget.Filename) + require.Equal(t, fmt.Sprintf("%s-%s-%s.%s.img", name, version, release, test_distro.TestArch3Name), + osbuildJob.Targets[0].ImageName) require.NotEmpty(t, jobTarget.UploadDirectory) var buildJobResult string diff --git a/internal/target/koji_target.go b/internal/target/koji_target.go index a46c744e2..f4e0586b1 100644 --- a/internal/target/koji_target.go +++ b/internal/target/koji_target.go @@ -1,6 +1,7 @@ package target type KojiTargetOptions struct { + // Filename of the image as produced by osbuild for a given export Filename string `json:"filename"` UploadDirectory string `json:"upload_directory"` Server string `json:"server"`