diff --git a/cmd/osbuild-worker/jobimpl-depsolve.go b/cmd/osbuild-worker/jobimpl-depsolve.go index 04056ed88..abe97010f 100644 --- a/cmd/osbuild-worker/jobimpl-depsolve.go +++ b/cmd/osbuild-worker/jobimpl-depsolve.go @@ -18,23 +18,22 @@ type DepsolveJobImpl struct { // in repos are used for all package sets, whereas the repositories in // 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, packageSetsRepos map[string][]rpmmd.RepoConfig, modulePlatformID, arch, releasever string) (map[string][]rpmmd.PackageSpec, error) { +func (impl *DepsolveJobImpl) depsolve(packageSetsChains map[string][]string, + 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 := packageSetsRepos[name]; ok { - repositories = append(repositories, packageSetRepositories...) - } - packageSpec, _, err := rpmMD.Depsolve(packageSet, repositories, modulePlatformID, arch, releasever) - if err != nil { - return nil, err - } - packageSpecs[name] = packageSpec - } - return packageSpecs, nil + return rpmMD.DepsolvePackageSets( + packageSetsChains, + packageSets, + repos, + packageSetsRepos, + modulePlatformID, + arch, + releasever, + ) } func (impl *DepsolveJobImpl) Run(job worker.Job) error { @@ -46,7 +45,7 @@ func (impl *DepsolveJobImpl) Run(job worker.Job) error { } var result worker.DepsolveJobResult - result.PackageSpecs, err = impl.depsolve(args.PackageSets, args.Repos, args.PackageSetsRepos, args.ModulePlatformID, args.Arch, args.Releasever) + result.PackageSpecs, err = impl.depsolve(args.PackageSetsChains, 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/server.go b/internal/cloudapi/v2/server.go index c6064943d..d14cd0445 100644 --- a/internal/cloudapi/v2/server.go +++ b/internal/cloudapi/v2/server.go @@ -84,12 +84,13 @@ func (s *Server) enqueueCompose(distribution distro.Distro, bp blueprint.Bluepri ir := irs[0] depsolveJobID, err := s.workers.EnqueueDepsolve(&worker.DepsolveJob{ - PackageSets: ir.imageType.PackageSets(bp), - Repos: ir.repositories, - ModulePlatformID: distribution.ModulePlatformID(), - Arch: ir.arch.Name(), - Releasever: distribution.Releasever(), - PackageSetsRepos: ir.packageSetsRepositories, + PackageSetsChains: ir.imageType.PackageSetsChains(), + PackageSets: ir.imageType.PackageSets(bp), + Repos: ir.repositories, + ModulePlatformID: distribution.ModulePlatformID(), + Arch: ir.arch.Name(), + Releasever: distribution.Releasever(), + PackageSetsRepos: ir.packageSetsRepositories, }, channel) if err != nil { return id, HTTPErrorWithInternal(ErrorEnqueueingJob, err) diff --git a/internal/worker/json.go b/internal/worker/json.go index f8eb55674..0adb29bd8 100644 --- a/internal/worker/json.go +++ b/internal/worker/json.go @@ -108,12 +108,13 @@ func (pn *PipelineNames) All() []string { // 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"` - PackageSetsRepos map[string][]rpmmd.RepoConfig `json:"package_sets_repositories,omitempty"` + PackageSetsChains map[string][]string `json:"package_sets_chains"` + 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