From 0acb53e29da3307dd7f40ee1559bfda70f10620a Mon Sep 17 00:00:00 2001 From: attiasas Date: Mon, 15 Dec 2025 14:00:45 +0200 Subject: [PATCH 1/3] Register Docker scan flags to CLI docker flags --- buildtools/cli.go | 24 +++++++++++++++++++++++- go.mod | 3 ++- go.sum | 4 ++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/buildtools/cli.go b/buildtools/cli.go index f792880c7..27f688aea 100644 --- a/buildtools/cli.go +++ b/buildtools/cli.go @@ -11,6 +11,7 @@ import ( "strings" "github.com/BurntSushi/toml" + "github.com/jfrog/gofrog/datastructures" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/container/strategies" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/python" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/setup" @@ -425,7 +426,7 @@ func GetCommands() []cli.Command { }, { Name: "docker", - Flags: cliutils.GetCommandFlags(cliutils.Docker), + Flags: getDockerFlags(), Usage: docker.GetDescription(), HelpName: corecommon.CreateUsage("docker", docker.GetDescription(), docker.Usage), UsageText: docker.GetArguments(), @@ -494,6 +495,27 @@ func skipFlagParsingForDockerCmd() bool { return true } +func getDockerFlags() []cli.Flag { + flagList := cliutils.GetCommandFlags(cliutils.Docker) + flagNames := datastructures.MakeSet[string]() + for _, f := range flagList { + flagNames.Add(f.GetName()) + } + // Adding `Docker Scan` flags + converted, _, err := components.ConvertFlags(securityDocs.DockerScan, securityDocs.GetCommandFlags(securityDocs.DockerScan)) + if err != nil { + log.Error("Could not convert Docker Scan flags:", err) + return flagList + } + // Avoiding flag duplication + for _, f := range converted { + if !flagNames.Exists(f.GetName()) { + flagList = append(flagList, f) + } + } + return flagList +} + // decorateWithFlagCapture injects a Before hook into every command returned from this package, // so we can capture user-provided flags consistently in one place for all build commands. func decorateWithFlagCapture(cmds []cli.Command) []cli.Command { diff --git a/go.mod b/go.mod index 7564922ee..5b960e2ef 100644 --- a/go.mod +++ b/go.mod @@ -288,7 +288,8 @@ replace github.com/gfleury/go-bitbucket-v1 => github.com/gfleury/go-bitbucket-v1 // replace github.com/jfrog/jfrog-cli-core/v2 => github.com/reshmifrog/jfrog-cli-core/v2 v2.58.5-0.20251110095124-ab9a4102ec5a -// replace github.com/jfrog/jfrog-cli-core/v2 => github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251104113958-abd9de5958c4 +// attiasas:convert_flags_public +replace github.com/jfrog/jfrog-cli-core/v2 => github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251215112214-480d59f6e63e //replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.54.2-0.20251007084958-5eeaa42c31a6 diff --git a/go.sum b/go.sum index f46396865..5a2215f1c 100644 --- a/go.sum +++ b/go.sum @@ -695,6 +695,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251215112214-480d59f6e63e h1:qpGEWolmqWnTPvZsI5mMAORq1LxxxWkyKVMbsKQu32s= +github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251215112214-480d59f6e63e/go.mod h1:BMoGi2rG0udCCeaghqlNgiW3fTmT+TNnfTnBoWFYgcg= github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.39.5 h1:e/SXuia3rkFtapghJROrydtQpfQaaUgd1cUvyO1mp2w= @@ -1218,8 +1220,6 @@ github.com/jfrog/jfrog-cli-application v1.0.2-0.20251208114900-b3cc968c8e3d h1:0 github.com/jfrog/jfrog-cli-application v1.0.2-0.20251208114900-b3cc968c8e3d/go.mod h1:xum2HquWO5uExa/A7MQs3TgJJVEeoqTR+6Z4mfBr1Xw= github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251211071646-7cebb31a31f0 h1:NbMgMcU2I+zdBWbwZagbKwmsmY96ikNatpwMs0M1Kv8= github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251211071646-7cebb31a31f0/go.mod h1:7cCaRhXorlbyXZgiW5bplCExFxlnROaG21K12d8inpQ= -github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251210085744-f8481d179ac5 h1:GYE67ubwl+ZRw3CcXFUi49EwwQp6k+qS8sX0QuHDHO8= -github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251210085744-f8481d179ac5/go.mod h1:BMoGi2rG0udCCeaghqlNgiW3fTmT+TNnfTnBoWFYgcg= github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251204144808-73fa744851c0 h1:8S1vE1PeVtrzWkKL0N39cX6XLLNV0It+f6xjRKjw7Ug= github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251204144808-73fa744851c0/go.mod h1:Ijx7tkTp6uDxgmQW+zQKLNztMrz6dcQAoVNXHL7spsU= github.com/jfrog/jfrog-cli-platform-services v1.10.1-0.20251205121610-171eb9b0000e h1:0BDeb5lD8qgQMOZJ08E35jUMTlt2Hb0K7Wu0SqO6MrI= From 246b80e49934919f4fda01cfabdb944201894e46 Mon Sep 17 00:00:00 2001 From: attiasas Date: Tue, 30 Dec 2025 09:47:43 +0200 Subject: [PATCH 2/3] FIX CR changes --- buildtools/cli.go | 5 +++-- buildtools/cli_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/buildtools/cli.go b/buildtools/cli.go index 27f688aea..adb25ce54 100644 --- a/buildtools/cli.go +++ b/buildtools/cli.go @@ -496,8 +496,9 @@ func skipFlagParsingForDockerCmd() bool { } func getDockerFlags() []cli.Flag { - flagList := cliutils.GetCommandFlags(cliutils.Docker) flagNames := datastructures.MakeSet[string]() + // Collecting existing Docker flags + flagList := cliutils.GetCommandFlags(cliutils.Docker) for _, f := range flagList { flagNames.Add(f.GetName()) } @@ -507,8 +508,8 @@ func getDockerFlags() []cli.Flag { log.Error("Could not convert Docker Scan flags:", err) return flagList } - // Avoiding flag duplication for _, f := range converted { + // Avoiding flag duplication which causes panic in urfave/cli if !flagNames.Exists(f.GetName()) { flagList = append(flagList, f) } diff --git a/buildtools/cli_test.go b/buildtools/cli_test.go index 802f1e3fb..50e26cad0 100644 --- a/buildtools/cli_test.go +++ b/buildtools/cli_test.go @@ -4,6 +4,8 @@ import ( "errors" "testing" + securityDocs "github.com/jfrog/jfrog-cli-security/cli/docs" + "github.com/jfrog/jfrog-cli/utils/cliutils" "github.com/stretchr/testify/assert" ) @@ -274,3 +276,41 @@ func TestExtractDockerBuildOptionsFromArgs(t *testing.T) { }) } } + +func TestGetDockerFlags(t *testing.T) { + flags := getDockerFlags() + + // Check expected flags from CLI + commonFlagList := cliutils.GetCommandFlags(cliutils.Docker) + for _, commonFlag := range commonFlagList { + found := false + for _, flag := range flags { + if flag.GetName() == commonFlag.GetName() { + found = true + break + } + } + assert.Truef(t, found, "Expected flag '%s' from CLI not found in docker flags", commonFlag.GetName()) + } + + // Check expected flags from Security commands + secFlags := securityDocs.GetCommandFlags(securityDocs.DockerScan) + for _, secFlag := range secFlags { + found := false + for _, flag := range flags { + if flag.GetName() == secFlag.GetName() { + found = true + break + } + } + assert.Truef(t, found, "Expected flag '%s' from Security commands not found in docker flags", secFlag.GetName()) + } + + // Make sure there are no duplicate flags + flagNames := make(map[string]bool) + for _, flag := range flags { + _, exists := flagNames[flag.GetName()] + assert.Falsef(t, exists, "Duplicate flag '%s' found in docker flags", flag.GetName()) + flagNames[flag.GetName()] = true + } +} From 14868d731ef179788e8980fc8bc944930c2e6260 Mon Sep 17 00:00:00 2001 From: attiasas Date: Tue, 30 Dec 2025 09:50:26 +0200 Subject: [PATCH 3/3] update deps --- go.mod | 2 +- go.sum | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 97e61cacf..addb1144f 100644 --- a/go.mod +++ b/go.mod @@ -285,7 +285,7 @@ replace github.com/gfleury/go-bitbucket-v1 => github.com/gfleury/go-bitbucket-v1 // replace github.com/jfrog/jfrog-cli-core/v2 => github.com/reshmifrog/jfrog-cli-core/v2 v2.58.5-0.20251110095124-ab9a4102ec5a // attiasas:convert_flags_public -replace github.com/jfrog/jfrog-cli-core/v2 => github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251215112214-480d59f6e63e +replace github.com/jfrog/jfrog-cli-core/v2 => github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251230074913-08e3d39269b0 //replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.54.2-0.20251007084958-5eeaa42c31a6 diff --git a/go.sum b/go.sum index 73c5879d1..9707df4d3 100644 --- a/go.sum +++ b/go.sum @@ -695,8 +695,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251215112214-480d59f6e63e h1:qpGEWolmqWnTPvZsI5mMAORq1LxxxWkyKVMbsKQu32s= -github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251215112214-480d59f6e63e/go.mod h1:BMoGi2rG0udCCeaghqlNgiW3fTmT+TNnfTnBoWFYgcg= +github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251230074913-08e3d39269b0 h1:9Xbjbrh2Rc4ABegZfgHSy7CZG6gc8Hc10tp6yQwWB0Y= +github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251230074913-08e3d39269b0/go.mod h1:REkU0OfnLYZbQIjD2Cg85DAVP0SRZuV/PxiDfCJiJOc= github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.39.5 h1:e/SXuia3rkFtapghJROrydtQpfQaaUgd1cUvyO1mp2w= @@ -1220,8 +1220,6 @@ github.com/jfrog/jfrog-cli-application v1.0.2-0.20251210075951-519050602a7f h1:Y github.com/jfrog/jfrog-cli-application v1.0.2-0.20251210075951-519050602a7f/go.mod h1:xum2HquWO5uExa/A7MQs3TgJJVEeoqTR+6Z4mfBr1Xw= github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251230064405-049e011b0bb7 h1:UzFwA39ZTvinCbNvhr9QooeZaF1NBMkxXdBYJwTrXcU= github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251230064405-049e011b0bb7/go.mod h1:T8BzK7jnojx74G/tFs6lTjvNjNO6ltdWaZmY0X0YOOI= -github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251223102649-e659f6937251 h1:WTyDOaYJUwY6zQujZuL9JQ9Q9+QWj9p31tLb4bJnu4U= -github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251223102649-e659f6937251/go.mod h1:REkU0OfnLYZbQIjD2Cg85DAVP0SRZuV/PxiDfCJiJOc= github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251204144808-73fa744851c0 h1:8S1vE1PeVtrzWkKL0N39cX6XLLNV0It+f6xjRKjw7Ug= github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251204144808-73fa744851c0/go.mod h1:Ijx7tkTp6uDxgmQW+zQKLNztMrz6dcQAoVNXHL7spsU= github.com/jfrog/jfrog-cli-platform-services v1.10.1-0.20251205121610-171eb9b0000e h1:0BDeb5lD8qgQMOZJ08E35jUMTlt2Hb0K7Wu0SqO6MrI=