(p *ProjectOptions, dockerCli command.Cli, backendOptions *BackendOptions)
| 92 | } |
| 93 | |
| 94 | func buildCommand(p *ProjectOptions, dockerCli command.Cli, backendOptions *BackendOptions) *cobra.Command { |
| 95 | opts := buildOptions{ |
| 96 | ProjectOptions: p, |
| 97 | } |
| 98 | cmd := &cobra.Command{ |
| 99 | Use: "build [OPTIONS] [SERVICE...]", |
| 100 | Short: "Build or rebuild services", |
| 101 | PreRunE: Adapt(func(ctx context.Context, args []string) error { |
| 102 | if opts.quiet { |
| 103 | display.Mode = display.ModeQuiet |
| 104 | devnull, err := os.Open(os.DevNull) |
| 105 | if err != nil { |
| 106 | return err |
| 107 | } |
| 108 | os.Stdout = devnull |
| 109 | } |
| 110 | return nil |
| 111 | }), |
| 112 | RunE: AdaptCmd(func(ctx context.Context, cmd *cobra.Command, args []string) error { |
| 113 | if cmd.Flags().Changed("ssh") && opts.ssh == "" { |
| 114 | opts.ssh = "default" |
| 115 | } |
| 116 | if cmd.Flags().Changed("progress") && opts.ssh == "" { |
| 117 | fmt.Fprint(os.Stderr, "--progress is a global compose flag, better use `docker compose --progress xx build ...\n") |
| 118 | } |
| 119 | return runBuild(ctx, dockerCli, backendOptions, opts, args) |
| 120 | }), |
| 121 | ValidArgsFunction: completeServiceNames(dockerCli, p), |
| 122 | } |
| 123 | flags := cmd.Flags() |
| 124 | flags.BoolVar(&opts.push, "push", false, "Push service images") |
| 125 | flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Suppress the build output") |
| 126 | flags.BoolVar(&opts.pull, "pull", false, "Always attempt to pull a newer version of the image") |
| 127 | flags.StringArrayVar(&opts.args, "build-arg", []string{}, "Set build-time variables for services") |
| 128 | flags.StringVar(&opts.ssh, "ssh", "", "Set SSH authentications used when building service images. (use 'default' for using your default SSH Agent)") |
| 129 | flags.StringVar(&opts.builder, "builder", "", "Set builder to use") |
| 130 | flags.BoolVar(&opts.deps, "with-dependencies", false, "Also build dependencies (transitively)") |
| 131 | flags.StringVar(&opts.provenance, "provenance", "", `Add a provenance attestation`) |
| 132 | flags.StringVar(&opts.sbom, "sbom", "", `Add a SBOM attestation`) |
| 133 | |
| 134 | flags.Bool("parallel", true, "Build images in parallel. DEPRECATED") |
| 135 | flags.MarkHidden("parallel") //nolint:errcheck |
| 136 | flags.Bool("compress", true, "Compress the build context using gzip. DEPRECATED") |
| 137 | flags.MarkHidden("compress") //nolint:errcheck |
| 138 | flags.Bool("force-rm", true, "Always remove intermediate containers. DEPRECATED") |
| 139 | flags.MarkHidden("force-rm") //nolint:errcheck |
| 140 | flags.BoolVar(&opts.noCache, "no-cache", false, "Do not use cache when building the image") |
| 141 | flags.Bool("no-rm", false, "Do not remove intermediate containers after a successful build. DEPRECATED") |
| 142 | flags.MarkHidden("no-rm") //nolint:errcheck |
| 143 | flags.VarP(&opts.memory, "memory", "m", "Set memory limit for the build container. Not supported by BuildKit.") |
| 144 | flags.StringVar(&p.Progress, "progress", "", fmt.Sprintf(`Set type of ui output (%s)`, strings.Join(printerModes, ", "))) |
| 145 | flags.MarkHidden("progress") //nolint:errcheck |
| 146 | flags.BoolVar(&opts.print, "print", false, "Print equivalent bake file") |
| 147 | flags.BoolVar(&opts.check, "check", false, "Check build configuration") |
| 148 | |
| 149 | return cmd |
| 150 | } |
| 151 |
no test coverage detected