package build // import "github.com/docker/docker/integration-cli/cli/build" import ( "io" "strings" "github.com/docker/docker/testutil/fakecontext" "gotest.tools/icmd" ) type testingT interface { Fatal(args ...interface{}) Fatalf(string, ...interface{}) } // WithStdinContext sets the build context from the standard input with the specified reader func WithStdinContext(closer io.ReadCloser) func(*icmd.Cmd) func() { return func(cmd *icmd.Cmd) func() { cmd.Command = append(cmd.Command, "-") cmd.Stdin = closer return func() { // FIXME(vdemeester) we should not ignore the error hereā€¦ closer.Close() } } } // WithDockerfile creates / returns a CmdOperator to set the Dockerfile for a build operation func WithDockerfile(dockerfile string) func(*icmd.Cmd) func() { return func(cmd *icmd.Cmd) func() { cmd.Command = append(cmd.Command, "-") cmd.Stdin = strings.NewReader(dockerfile) return nil } } // WithoutCache makes the build ignore cache func WithoutCache(cmd *icmd.Cmd) func() { cmd.Command = append(cmd.Command, "--no-cache") return nil } // WithContextPath sets the build context path func WithContextPath(path string) func(*icmd.Cmd) func() { return func(cmd *icmd.Cmd) func() { cmd.Command = append(cmd.Command, path) return nil } } // WithExternalBuildContext use the specified context as build context func WithExternalBuildContext(ctx *fakecontext.Fake) func(*icmd.Cmd) func() { return func(cmd *icmd.Cmd) func() { cmd.Dir = ctx.Dir cmd.Command = append(cmd.Command, ".") return nil } } // WithBuildContext sets up the build context func WithBuildContext(t testingT, contextOperators ...func(*fakecontext.Fake) error) func(*icmd.Cmd) func() { // FIXME(vdemeester) de-duplicate that ctx := fakecontext.New(t, "", contextOperators...) return func(cmd *icmd.Cmd) func() { cmd.Dir = ctx.Dir cmd.Command = append(cmd.Command, ".") return closeBuildContext(t, ctx) } } // WithFile adds the specified file (with content) in the build context func WithFile(name, content string) func(*fakecontext.Fake) error { return fakecontext.WithFile(name, content) } func closeBuildContext(t testingT, ctx *fakecontext.Fake) func() { return func() { if err := ctx.Close(); err != nil { t.Fatal(err) } } }