diff --git a/bib/pkg/progress/progress.go b/bib/pkg/progress/progress.go index b29b38fe..a59a511e 100644 --- a/bib/pkg/progress/progress.go +++ b/bib/pkg/progress/progress.go @@ -14,6 +14,7 @@ import ( "github.com/mattn/go-isatty" "github.com/sirupsen/logrus" + "github.com/osbuild/images/pkg/datasizes" "github.com/osbuild/images/pkg/osbuild" ) @@ -319,6 +320,8 @@ type OSBuildOptions struct { // BuildLog writes the osbuild output to the given writer BuildLog io.Writer + + CacheMaxSize int64 } func writersForOSBuild(pb ProgressBar, opts *OSBuildOptions, internalBuildLog io.Writer) (osbuildStdout io.Writer, osbuildStderr io.Writer) { @@ -377,12 +380,17 @@ func RunOSBuild(pb ProgressBar, manifest []byte, exports []string, opts *OSBuild defer rp.Close() defer wp.Close() + cacheMaxSize := int64(20 * datasizes.GiB) + if opts.CacheMaxSize != 0 { + cacheMaxSize = opts.CacheMaxSize + } cmd := exec.Command( osbuildCmd, "--store", opts.StoreDir, "--output-directory", opts.OutputDir, "--monitor=JSONSeqMonitor", "--monitor-fd=3", + fmt.Sprintf("--cache-max-size=%v", cacheMaxSize), "-", ) for _, export := range exports { diff --git a/bib/pkg/progress/progress_test.go b/bib/pkg/progress/progress_test.go index 9ba3c5ab..88d76c7d 100644 --- a/bib/pkg/progress/progress_test.go +++ b/bib/pkg/progress/progress_test.go @@ -203,3 +203,21 @@ func TestRunOSBuildWithProgressIncorrectJSON(t *testing.T) { assert.EqualError(t, err, `errors parsing osbuild status: cannot scan line "invalid-json": invalid character 'i' looking for beginning of value`) } + +func TestRunOSBuildCacheMaxSize(t *testing.T) { + fakeOsbuildBinary := makeFakeOsbuild(t, `echo "$@" > "$0".cmdline`) + restore := progress.MockOsbuildCmd(fakeOsbuildBinary) + defer restore() + + pbar, err := progress.New("debug") + assert.NoError(t, err) + + osbuildOpts := &progress.OSBuildOptions{ + CacheMaxSize: 77, + } + err = progress.RunOSBuild(pbar, []byte(`{"fake":"manifest"}`), nil, osbuildOpts) + assert.NoError(t, err) + cmdline, err := os.ReadFile(fakeOsbuildBinary + ".cmdline") + assert.NoError(t, err) + assert.Contains(t, string(cmdline), "--cache-max-size=77") +}