Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cmd/image-builder/bib_cloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ func bibUpload(uploader cloud.Uploader, path string, flags *pflag.FlagSet) error
size = st.Size()
pbar.SetTotal(size)
pbar.Set(pb.Bytes, true)
pbar.SetWriter(osStdout)
pbar.SetWriter(os.Stdout)
r = pbar.NewProxyReader(file)
pbar.Start()
defer pbar.Finish()
}

return uploader.UploadAndRegister(r, uint64(size), osStderr)
return uploader.UploadAndRegister(r, uint64(size), os.Stderr)
}
3 changes: 2 additions & 1 deletion cmd/image-builder/distro.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"fmt"
"os"

"github.com/osbuild/images/pkg/distro"
)
Expand All @@ -25,6 +26,6 @@ func findDistro(argDistroName, bpDistroName string) (string, error) {
if err != nil {
return "", fmt.Errorf("error deriving host distro %w", err)
}
fmt.Fprintf(osStderr, "No distro name specified, selecting %q based on host, use --distro to override\n", distroStr)
fmt.Fprintf(os.Stderr, "No distro name specified, selecting %q based on host, use --distro to override\n", distroStr)
return distroStr, nil
}
16 changes: 8 additions & 8 deletions cmd/image-builder/distro_test.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package main_test

import (
"bytes"
"testing"

"github.com/stretchr/testify/assert"

main "github.com/osbuild/image-builder-cli/cmd/image-builder"
"github.com/osbuild/image-builder-cli/internal/testutil"
)

func TestFindDistro(t *testing.T) {
Expand All @@ -32,17 +32,17 @@ func TestFindDistro(t *testing.T) {
}

func TestFindDistroAutoDetect(t *testing.T) {
var buf bytes.Buffer
restore := main.MockOsStderr(&buf)
defer restore()

restore = main.MockDistroGetHostDistroName(func() (string, error) {
restore := main.MockDistroGetHostDistroName(func() (string, error) {
return "mocked-host-distro", nil
})
defer restore()

distro, err := main.FindDistro("", "")
var err error
var distro string
_, stderr := testutil.CaptureStdio(t, func() {
distro, err = main.FindDistro("", "")
})
assert.NoError(t, err)
assert.Equal(t, "mocked-host-distro", distro)
assert.Equal(t, "No distro name specified, selecting \"mocked-host-distro\" based on host, use --distro to override\n", buf.String())
assert.Equal(t, "No distro name specified, selecting \"mocked-host-distro\" based on host, use --distro to override\n", stderr)
}
17 changes: 0 additions & 17 deletions cmd/image-builder/export_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package main

import (
"fmt"
"io"
"os"

"github.com/osbuild/images/pkg/cloud"
Expand Down Expand Up @@ -31,22 +30,6 @@ func MockOsArgs(new []string) (restore func()) {
}
}

func MockOsStdout(new io.Writer) (restore func()) {
saved := osStdout
osStdout = new
return func() {
osStdout = saved
}
}

func MockOsStderr(new io.Writer) (restore func()) {
saved := osStderr
osStderr = new
return func() {
osStderr = saved
}
}

func MockNewRepoRegistry(f func() (*reporegistry.RepoRegistry, error)) (restore func()) {
saved := newRepoRegistry
newRepoRegistry = func(dataDir string, extraRepos []string) (*reporegistry.RepoRegistry, error) {
Expand Down
4 changes: 3 additions & 1 deletion cmd/image-builder/list.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package main

import (
"os"

"github.com/osbuild/images/pkg/imagefilter"
)

Expand All @@ -19,7 +21,7 @@ func listImages(dataDir string, extraRepos []string, output string, filterExprs
if err != nil {
return err
}
if err := fmter.Output(osStdout, filteredResult); err != nil {
if err := fmter.Output(os.Stdout, filteredResult); err != nil {
return err
}

Expand Down
52 changes: 23 additions & 29 deletions cmd/image-builder/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand All @@ -29,11 +30,6 @@ import (
"github.com/osbuild/image-builder-cli/pkg/setup"
)

var (
osStdout io.Writer = os.Stdout
osStderr io.Writer = os.Stderr
)

// basenameFor returns the basename for directory and filenames
// for the given imageType. This can be user overriden via userBasename.
func basenameFor(img *imagefilter.Result, userBasename string) string {
Expand Down Expand Up @@ -134,14 +130,10 @@ func subscriptionImageOptions(cmd *cobra.Command) (*subscription.ImageOptions, e
return regs.Redhat.Subscription, nil
}

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{}
}
func cmdManifestWrapper(pbar progress.ProgressBar, cmd *cobra.Command, args []string, w io.Writer, wd io.Writer) (*imagefilter.Result, error) {
dataDir, err := cmd.Flags().GetString("force-data-dir")
if err != nil {
return nil, err
Expand Down Expand Up @@ -213,6 +205,10 @@ func cmdManifestWrapper(pbar progress.ProgressBar, cmd *cobra.Command, args []st
if err != nil {
return nil, err
}
disableBootstrapContainer, err := cmd.Flags().GetBool("without-bootstrap-container")
if err != nil {
return nil, err
}
bootcRef, err := cmd.Flags().GetString("bootc-ref")
if err != nil {
return nil, err
Expand Down Expand Up @@ -304,27 +300,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,
UseBootstrapContainer: !disableBootstrapContainer,
},
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 {
if img.ImgType.Arch().Name() != arch.Current().String() {
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
}

Expand All @@ -333,7 +333,7 @@ func cmdManifest(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}
_, err = cmdManifestWrapper(pbar, cmd, args, osStdout, io.Discard, nil)
_, err = cmdManifestWrapper(pbar, cmd, args, os.Stdout, io.Discard)
return err
}

Expand Down Expand Up @@ -401,13 +401,9 @@ func cmdBuild(cmd *cobra.Command, args []string) error {
}()

var mf bytes.Buffer
opts := &cmdManifestWrapperOptions{
useBootstrapIfNeeded: true,
}

// We discard any warnings from the depsolver until we figure out a better
// idea (likely in manifestgen)
res, err := cmdManifestWrapper(pbar, cmd, args, &mf, io.Discard, opts)
res, err := cmdManifestWrapper(pbar, cmd, args, &mf, io.Discard)
if err != nil {
return err
}
Expand Down Expand Up @@ -445,7 +441,7 @@ func cmdBuild(cmd *cobra.Command, args []string) error {
}
pbar.Stop()

fmt.Fprintf(osStdout, "Image build successful: %s\n", imagePath)
fmt.Fprintf(os.Stdout, "Image build successful: %s\n", imagePath)

if uploader != nil {
// XXX: integrate better into the progress, see bib
Expand Down Expand Up @@ -486,7 +482,7 @@ func cmdDescribeImg(cmd *cobra.Command, args []string) error {
return err
}

return describeImage(res, osStdout)
return describeImage(res, os.Stdout)
}

func normalizeRootArgs(_ *pflag.FlagSet, name string) pflag.NormalizedName {
Expand Down Expand Up @@ -537,9 +533,6 @@ operating systems like Fedora, CentOS and RHEL with easy customizations support.
rootCmd.PersistentFlags().String("output-dir", "", `Put output into the specified directory`)
rootCmd.PersistentFlags().BoolP("verbose", "v", false, `Switch to verbose mode (more logging on stderr and verbose progress)`)

rootCmd.SetOut(osStdout)
rootCmd.SetErr(osStderr)

listCmd := &cobra.Command{
Use: "list",
Short: "List buildable images, use --filter to limit further",
Expand Down Expand Up @@ -576,6 +569,7 @@ operating systems like Fedora, CentOS and RHEL with easy customizations support.
manifestCmd.Flags().Bool("ignore-warnings", false, `ignore warnings during manifest generation`)
manifestCmd.Flags().String("registrations", "", `filename of a registrations file with e.g. subscription details`)
manifestCmd.Flags().String("rpmmd-cache", "", `osbuild directory to cache rpm metadata`)
manifestCmd.Flags().Bool("without-bootstrap-container", false, `disable using a "bootstrap" container to generate the initial buildroot`)
rootCmd.AddCommand(manifestCmd)

uploadCmd := &cobra.Command{
Expand Down
Loading
Loading