diff --git a/cmd/docker-buildx/config.go b/cmd/docker-buildx/config.go index b6e7ff3..980a036 100644 --- a/cmd/docker-buildx/config.go +++ b/cmd/docker-buildx/config.go @@ -183,6 +183,12 @@ func settingsFlags(settings *plugin.Settings) []cli.Flag { Usage: "sets images to consider as cache sources", Destination: &settings.Build.CacheFrom, }, + &cli.StringSliceFlag{ + Name: "cache-to", + EnvVars: []string{"PLUGIN_CACHE_TO"}, + Usage: "cache destination for the build cache", + Destination: &settings.Build.CacheTo, + }, &cli.BoolFlag{ Name: "pull-image", EnvVars: []string{"PLUGIN_PULL_IMAGE"}, diff --git a/plugin/docker.go b/plugin/docker.go index 7a18b86..d914692 100644 --- a/plugin/docker.go +++ b/plugin/docker.go @@ -10,15 +10,6 @@ import ( "github.com/urfave/cli/v2" ) -// helper to check if args match "docker pull " -func isCommandPull(args []string) bool { - return len(args) > 2 && args[1] == "pull" -} - -func commandPull(repo string) *exec.Cmd { - return exec.Command(dockerExe, "pull", repo) -} - func commandLoginEmail(login Login) *exec.Cmd { return exec.Command( dockerExe, "login", @@ -86,6 +77,9 @@ func commandBuild(build Build, dryrun bool) *exec.Cmd { for _, arg := range build.CacheFrom.Value() { args = append(args, "--cache-from", arg) } + for _, arg := range build.CacheTo.Value() { + args = append(args, "--cache-to", arg) + } for _, arg := range build.ArgsEnv.Value() { addProxyValue(&build, arg) } diff --git a/plugin/impl.go b/plugin/impl.go index 7ed723e..30fb0e8 100644 --- a/plugin/impl.go +++ b/plugin/impl.go @@ -61,6 +61,7 @@ type Build struct { Output string // Docker build output Pull bool // Docker build pull CacheFrom cli.StringSlice // Docker build cache-from + CacheTo cli.StringSlice // Docker build cache-to Compress bool // Docker build compress Repo cli.StringSlice // Docker build repository NoCache bool // Docker build no-cache @@ -271,12 +272,6 @@ func (p *Plugin) Execute() error { cmds = append(cmds, commandInfo()) // docker info cmds = append(cmds, commandBuilder(p.settings.Daemon)) cmds = append(cmds, commandBuildx()) - - // pre-pull cache images - for _, img := range p.settings.Build.CacheFrom.Value() { - cmds = append(cmds, commandPull(img)) - } - cmds = append(cmds, commandBuild(p.settings.Build, p.settings.Dryrun)) // docker build // execute all commands in batch mode. @@ -286,9 +281,7 @@ func (p *Plugin) Execute() error { trace(cmd) err := cmd.Run() - if err != nil && isCommandPull(cmd.Args) { - fmt.Printf("Could not pull cache-from image %s. Ignoring...\n", cmd.Args[2]) - } else if err != nil { + if err != nil { return err } }