Merge pull request #1835 from ktock/long-form-json

pull/1062/merge
Justin Chadwell 2 years ago committed by GitHub
commit 2c02db8db4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -704,6 +704,7 @@ func parseInvokeConfig(invoke string) (cfg invokeConfig, err error) {
} }
csvReader := csv.NewReader(strings.NewReader(invoke)) csvReader := csv.NewReader(strings.NewReader(invoke))
csvReader.LazyQuotes = true
fields, err := csvReader.Read() fields, err := csvReader.Read()
if err != nil { if err != nil {
return cfg, err return cfg, err
@ -723,14 +724,14 @@ func parseInvokeConfig(invoke string) (cfg invokeConfig, err error) {
value := parts[1] value := parts[1]
switch key { switch key {
case "args": case "args":
cfg.Cmd = append(cfg.Cmd, value) // TODO: support JSON cfg.Cmd = append(cfg.Cmd, maybeJSONArray(value)...)
case "entrypoint": case "entrypoint":
cfg.Entrypoint = append(cfg.Entrypoint, value) // TODO: support JSON cfg.Entrypoint = append(cfg.Entrypoint, maybeJSONArray(value)...)
if cfg.Cmd == nil { if cfg.Cmd == nil {
cfg.Cmd = []string{} cfg.Cmd = []string{}
} }
case "env": case "env":
cfg.Env = append(cfg.Env, value) cfg.Env = append(cfg.Env, maybeJSONArray(value)...)
case "user": case "user":
cfg.User = value cfg.User = value
cfg.NoUser = false cfg.NoUser = false
@ -749,6 +750,14 @@ func parseInvokeConfig(invoke string) (cfg invokeConfig, err error) {
return cfg, nil return cfg, nil
} }
func maybeJSONArray(v string) []string {
var list []string
if err := json.Unmarshal([]byte(v), &list); err == nil {
return list
}
return []string{v}
}
func listToMap(values []string, defaultEnv bool) map[string]string { func listToMap(values []string, defaultEnv bool) map[string]string {
result := make(map[string]string, len(values)) result := make(map[string]string, len(values))
for _, value := range values { for _, value := range values {

@ -49,6 +49,16 @@ bin etc lib mnt proc run srv tmp var
dev home media opt root sbin sys usr work dev home media opt root sbin sys usr work
``` ```
Optional long form allows you specifying detailed configurations of the process.
It must be CSV-styled comma-separated key-value pairs.
Supported keys are `args` (can be JSON array format), `entrypoint` (can be JSON array format), `env` (can be JSON array format), `user`, `cwd` and `tty` (bool).
Example:
```
$ docker buildx build --invoke 'entrypoint=["sh"],"args=[""-c"", ""env | grep -e FOO -e AAA""]","env=[""FOO=bar"", ""AAA=bbb""]"' .
```
#### `on-error` #### `on-error`
If you want to start a debug session when a build fails, you can use If you want to start a debug session when a build fails, you can use
@ -151,4 +161,4 @@ Attached to process "3ug8iqaufiwwnukimhqqt06jz". Press Ctrl-a-c to switch to the
bin etc lib mnt proc run srv tmp var bin etc lib mnt proc run srv tmp var
dev home media opt root sbin sys usr work dev home media opt root sbin sys usr work
/ # / #
``` ```

Loading…
Cancel
Save