Skip to content
This repository was archived by the owner on Jul 11, 2025. It is now read-only.

Commit a4b11b8

Browse files
committed
docker: fix arg parsing for build found in args
Example: `docker run golang go build` gnarly was detecting this as a `docker build` and injecting `buildx` so the final command became: `docker run golang go buildx build` Signed-off-by: Brian Goff <[email protected]>
1 parent ad975c1 commit a4b11b8

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

docker.go

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,23 +222,38 @@ func handleDockerFlag(arg, next string, dArgs *dockerArgs) (handledNext bool, om
222222
// e.g. if argv is "docker build -t foo -f bar", the args would be "build -t foo -f bar"
223223
func parseDockerArgs(args []string, dArgs *dockerArgs) {
224224
var (
225-
skipNext bool
225+
skipNext bool
226+
subCommand string
227+
)
228+
229+
const (
230+
buildx = "buildx"
231+
build = "build"
226232
)
227233

228234
for i, arg := range args {
229235
if skipNext {
230236
skipNext = false
231237
continue
232238
}
239+
233240
switch arg {
234-
case "build":
235-
dArgs.Build = true
236-
dArgs.BuildPos = i
241+
case build:
242+
if subCommand == "" {
243+
subCommand = build
244+
}
245+
if subCommand == buildx || subCommand == build {
246+
dArgs.Build = true
247+
dArgs.BuildPos = i
248+
}
237249
continue
238-
case "buildx":
250+
case buildx:
239251
// `buildx` must come before `build` to be considered
240-
if !dArgs.Build {
241-
dArgs.Buildx = true
252+
if subCommand == "" {
253+
if !dArgs.Build {
254+
dArgs.Buildx = true
255+
}
256+
subCommand = buildx
242257
}
243258
continue
244259
}
@@ -264,6 +279,8 @@ func parseDockerArgs(args []string, dArgs *dockerArgs) {
264279
continue
265280
}
266281

282+
subCommand = arg
283+
267284
if dArgs.Build {
268285
if dArgs.Context != "" {
269286
panic("[gnarly]: found multiple contexts -- this is a bug in the argument parser")

docker_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,10 @@ func TestParseDockerArgs(t *testing.T) {
119119
if dArgs.FilterFlags[2] != 7 {
120120
t.Errorf("Expected 6, got %d", dArgs.FilterFlags[2])
121121
}
122+
123+
dArgs = newDockerArgs()
124+
parseDockerArgs([]string{"run", "-it", "--rm", "golang:1.18", "go", "build"}, &dArgs)
125+
if dArgs.Build {
126+
t.Error("Expected `build` to be false since it is a not a docker build command")
127+
}
122128
}

0 commit comments

Comments
 (0)