weldr: update depsolve calls in weldr API

Update the weldr API to work with the new depsolve API.
Update tests to match (adding repo_id).

Co-authored-by: Achilleas Koutsou <achilleas@koutsou.net>
This commit is contained in:
Michael Vogt 2025-01-20 13:34:56 +01:00 committed by Tomáš Hozza
parent dab836de19
commit e8a0e8ff49
4 changed files with 189 additions and 85 deletions

View file

@ -2284,30 +2284,27 @@ func (api *API) blueprintsTagHandler(writer http.ResponseWriter, request *http.R
// repositories for the depsolving. The actual distro object name may not correspond to the alias.
// Since the solver uses the distro name to namespace cache, it is important to use the same distro
// name as the one used to get the repositories.
func (api *API) depsolve(packageSets map[string][]rpmmd.PackageSet, distroName string, arch distro.Arch) (map[string][]rpmmd.PackageSpec, map[string][]rpmmd.RepoConfig, error) {
func (api *API) depsolve(packageSets map[string][]rpmmd.PackageSet, distroName string, arch distro.Arch) (map[string]dnfjson.DepsolveResult, error) {
distro := arch.Distro()
platformID := distro.ModulePlatformID()
releasever := distro.Releasever()
solver := api.solver.NewWithConfig(platformID, releasever, arch.Name(), distroName)
depsolvedSets := make(map[string][]rpmmd.PackageSpec, len(packageSets))
repoConfigs := make(map[string][]rpmmd.RepoConfig)
depsolvedSets := make(map[string]dnfjson.DepsolveResult, len(packageSets))
for name, pkgSet := range packageSets {
// TODO: SBOM support could be added here
res, err := solver.Depsolve(pkgSet, sbom.StandardTypeNone)
if err != nil {
return nil, nil, err
return nil, err
}
depsolvedSets[name] = res.Packages
repoConfigs[name] = res.Repos
depsolvedSets[name] = *res
}
if err := solver.CleanCache(); err != nil {
// log and ignore
log.Printf("Error during rpm repo cache cleanup: %s", err.Error())
}
return depsolvedSets, repoConfigs, nil
return depsolvedSets, nil
}
func (api *API) resolveContainers(sourceSpecs map[string][]container.SourceSpec, archName string) (map[string][]container.Spec, error) {
@ -2577,7 +2574,7 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request
return
}
packageSets, repoConfigs, err := api.depsolve(manifest.GetPackageSetChains(), distroName, imageType.Arch())
depsolved, err := api.depsolve(manifest.GetPackageSetChains(), distroName, imageType.Arch())
if err != nil {
errors := responseError{
ID: "DepsolveError",
@ -2609,7 +2606,7 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request
return
}
mf, err := manifest.Serialize(packageSets, containerSpecs, ostreeCommitSpecs, repoConfigs)
mf, err := manifest.Serialize(depsolved, containerSpecs, ostreeCommitSpecs, nil)
if err != nil {
errors := responseError{
ID: "ManifestCreationFailed",
@ -2622,9 +2619,9 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request
var packages []rpmmd.PackageSpec
// TODO: introduce a way to query these from the manifest / image type
// BUG: installer/container image types will have empty package sets
if packages = packageSets["packages"]; len(packages) == 0 {
if packages = packageSets["os"]; len(packages) == 0 {
packages = packageSets["ostree-tree"]
if packages = depsolved["packages"].Packages; len(packages) == 0 {
if packages = depsolved["os"].Packages; len(packages) == 0 {
packages = depsolved["ostree-tree"].Packages
}
}