Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pkg: add new manifestgen package #1153

Merged
merged 10 commits into from
Jan 24, 2025
62 changes: 4 additions & 58 deletions cmd/build/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,13 @@ import (
"github.com/osbuild/images/internal/cmdutil"
"github.com/osbuild/images/pkg/arch"
"github.com/osbuild/images/pkg/blueprint"
"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/manifest"
"github.com/osbuild/images/pkg/manifestgen"
"github.com/osbuild/images/pkg/osbuild"
"github.com/osbuild/images/pkg/ostree"
"github.com/osbuild/images/pkg/rhsm/facts"
"github.com/osbuild/images/pkg/rpmmd"
"github.com/osbuild/images/pkg/sbom"
)

func makeManifest(
Expand Down Expand Up @@ -59,7 +56,7 @@ func makeManifest(
fmt.Fprintf(os.Stderr, "[WARNING]\n%s", strings.Join(warnings, "\n"))
}

depsolvedSets, err := depsolve(cacheDir, manifest.GetPackageSetChains(), distribution, archName)
depsolvedSets, err := manifestgen.DefaultDepsolver(cacheDir, manifest.GetPackageSetChains(), distribution, archName)
if err != nil {
return nil, fmt.Errorf("[ERROR] depsolve failed: %w", err)
}
Expand All @@ -71,12 +68,12 @@ func makeManifest(
bp = blueprint.Blueprint(*config.Blueprint)
}

containerSpecs, err := resolvePipelineContainers(manifest.GetContainerSourceSpecs(), archName)
containerSpecs, err := manifestgen.DefaultContainerResolver(manifest.GetContainerSourceSpecs(), archName)
if err != nil {
return nil, fmt.Errorf("[ERROR] container resolution failed: %w", err)
}

commitSpecs, err := resolvePipelineCommits(manifest.GetOSTreeSourceSpecs())
commitSpecs, err := manifestgen.DefaultCommitResolver(manifest.GetOSTreeSourceSpecs())
if err != nil {
return nil, fmt.Errorf("[ERROR] ostree commit resolution failed: %w", err)
}
Expand All @@ -89,57 +86,6 @@ func makeManifest(
return mf, nil
}

func resolveContainers(containers []container.SourceSpec, archName string) ([]container.Spec, error) {
resolver := container.NewResolver(archName)

for _, c := range containers {
resolver.Add(c)
}

return resolver.Finish()
}

func resolvePipelineContainers(containerSources map[string][]container.SourceSpec, archName string) (map[string][]container.Spec, error) {
containerSpecs := make(map[string][]container.Spec, len(containerSources))
for plName, sourceSpecs := range containerSources {
specs, err := resolveContainers(sourceSpecs, archName)
if err != nil {
return nil, err
}
containerSpecs[plName] = specs
}
return containerSpecs, nil
}

func resolvePipelineCommits(commitSources map[string][]ostree.SourceSpec) (map[string][]ostree.CommitSpec, error) {
commits := make(map[string][]ostree.CommitSpec, len(commitSources))
for name, commitSources := range commitSources {
commitSpecs := make([]ostree.CommitSpec, len(commitSources))
for idx, commitSource := range commitSources {
var err error
commitSpecs[idx], err = ostree.Resolve(commitSource)
if err != nil {
return nil, err
}
}
commits[name] = commitSpecs
}
return commits, nil
}

func depsolve(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d distro.Distro, arch string) (map[string]dnfjson.DepsolveResult, error) {
solver := dnfjson.NewSolver(d.ModulePlatformID(), d.Releasever(), arch, d.Name(), cacheDir)
depsolvedSets := make(map[string]dnfjson.DepsolveResult)
for name, pkgSet := range packageSets {
res, err := solver.Depsolve(pkgSet, sbom.StandardTypeNone)
if err != nil {
return nil, err
}
depsolvedSets[name] = *res
}
return depsolvedSets, nil
}

func save(ms manifest.OSBuildManifest, fpath string) error {
b, err := json.MarshalIndent(ms, "", " ")
if err != nil {
Expand Down
59 changes: 4 additions & 55 deletions cmd/gen-manifests/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ import (
"github.com/osbuild/images/pkg/distrofactory"
"github.com/osbuild/images/pkg/dnfjson"
"github.com/osbuild/images/pkg/manifest"
"github.com/osbuild/images/pkg/manifestgen"
"github.com/osbuild/images/pkg/ostree"
"github.com/osbuild/images/pkg/rhsm/facts"
"github.com/osbuild/images/pkg/rpmmd"
"github.com/osbuild/images/pkg/sbom"
testrepos "github.com/osbuild/images/test/data/repositories"
)

Expand Down Expand Up @@ -216,7 +216,7 @@ func makeManifestJob(

var depsolvedSets map[string]dnfjson.DepsolveResult
if content["packages"] {
depsolvedSets, err = depsolve(cacheDir, manifest.GetPackageSetChains(), distribution, archName)
depsolvedSets, err = manifestgen.DefaultDepsolver(cacheDir, manifest.GetPackageSetChains(), distribution, archName)
mvo5 marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
err = fmt.Errorf("[%s] depsolve failed: %s", filename, err.Error())
return
Expand All @@ -233,7 +233,7 @@ func makeManifestJob(

var containerSpecs map[string][]container.Spec
if content["containers"] {
containerSpecs, err = resolvePipelineContainers(manifest.GetContainerSourceSpecs(), archName)
containerSpecs, err = manifestgen.DefaultContainerResolver(manifest.GetContainerSourceSpecs(), archName)
if err != nil {
return fmt.Errorf("[%s] container resolution failed: %s", filename, err.Error())
}
Expand All @@ -243,7 +243,7 @@ func makeManifestJob(

var commitSpecs map[string][]ostree.CommitSpec
if content["commits"] {
commitSpecs, err = resolvePipelineCommits(manifest.GetOSTreeSourceSpecs())
commitSpecs, err = manifestgen.DefaultCommitResolver(manifest.GetOSTreeSourceSpecs())
if err != nil {
return fmt.Errorf("[%s] ostree commit resolution failed: %s", filename, err.Error())
}
Expand All @@ -269,28 +269,6 @@ func makeManifestJob(
return job
}

func resolveContainers(containers []container.SourceSpec, archName string) ([]container.Spec, error) {
resolver := container.NewResolver(archName)

for _, c := range containers {
resolver.Add(c)
}

return resolver.Finish()
}

func resolvePipelineContainers(containerSources map[string][]container.SourceSpec, archName string) (map[string][]container.Spec, error) {
containerSpecs := make(map[string][]container.Spec, len(containerSources))
for plName, sourceSpecs := range containerSources {
specs, err := resolveContainers(sourceSpecs, archName)
if err != nil {
return nil, err
}
containerSpecs[plName] = specs
}
return containerSpecs, nil
}

func mockResolveContainers(containerSources map[string][]container.SourceSpec) map[string][]container.Spec {
containerSpecs := make(map[string][]container.Spec, len(containerSources))
for plName, sourceSpecs := range containerSources {
Expand Down Expand Up @@ -318,22 +296,6 @@ func mockResolveContainers(containerSources map[string][]container.SourceSpec) m
return containerSpecs
}

func resolvePipelineCommits(commitSources map[string][]ostree.SourceSpec) (map[string][]ostree.CommitSpec, error) {
commits := make(map[string][]ostree.CommitSpec, len(commitSources))
for name, commitSources := range commitSources {
commitSpecs := make([]ostree.CommitSpec, len(commitSources))
for idx, commitSource := range commitSources {
var err error
commitSpecs[idx], err = ostree.Resolve(commitSource)
if err != nil {
return nil, err
}
}
commits[name] = commitSpecs
}
return commits, nil
}

func mockResolveCommits(commitSources map[string][]ostree.SourceSpec) map[string][]ostree.CommitSpec {
commits := make(map[string][]ostree.CommitSpec, len(commitSources))
for name, commitSources := range commitSources {
Expand All @@ -346,19 +308,6 @@ func mockResolveCommits(commitSources map[string][]ostree.SourceSpec) map[string
return commits
}

func depsolve(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d distro.Distro, arch string) (map[string]dnfjson.DepsolveResult, error) {
solver := dnfjson.NewSolver(d.ModulePlatformID(), d.Releasever(), arch, d.Name(), cacheDir)
depsolvedSets := make(map[string]dnfjson.DepsolveResult)
for name, pkgSet := range packageSets {
res, err := solver.Depsolve(pkgSet, sbom.StandardTypeNone)
if err != nil {
return nil, err
}
depsolvedSets[name] = *res
}
return depsolvedSets, nil
}

func mockDepsolve(packageSets map[string][]rpmmd.PackageSet, repos []rpmmd.RepoConfig, archName string) map[string]dnfjson.DepsolveResult {
depsolvedSets := make(map[string]dnfjson.DepsolveResult)

Expand Down
Loading
Loading