From 3f442309fc134320d3770af7b90f892336865249 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 14 Nov 2025 15:22:40 +0100 Subject: [PATCH] main: embed manifestgen.options into manifestOptions When we generate the osbuild manifest we need to take a bunch of commandline options into account. These are collected and passed via `manifestOptions` in the CLI. There is a (small) overlap with options that are then "converted" to options that need to be passed to `manifestgen` via `manifestgen.Options`. Previously there was manual code for this but its slightly nicer to just embedd the `manifestgen.Options` into the more general `manifestOptions` of the CLI. This avoid some boilerplate code and might serve as a useful pattern in other places. So this commit does that now (even though the wins are not that big). --- cmd/image-builder/main.go | 20 ++++++++++++++------ cmd/image-builder/manifest.go | 21 +++++---------------- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/cmd/image-builder/main.go b/cmd/image-builder/main.go index 166e67d8..628ba36b 100644 --- a/cmd/image-builder/main.go +++ b/cmd/image-builder/main.go @@ -21,6 +21,7 @@ import ( "github.com/osbuild/images/pkg/customizations/subscription" "github.com/osbuild/images/pkg/distro/bootc" "github.com/osbuild/images/pkg/imagefilter" + "github.com/osbuild/images/pkg/manifestgen" "github.com/osbuild/images/pkg/osbuild" "github.com/osbuild/images/pkg/ostree" @@ -138,6 +139,9 @@ type cmdManifestWrapperOptions struct { useBootstrapIfNeeded bool } +// used in tests +var manifestgenDepsolver manifestgen.DepsolveFunc + func cmdManifestWrapper(pbar progress.ProgressBar, cmd *cobra.Command, args []string, w io.Writer, wd io.Writer, wrapperOpts *cmdManifestWrapperOptions) (*imagefilter.Result, error) { if wrapperOpts == nil { wrapperOpts = &cmdManifestWrapperOptions{} @@ -304,27 +308,31 @@ func cmdManifestWrapper(pbar progress.ProgressBar, cmd *cobra.Command, args []st } opts := &manifestOptions{ + ManifestgenOptions: manifestgen.Options{ + Cachedir: rpmmdCacheDir, + CustomSeed: customSeed, + RpmDownloader: rpmDownloader, + DepsolveWarningsOutput: wd, + Depsolve: manifestgenDepsolver, + }, OutputDir: outputDir, OutputFilename: outputFilename, BlueprintPath: blueprintPath, Ostree: ostreeImgOpts, BootcRef: bootcRef, BootcInstallerPayloadRef: bootcInstallerPayloadRef, - RpmDownloader: rpmDownloader, WithSBOM: withSBOM, IgnoreWarnings: ignoreWarnings, - CustomSeed: customSeed, Subscription: subscription, - RpmmdCacheDir: rpmmdCacheDir, ForceRepos: forceRepos, } - opts.UseBootstrapContainer = wrapperOpts.useBootstrapIfNeeded && (img.ImgType.Arch().Name() != arch.Current().String()) - if opts.UseBootstrapContainer { + opts.ManifestgenOptions.UseBootstrapContainer = wrapperOpts.useBootstrapIfNeeded && (img.ImgType.Arch().Name() != arch.Current().String()) + if opts.ManifestgenOptions.UseBootstrapContainer { fmt.Fprintf(os.Stderr, "WARNING: using experimental cross-architecture building to build %q\n", img.ImgType.Arch().Name()) } - err = generateManifest(dataDir, extraRepos, img, w, wd, opts) + err = generateManifest(dataDir, extraRepos, img, w, opts) return img, err } diff --git a/cmd/image-builder/manifest.go b/cmd/image-builder/manifest.go index 249ae620..229b44d4 100644 --- a/cmd/image-builder/manifest.go +++ b/cmd/image-builder/manifest.go @@ -20,6 +20,8 @@ import ( ) type manifestOptions struct { + ManifestgenOptions manifestgen.Options + OutputDir string OutputFilename string BlueprintPath string @@ -30,11 +32,8 @@ type manifestOptions struct { RpmDownloader osbuild.RpmDownloader WithSBOM bool IgnoreWarnings bool - CustomSeed *int64 - RpmmdCacheDir string - ForceRepos []string - UseBootstrapContainer bool + ForceRepos []string } func sbomWriter(outputDir, filename string, content io.Reader) error { @@ -55,23 +54,13 @@ func sbomWriter(outputDir, filename string, content io.Reader) error { return f.Sync() } -// used in tests -var manifestgenDepsolver manifestgen.DepsolveFunc - // XXX: just return []byte instead of using output writer -func generateManifest(dataDir string, extraRepos []string, img *imagefilter.Result, output io.Writer, depsolveWarningsOutput io.Writer, opts *manifestOptions) error { +func generateManifest(dataDir string, extraRepos []string, img *imagefilter.Result, output io.Writer, opts *manifestOptions) error { repos, err := newRepoRegistry(dataDir, extraRepos) if err != nil { return err } - manifestGenOpts := &manifestgen.Options{ - DepsolveWarningsOutput: depsolveWarningsOutput, - RpmDownloader: opts.RpmDownloader, - UseBootstrapContainer: opts.UseBootstrapContainer, - CustomSeed: opts.CustomSeed, - Depsolve: manifestgenDepsolver, - Cachedir: opts.RpmmdCacheDir, - } + manifestGenOpts := &opts.ManifestgenOptions if opts.WithSBOM { outputDir := basenameFor(img, opts.OutputDir) manifestGenOpts.SBOMWriter = func(filename string, content io.Reader, docType sbom.StandardType) error {