progress: set --cache-max-size in osbuild
This commit allows controlling the `osbuild --cache-max-size` option. By default it will set the cache to 20GiB but allows this to be controlled by the user. Thanks to Simon for raising this.
This commit is contained in:
parent
2cfe043f5e
commit
958f95f634
2 changed files with 45 additions and 25 deletions
|
|
@ -16,6 +16,7 @@ import (
|
||||||
"github.com/mattn/go-isatty"
|
"github.com/mattn/go-isatty"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
"github.com/osbuild/images/pkg/datasizes"
|
||||||
"github.com/osbuild/images/pkg/osbuild"
|
"github.com/osbuild/images/pkg/osbuild"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -328,6 +329,8 @@ type OSBuildOptions struct {
|
||||||
|
|
||||||
// BuildLog writes the osbuild output to the given writer
|
// BuildLog writes the osbuild output to the given writer
|
||||||
BuildLog io.Writer
|
BuildLog io.Writer
|
||||||
|
|
||||||
|
CacheMaxSize int64
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: merge variant back into images/pkg/osbuild/osbuild-exec.go
|
// XXX: merge variant back into images/pkg/osbuild/osbuild-exec.go
|
||||||
|
|
@ -351,6 +354,26 @@ func RunOSBuild(pb ProgressBar, manifest []byte, exports []string, opts *OSBuild
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newOsbuildCmd(manifest []byte, exports []string, opts *OSBuildOptions) *exec.Cmd {
|
||||||
|
cacheMaxSize := int64(20 * datasizes.GiB)
|
||||||
|
if opts.CacheMaxSize != 0 {
|
||||||
|
cacheMaxSize = opts.CacheMaxSize
|
||||||
|
}
|
||||||
|
cmd := exec.Command(
|
||||||
|
osbuildCmd,
|
||||||
|
"--store", opts.StoreDir,
|
||||||
|
"--output-directory", opts.OutputDir,
|
||||||
|
fmt.Sprintf("--cache-max-size=%v", cacheMaxSize),
|
||||||
|
"-",
|
||||||
|
)
|
||||||
|
for _, export := range exports {
|
||||||
|
cmd.Args = append(cmd.Args, "--export", export)
|
||||||
|
}
|
||||||
|
cmd.Env = append(os.Environ(), opts.ExtraEnv...)
|
||||||
|
cmd.Stdin = bytes.NewBuffer(manifest)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
func runOSBuildNoProgress(pb ProgressBar, manifest []byte, exports []string, opts *OSBuildOptions) error {
|
func runOSBuildNoProgress(pb ProgressBar, manifest []byte, exports []string, opts *OSBuildOptions) error {
|
||||||
var stdout, stderr io.Writer
|
var stdout, stderr io.Writer
|
||||||
|
|
||||||
|
|
@ -380,18 +403,7 @@ func runOSBuildNoProgress(pb ProgressBar, manifest []byte, exports []string, opt
|
||||||
stderr = mw
|
stderr = mw
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command(
|
cmd := newOsbuildCmd(manifest, exports, opts)
|
||||||
osbuildCmd,
|
|
||||||
"--store", opts.StoreDir,
|
|
||||||
"--output-directory", opts.OutputDir,
|
|
||||||
"-",
|
|
||||||
)
|
|
||||||
for _, export := range exports {
|
|
||||||
cmd.Args = append(cmd.Args, "--export", export)
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.Env = append(os.Environ(), opts.ExtraEnv...)
|
|
||||||
cmd.Stdin = bytes.NewBuffer(manifest)
|
|
||||||
cmd.Stdout = stdout
|
cmd.Stdout = stdout
|
||||||
cmd.Stderr = stderr
|
cmd.Stderr = stderr
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
|
|
@ -410,17 +422,9 @@ func runOSBuildWithProgress(pb ProgressBar, manifest []byte, exports []string, o
|
||||||
defer rp.Close()
|
defer rp.Close()
|
||||||
defer wp.Close()
|
defer wp.Close()
|
||||||
|
|
||||||
cmd := exec.Command(
|
cmd := newOsbuildCmd(manifest, exports, opts)
|
||||||
osbuildCmd,
|
cmd.Args = append(cmd.Args, "--monitor=JSONSeqMonitor")
|
||||||
"--store", opts.StoreDir,
|
cmd.Args = append(cmd.Args, "--monitor-fd=3")
|
||||||
"--output-directory", opts.OutputDir,
|
|
||||||
"--monitor=JSONSeqMonitor",
|
|
||||||
"--monitor-fd=3",
|
|
||||||
"-",
|
|
||||||
)
|
|
||||||
for _, export := range exports {
|
|
||||||
cmd.Args = append(cmd.Args, "--export", export)
|
|
||||||
}
|
|
||||||
|
|
||||||
var stdio bytes.Buffer
|
var stdio bytes.Buffer
|
||||||
var mw, buildLog io.Writer
|
var mw, buildLog io.Writer
|
||||||
|
|
@ -433,8 +437,6 @@ func runOSBuildWithProgress(pb ProgressBar, manifest []byte, exports []string, o
|
||||||
buildLog = io.Discard
|
buildLog = io.Discard
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.Env = append(os.Environ(), opts.ExtraEnv...)
|
|
||||||
cmd.Stdin = bytes.NewBuffer(manifest)
|
|
||||||
cmd.Stdout = mw
|
cmd.Stdout = mw
|
||||||
cmd.Stderr = mw
|
cmd.Stderr = mw
|
||||||
cmd.ExtraFiles = []*os.File{wp}
|
cmd.ExtraFiles = []*os.File{wp}
|
||||||
|
|
|
||||||
|
|
@ -263,3 +263,21 @@ osbuild-stderr-output
|
||||||
`
|
`
|
||||||
assert.Equal(t, expectedOutput, buildLog.String())
|
assert.Equal(t, expectedOutput, buildLog.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue