introduce --build-args option

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2021-03-02 17:37:49 +01:00
parent 0037e0755f
commit 08e4222fbb
No known key found for this signature in database
GPG Key ID: 9858809D6F8F6E7E
8 changed files with 24 additions and 4 deletions

View File

@ -81,7 +81,7 @@ func ContainerToComposeProject(r containers.ContainerConfig) (types.Project, err
}
func toComposeEnvs(opts []string) types.MappingWithEquals {
result := map[string]*string{}
result := types.MappingWithEquals{}
for _, env := range opts {
tokens := strings.SplitN(env, "=", 2)
if len(tokens) > 1 {

View File

@ -71,6 +71,8 @@ type BuildOptions struct {
Pull bool
// Progress set type of progress output ("auto", "plain", "tty")
Progress string
// Args set build-time args
Args types.Mapping
}
// CreateOptions group options of the Create API

View File

@ -20,6 +20,7 @@ import (
"context"
"os"
"github.com/compose-spec/compose-go/types"
"github.com/spf13/cobra"
"github.com/docker/compose-cli/api/client"
@ -33,6 +34,7 @@ type buildOptions struct {
quiet bool
pull bool
progress string
args []string
}
func buildCommand(p *projectOptions) *cobra.Command {
@ -56,6 +58,7 @@ func buildCommand(p *projectOptions) *cobra.Command {
cmd.Flags().BoolVarP(&opts.quiet, "quiet", "q", false, "Don't print anything to STDOUT")
cmd.Flags().BoolVar(&opts.pull, "pull", false, "Always attempt to pull a newer version of the image.")
cmd.Flags().StringVar(&opts.progress, "progress", "auto", `Set type of progress output ("auto", "plain", "tty")`)
cmd.Flags().StringArrayVar(&opts.args, "build-arg", []string{}, "Set build-time variables for services.")
return cmd
}
@ -74,6 +77,7 @@ func runBuild(ctx context.Context, opts buildOptions, services []string) error {
return "", c.ComposeService().Build(ctx, project, compose.BuildOptions{
Pull: opts.pull,
Progress: opts.progress,
Args: types.NewMapping(opts.args),
})
})
return err

2
go.mod
View File

@ -17,7 +17,7 @@ require (
github.com/awslabs/goformation/v4 v4.15.6
github.com/buger/goterm v0.0.0-20200322175922-2f3e71b85129
github.com/cnabio/cnab-to-oci v0.3.1-beta1
github.com/compose-spec/compose-go v0.0.0-20210218184709-a75bbdcff7f3
github.com/compose-spec/compose-go v0.0.0-20210302161709-a66de601f6e2
github.com/containerd/console v1.0.1
github.com/containerd/containerd v1.4.3
github.com/containerd/continuity v0.0.0-20200928162600-f2cc35102c2a // indirect

4
go.sum
View File

@ -305,8 +305,8 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/compose-spec/compose-go v0.0.0-20210218184709-a75bbdcff7f3 h1:cGJa3EMDcclDU21e/CVQJnDf3ZjnB6HN9TvxkFHpGq8=
github.com/compose-spec/compose-go v0.0.0-20210218184709-a75bbdcff7f3/go.mod h1:flNthwF3kg+JioxATZWSsuuA2N3zGGwggDNNGoE9PHA=
github.com/compose-spec/compose-go v0.0.0-20210302161709-a66de601f6e2 h1:gQHeYKe3H5IvvLeWsWjOlCxpo0DV6uGdCt4Q3Gr3fTg=
github.com/compose-spec/compose-go v0.0.0-20210302161709-a66de601f6e2/go.mod h1:flNthwF3kg+JioxATZWSsuuA2N3zGGwggDNNGoE9PHA=
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340 h1:9atoWyI9RtXFwf7UDbme/6M8Ud0rFrx+Q3ZWgSnsxtw=

View File

@ -43,6 +43,7 @@ func (s *composeService) Build(ctx context.Context, project *types.Project, opti
imagesToBuild = append(imagesToBuild, imageName)
buildOptions := s.toBuildOptions(service, project.WorkingDir, imageName)
buildOptions.Pull = options.Pull
buildOptions.BuildArgs = options.Args
opts[imageName] = buildOptions
}
}

View File

@ -43,6 +43,17 @@ func TestLocalComposeBuild(t *testing.T) {
c.RunDockerCmd("image", "inspect", "custom-nginx")
})
t.Run("build with build-arg", func(t *testing.T) {
// ensure local test run does not reuse previously build image
c.RunDockerOrExitError("rmi", "build-test_nginx")
c.RunDockerOrExitError("rmi", "custom-nginx")
c.RunDockerCmd("compose", "--project-directory", "fixtures/build-test", "build", "--build-arg", "FOO=BAR")
res := c.RunDockerCmd("image", "inspect", "build-test_nginx")
res.Assert(t, icmd.Expected{Out: `"FOO": "BAR"`})
})
t.Run("build as part of up", func(t *testing.T) {
c.RunDockerOrExitError("rmi", "build-test_nginx")
c.RunDockerOrExitError("rmi", "custom-nginx")

View File

@ -14,4 +14,6 @@
FROM nginx
ARG FOO
LABEL FOO=$FOO
COPY static /usr/share/nginx/html