manifestgen: make depsolve return the full dnfjson.DepsolveResult
This commit changes the signature of depsolve in `manifestgen` to return the full `dnfjson.DepsolveResult`. This gives us access to the sbom and also is a preparation for images PR#1142 where we will need this anyway.
This commit is contained in:
parent
44f27108b9
commit
d75bb4fa0a
2 changed files with 24 additions and 25 deletions
|
|
@ -10,6 +10,7 @@ import (
|
|||
"github.com/osbuild/images/pkg/container"
|
||||
"github.com/osbuild/images/pkg/distro"
|
||||
"github.com/osbuild/images/pkg/dnfjson"
|
||||
"github.com/osbuild/images/pkg/manifest"
|
||||
"github.com/osbuild/images/pkg/osbuild"
|
||||
"github.com/osbuild/images/pkg/ostree"
|
||||
"github.com/osbuild/images/pkg/reporegistry"
|
||||
|
|
@ -21,30 +22,26 @@ import (
|
|||
// cmd/build/main.go:depsolve (and probably more places) should go
|
||||
// into a common helper in "images" or images should do this on its
|
||||
// own
|
||||
func defaultDepsolver(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d distro.Distro, arch string) (map[string][]rpmmd.PackageSpec, map[string][]rpmmd.RepoConfig, error) {
|
||||
func defaultDepsolver(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d distro.Distro, arch string) (map[string]dnfjson.DepsolveResult, error) {
|
||||
if cacheDir == "" {
|
||||
var err error
|
||||
cacheDir, err = os.MkdirTemp("", "manifestgen")
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("cannot create temporary directory: %w", err)
|
||||
return nil, fmt.Errorf("cannot create temporary directory: %w", err)
|
||||
}
|
||||
defer os.RemoveAll(cacheDir)
|
||||
}
|
||||
|
||||
solver := dnfjson.NewSolver(d.ModulePlatformID(), d.Releasever(), arch, d.Name(), cacheDir)
|
||||
depsolvedSets := make(map[string][]rpmmd.PackageSpec)
|
||||
repoSets := make(map[string][]rpmmd.RepoConfig)
|
||||
depsolvedSets := make(map[string]dnfjson.DepsolveResult)
|
||||
for name, pkgSet := range packageSets {
|
||||
res, err := solver.Depsolve(pkgSet, sbom.StandardTypeNone)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error depsolving: %w", err)
|
||||
return nil, fmt.Errorf("error depsolving: %w", err)
|
||||
}
|
||||
depsolvedSets[name] = res.Packages
|
||||
repoSets[name] = res.Repos
|
||||
// the depsolve result also contains SBOM information,
|
||||
// it is currently not used here though
|
||||
depsolvedSets[name] = *res
|
||||
}
|
||||
return depsolvedSets, repoSets, nil
|
||||
return depsolvedSets, nil
|
||||
}
|
||||
|
||||
func resolveContainers(containers []container.SourceSpec, archName string) ([]container.Spec, error) {
|
||||
|
|
@ -86,7 +83,7 @@ func defaultCommitResolver(commitSources map[string][]ostree.SourceSpec) (map[st
|
|||
}
|
||||
|
||||
type (
|
||||
DepsolveFunc func(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d distro.Distro, arch string) (map[string][]rpmmd.PackageSpec, map[string][]rpmmd.RepoConfig, error)
|
||||
DepsolveFunc func(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d distro.Distro, arch string) (map[string]dnfjson.DepsolveResult, error)
|
||||
|
||||
ContainerResolverFunc func(containerSources map[string][]container.SourceSpec, archName string) (map[string][]container.Spec, error)
|
||||
|
||||
|
|
@ -171,7 +168,7 @@ func (mg *Generator) Generate(bp *blueprint.Blueprint, dist distro.Distro, imgTy
|
|||
// what are these warnings?
|
||||
return fmt.Errorf("warnings during manifest creation: %v", strings.Join(warnings, "\n"))
|
||||
}
|
||||
packageSpecs, repoConfig, err := mg.depsolver(mg.cacheDir, preManifest.GetPackageSetChains(), dist, a.Name())
|
||||
depsolved, err := mg.depsolver(mg.cacheDir, preManifest.GetPackageSetChains(), dist, a.Name())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -183,7 +180,11 @@ func (mg *Generator) Generate(bp *blueprint.Blueprint, dist distro.Distro, imgTy
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
mf, err := preManifest.Serialize(packageSpecs, containerSpecs, commitSpecs, repoConfig, mg.rpmDownloader)
|
||||
|
||||
opts := &manifest.SerializeOptions{
|
||||
RpmDownloader: mg.rpmDownloader,
|
||||
}
|
||||
mf, err := preManifest.Serialize(depsolved, containerSpecs, commitSpecs, opts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import (
|
|||
"github.com/osbuild/images/pkg/container"
|
||||
"github.com/osbuild/images/pkg/distro"
|
||||
"github.com/osbuild/images/pkg/distrofactory"
|
||||
"github.com/osbuild/images/pkg/dnfjson"
|
||||
"github.com/osbuild/images/pkg/imagefilter"
|
||||
"github.com/osbuild/images/pkg/osbuild"
|
||||
"github.com/osbuild/images/pkg/ostree"
|
||||
|
|
@ -133,31 +134,28 @@ func TestManifestGeneratorWithOstreeCommit(t *testing.T) {
|
|||
assert.Contains(t, osbuildManifest.String(), expectedSha256)
|
||||
}
|
||||
|
||||
func fakeDepsolve(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d distro.Distro, arch string) (map[string][]rpmmd.PackageSpec, map[string][]rpmmd.RepoConfig, error) {
|
||||
depsolvedSets := make(map[string][]rpmmd.PackageSpec)
|
||||
repoSets := make(map[string][]rpmmd.RepoConfig)
|
||||
func fakeDepsolve(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d distro.Distro, arch string) (map[string]dnfjson.DepsolveResult, error) {
|
||||
depsolvedSets := make(map[string]dnfjson.DepsolveResult)
|
||||
for name, pkgSets := range packageSets {
|
||||
repoId := fmt.Sprintf("repo_id_%s", name)
|
||||
var resolvedSet []rpmmd.PackageSpec
|
||||
var resolvedSet dnfjson.DepsolveResult
|
||||
for _, pkgSet := range pkgSets {
|
||||
for _, pkgName := range pkgSet.Include {
|
||||
resolvedSet = append(resolvedSet, rpmmd.PackageSpec{
|
||||
resolvedSet.Packages = append(resolvedSet.Packages, rpmmd.PackageSpec{
|
||||
Name: pkgName,
|
||||
Checksum: sha256For(pkgName),
|
||||
Path: fmt.Sprintf("path/%s.rpm", pkgName),
|
||||
RepoID: repoId,
|
||||
})
|
||||
resolvedSet.Repos = append(resolvedSet.Repos, rpmmd.RepoConfig{
|
||||
Id: repoId,
|
||||
Metalink: "https://example.com/metalink",
|
||||
})
|
||||
}
|
||||
}
|
||||
depsolvedSets[name] = resolvedSet
|
||||
repoSets[name] = []rpmmd.RepoConfig{
|
||||
{
|
||||
Id: repoId,
|
||||
Metalink: "http://example.com/metalink",
|
||||
},
|
||||
}
|
||||
}
|
||||
return depsolvedSets, repoSets, nil
|
||||
return depsolvedSets, nil
|
||||
}
|
||||
|
||||
func fakeCommitResolver(commitSources map[string][]ostree.SourceSpec) (map[string][]ostree.CommitSpec, error) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue