diff --git a/cmd/osbuild-worker/jobimpl-depsolve.go b/cmd/osbuild-worker/jobimpl-depsolve.go index b4c7be8e1..e81c00116 100644 --- a/cmd/osbuild-worker/jobimpl-depsolve.go +++ b/cmd/osbuild-worker/jobimpl-depsolve.go @@ -14,16 +14,16 @@ type DepsolveJobImpl struct { // depsolve each package set in the pacakgeSets map. The repositories defined // in repos are used for all package sets, whereas the repositories in -// packageSetsRepositories are only used for the package set with the same name +// packageSetsRepos are only used for the package set with the same name // (matching map keys). -func (impl *DepsolveJobImpl) depsolve(packageSets map[string]rpmmd.PackageSet, repos []rpmmd.RepoConfig, packageSetsRepositories map[string][]rpmmd.RepoConfig, modulePlatformID, arch, releasever string) (map[string][]rpmmd.PackageSpec, error) { +func (impl *DepsolveJobImpl) depsolve(packageSets map[string]rpmmd.PackageSet, repos []rpmmd.RepoConfig, packageSetsRepos map[string][]rpmmd.RepoConfig, modulePlatformID, arch, releasever string) (map[string][]rpmmd.PackageSpec, error) { rpmMD := rpmmd.NewRPMMD(impl.RPMMDCache) packageSpecs := make(map[string][]rpmmd.PackageSpec) for name, packageSet := range packageSets { repositories := make([]rpmmd.RepoConfig, len(repos)) copy(repositories, repos) - if packageSetRepositories, ok := packageSetsRepositories[name]; ok { + if packageSetRepositories, ok := packageSetsRepos[name]; ok { repositories = append(repositories, packageSetRepositories...) } packageSpec, _, err := rpmMD.Depsolve(packageSet, repositories, modulePlatformID, arch, releasever) @@ -43,7 +43,7 @@ func (impl *DepsolveJobImpl) Run(job worker.Job) error { } var result worker.DepsolveJobResult - result.PackageSpecs, err = impl.depsolve(args.PackageSets, args.Repos, args.PackageSetsRepositories, args.ModulePlatformID, args.Arch, args.Releasever) + result.PackageSpecs, err = impl.depsolve(args.PackageSets, args.Repos, args.PackageSetsRepos, args.ModulePlatformID, args.Arch, args.Releasever) if err != nil { switch e := err.(type) { case *rpmmd.DNFError: diff --git a/internal/cloudapi/v2/v2.go b/internal/cloudapi/v2/v2.go index daba9f9f6..e2deeea71 100644 --- a/internal/cloudapi/v2/v2.go +++ b/internal/cloudapi/v2/v2.go @@ -498,12 +498,12 @@ func enqueueCompose(workers *worker.Server, distribution distro.Distro, bp bluep ir := irs[0] depsolveJobID, err := workers.EnqueueDepsolve(&worker.DepsolveJob{ - PackageSets: ir.imageType.PackageSets(bp), - Repos: ir.repositories, - ModulePlatformID: distribution.ModulePlatformID(), - Arch: ir.arch.Name(), - Releasever: distribution.Releasever(), - PackageSetsRepositories: ir.packageSetsRepositories, + PackageSets: ir.imageType.PackageSets(bp), + Repos: ir.repositories, + ModulePlatformID: distribution.ModulePlatformID(), + Arch: ir.arch.Name(), + Releasever: distribution.Releasever(), + PackageSetsRepos: ir.packageSetsRepositories, }) if err != nil { return id, HTTPErrorWithInternal(ErrorEnqueueingJob, err) @@ -550,12 +550,12 @@ func enqueueKojiCompose(workers *worker.Server, taskID uint64, server, name, ver var buildIDs []uuid.UUID for _, ir := range irs { depsolveJobID, err := workers.EnqueueDepsolve(&worker.DepsolveJob{ - PackageSets: ir.imageType.PackageSets(bp), - Repos: ir.repositories, - ModulePlatformID: distribution.ModulePlatformID(), - Arch: ir.arch.Name(), - Releasever: distribution.Releasever(), - PackageSetsRepositories: ir.packageSetsRepositories, + PackageSets: ir.imageType.PackageSets(bp), + Repos: ir.repositories, + ModulePlatformID: distribution.ModulePlatformID(), + Arch: ir.arch.Name(), + Releasever: distribution.Releasever(), + PackageSetsRepos: ir.packageSetsRepositories, }) if err != nil { return id, HTTPErrorWithInternal(ErrorEnqueueingJob, err) diff --git a/internal/worker/json.go b/internal/worker/json.go index cdeb34d50..f8eb55674 100644 --- a/internal/worker/json.go +++ b/internal/worker/json.go @@ -102,13 +102,18 @@ func (pn *PipelineNames) All() []string { return append(pn.Build, pn.Payload...) } +// DepsolveJob defines the parameters of one or more depsolve jobs. Each +// package set is meant to be depsolved separately. The repositories defined +// in Repos are used for all package sets, whereas the repositories defined in +// PackageSetsRepos are only used by the package sets that share the same name +// (map key). type DepsolveJob struct { - PackageSets map[string]rpmmd.PackageSet `json:"package_sets"` - Repos []rpmmd.RepoConfig `json:"repos"` - ModulePlatformID string `json:"module_platform_id"` - Arch string `json:"arch"` - Releasever string `json:"releasever"` - PackageSetsRepositories map[string][]rpmmd.RepoConfig `json:"package_sets_repositories,omitempty"` + PackageSets map[string]rpmmd.PackageSet `json:"package_sets"` + Repos []rpmmd.RepoConfig `json:"repos"` + ModulePlatformID string `json:"module_platform_id"` + Arch string `json:"arch"` + Releasever string `json:"releasever"` + PackageSetsRepos map[string][]rpmmd.RepoConfig `json:"package_sets_repositories,omitempty"` } type ErrorType string