Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
8888b67
RTECO-1574 - RTECO-1574 - Implementation of Nuget Support for client -
bhanurp Jul 24, 2026
1330b5a
Fix NuGet FlexPack CLI wiring and pin dependencies to pushed commits
bhanurp Jul 29, 2026
b870955
Add NuGet FlexPack native test suite and fix --scan flag leak
bhanurp Aug 6, 2026
0d50f82
Point build-info-go/jfrog-cli-artifactory replace directives at pushe…
bhanurp Aug 6, 2026
485add2
Merge branch 'master' into RTECO-1574
bhanurp Aug 7, 2026
10fd916
Fix cli.go import conflict from master merge, bump fork replace direc…
bhanurp Aug 7, 2026
7958796
Merge branch 'master' into RTECO-1574
bhanurp Aug 8, 2026
642bbd6
Fix Go-Sec/Static Check findings in nuget_native_test.go
bhanurp Aug 8, 2026
6ac876b
Bump jfrog-cli's own build-info-go replace to match jfrog-cli-artifac…
bhanurp Aug 8, 2026
f976e15
Bump build-info-go/jfrog-cli-artifactory replace directives (Go-Sec f…
bhanurp Aug 8, 2026
b3fa315
Merge branch 'master' into RTECO-1574
bhanurp Aug 10, 2026
a33ab2b
Regenerate go.sum after merging master
bhanurp Aug 10, 2026
1bc0c18
Update TestNugetResolve assertions for FlexPack RequestedBy shape
bhanurp Aug 10, 2026
77e2b75
Fix unparam lint: drop unused moduleName param from Nuget dependency …
bhanurp Aug 10, 2026
6948835
Gate NuGet/Dotnet FlexPack routing on absence of a legacy config file
bhanurp Aug 10, 2026
f6e9d6c
Strip --insecure-tls in legacy NugetCmd/DotnetCmd too
bhanurp Aug 10, 2026
d5a9a40
Revert "Strip --insecure-tls in legacy NugetCmd/DotnetCmd too"
bhanurp Aug 10, 2026
addafd3
Use --allow-insecure-connections in legacy-config-based NuGet/Dotnet …
bhanurp Aug 10, 2026
0f36415
Give nuget_native_test.go its own insecure-connection helper
bhanurp Aug 10, 2026
63e1dc5
Skip build-scan NuGet tests when Xray is not enabled
bhanurp Aug 10, 2026
13af163
Fix project creation auth and skip release-bundle test without Lifecycle
bhanurp Aug 11, 2026
91dbc26
Point NuGet CI job at the platform router so Lifecycle endpoints resolve
bhanurp Aug 11, 2026
8ef3353
Scope the platform-router URL fix to the release-bundle test only
bhanurp Aug 11, 2026
c98cf47
Merge remote-tracking branch 'upstream/master' into RTECO-1574
bhanurp Aug 12, 2026
ca0e555
Route project-creation Access calls through the platform router too; …
bhanurp Aug 12, 2026
d1c91a9
Fix Windows-only failure in TestNugetFlexPackDependencyRangeResolvesC…
bhanurp Aug 12, 2026
ab33d4e
Merge remote-tracking branch 'upstream/master' into RTECO-1574
bhanurp Aug 12, 2026
2acb8ba
Add missing allow-unsafe-pr-checkout to aptTests.yml
bhanurp Aug 13, 2026
c9162ee
Merge branch 'master' into RTECO-1574
bhanurp Aug 13, 2026
b958f5d
RTECO-0000 - Ran go mod tidy
bhanurp Aug 13, 2026
e7d6cb8
RTECO-1574 - Update cli.go server loading and fix NuGet FlexPack tests
bhanurp Aug 19, 2026
7ba2c9b
RTECO-1574 - Bump build-info-go and jfrog-cli-artifactory to latest f…
bhanurp Aug 20, 2026
dc36244
RTECO-1574 - Bump jfrog-cli-artifactory fork to v0.1.12-0.20260820070…
bhanurp Aug 20, 2026
9f6533a
RTECO-1574 - Merge upstream/master and bump fork pseudo-versions
bhanurp Aug 20, 2026
09fff7d
RTECO-1574 - Fix deprecated httputil.ReverseProxy.Director (SA1019)
bhanurp Aug 20, 2026
6334702
RTECO-1574 - Bump jfrog-cli-artifactory replace to include HTTP sourc…
bhanurp Aug 20, 2026
7f10096
RTECO-1574 - Switch jfrog-cli-artifactory dep to upstream with HTTP fix
bhanurp Aug 20, 2026
ad85e22
Revert "RTECO-1574 - Switch jfrog-cli-artifactory dep to upstream wit…
bhanurp Aug 20, 2026
23fe15c
RTECO-1574 - Fix snupkg path and direct-dep requestedBy in tests
bhanurp Aug 20, 2026
27f0e69
RTECO-1574 - Switch to upstream pseudoversions, drop fork replaces
bhanurp Aug 20, 2026
1ea1aa0
RTECO-1574 - Bump jfrog-cli-artifactory to include virtual repo resol…
bhanurp Aug 20, 2026
ca73d26
RTECO-1574 - Assert OriginalDeploymentRepo resolves to local repo in …
bhanurp Aug 20, 2026
4a6f99c
RTECO-1574 - Fix snupkg Artifactory storage path in tests and bump deps
bhanurp Aug 20, 2026
466e8a6
RTECO-1574 - Bump deps to include snupkg unit test fix
bhanurp Aug 20, 2026
d219eb1
RTECO-1574 - Bump jfrog-cli-artifactory to include stamp comment fix
bhanurp Aug 20, 2026
b0d7a2d
RTECO-1574 - Fix .symbols.nupkg test assertion and bump deps
bhanurp Aug 20, 2026
79c2b49
RTECO-1574 - Assert type=nupkg and scope on all dependency loops in e…
bhanurp Aug 25, 2026
97c4013
RTECO-1574 - Fix --help forwarded to native tool for nuget/dotnet sub…
bhanurp Aug 25, 2026
e3ac62a
RTECO-1574 - Address review: --scan error, remove html artifact, fix …
bhanurp Aug 26, 2026
2ab663d
RTECO-1574 - Bump build-info-go to include snapshot scoping and graph…
bhanurp Aug 26, 2026
d5a727e
RTECO-1574 - go mod tidy: remove unused indirect dependencies
bhanurp Aug 26, 2026
3993e32
RTECO-1574 - Fix govet: replace slices.Clone with explicit copy in ma…
bhanurp Aug 27, 2026
3b3689f
RTECO-1574 - Merge upstream/master: bump jfrog-cli-core, resolve prox…
bhanurp Aug 27, 2026
fdfeea5
fix: remove fork replace directive for jfrog-cli-artifactory, use ups…
bhanurp Aug 27, 2026
f1255d9
fix: resolve gocritic appendAssign and makezero static analysis failures
bhanurp Aug 27, 2026
dfc3b1a
fix: resolve makezero for combined slice in nuget_test.go
bhanurp Aug 27, 2026
ea10442
test: skip TestNugetFlexPackScanBlocksVulnerablePush without Xray
bhanurp Aug 27, 2026
35731be
chore: bump build-info-go to v1.13.1-0.20260827115645-671a9b8faf2e (c…
bhanurp Aug 28, 2026
8a2f0ad
chore: bump build-info-go to 4a2e4939ca36 (fix push-arg containment c…
bhanurp Aug 28, 2026
6588524
chore: bump jfrog-cli-artifactory to fc82a932a9e8 (build-info-go push…
bhanurp Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/aptTests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ jobs:
uses: actions/checkout@v7
with:
ref: ${{ github.event.pull_request.head.sha || github.ref }}
# Safe: this workflow only runs after human approval via the build-gate environment.
allow-unsafe-pr-checkout: true

- name: Setup FastCI
uses: jfrog-fastci/fastci@v1
Expand Down
128 changes: 125 additions & 3 deletions buildtools/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package buildtools
import (
"errors"
"fmt"

"io/fs"
"os"
"os/exec"
Expand All @@ -11,10 +12,12 @@ import (
"strconv"
"strings"

dotnetutils "github.com/jfrog/build-info-go/build/utils/dotnet"
alpinecommand "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/alpine"
aptcommand "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/apt"
conancommand "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/conan"
nixcommand "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/nix"
nugetcommand "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/nuget"
rubycommandexec "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/ruby"

"github.com/BurntSushi/toml"
Expand Down Expand Up @@ -1030,11 +1033,22 @@ func NugetCmd(c *cli.Context) error {
return cliutils.WrongNumberOfArgumentsHandler(c)
}

configFilePath, err := getProjectConfigPathOrThrow(project.Nuget, "nuget", "nuget-config")
configFilePath, configExists, err := project.GetProjectConfFilePath(project.Nuget)
if err != nil {
return err
}

// FlexPack bypasses all config file requirements (only when no config exists)
if artutils.ShouldRunNative(configFilePath) && !configExists {
return runNugetFlexPackCmd(c, dotnetutils.Nuget)
}

if !configExists {
if configFilePath, err = getProjectConfigPathOrThrow(project.Nuget, "nuget", "nuget-config"); err != nil {
return err
}
}

rtDetails, targetRepo, useNugetV2, err := getNugetAndDotnetConfigFields(configFilePath)
if err != nil {
return err
Expand Down Expand Up @@ -1074,12 +1088,22 @@ func DotnetCmd(c *cli.Context) error {
return cliutils.WrongNumberOfArgumentsHandler(c)
}

// Get configuration file path.
configFilePath, err := getProjectConfigPathOrThrow(project.Dotnet, "dotnet", "dotnet-config")
configFilePath, configExists, err := project.GetProjectConfFilePath(project.Dotnet)
if err != nil {
return err
}

// FlexPack bypasses all config file requirements (only when no config exists)
if artutils.ShouldRunNative(configFilePath) && !configExists {
return runNugetFlexPackCmd(c, dotnetutils.DotnetCore)
}

if !configExists {
if configFilePath, err = getProjectConfigPathOrThrow(project.Dotnet, "dotnet", "dotnet-config"); err != nil {
return err
}
}

rtDetails, targetRepo, useNugetV2, err := getNugetAndDotnetConfigFields(configFilePath)
if err != nil {
return err
Expand Down Expand Up @@ -2162,6 +2186,104 @@ func ConanCmd(c *cli.Context) error {
return commands.ExecWithPackageManager(conanCommand, project.Conan.String())
}

// runNugetFlexPackCmd handles NuGet/dotnet commands in FlexPack native mode.
// No project config file is required; server details come from --server-id or the default profile.
func runNugetFlexPackCmd(c *cli.Context, toolchainType dotnetutils.ToolchainType) error {
// ShowCmdHelpIfNeeded only catches --help when it is the sole argument (e.g. "jf nuget --help").
// For subcommand help ("jf nuget push --help", "jf dotnet restore -h") the flag sits after
// the subcommand name, so SkipFlagParsing passes the whole slice to us. Intercept it here
// before any arg is forwarded to the native tool, which would reject --help with an error.
if show, err := cliutils.ShowGenericCmdHelpIfNeeded(c, c.Args(), c.Command.Name); show || err != nil {
return err
}

args := cliutils.ExtractCommand(c)

args, serverID, err := coreutils.ExtractServerIdFromCommand(args)
if err != nil {
return fmt.Errorf("extract server ID: %w", err)
}

filteredArgs, buildConfiguration, err := build.ExtractBuildDetailsFromArgs(args)
if err != nil {
return err
}

// Extract --repo-resolve and --repo flags.
var repoResolve, repoDeploy string
filteredArgs, repoResolve, err = coreutils.ExtractStringOptionFromArgs(filteredArgs, "repo-resolve")
if err != nil {
return fmt.Errorf("extract --repo-resolve: %w", err)
}
filteredArgs, repoDeploy, err = coreutils.ExtractStringOptionFromArgs(filteredArgs, "repo")
if err != nil {
return fmt.Errorf("extract --repo: %w", err)
}

useNugetV2, err := cliutils.ExtractBoolFlagFromArgs(&filteredArgs, "nuget-v2")
if err != nil {
return err
}
allowInsecure, err := cliutils.ExtractBoolFlagFromArgs(&filteredArgs, "insecure-tls")
if err != nil {
return err
}
// --scan isn't a native nuget.exe option; it must be consumed here or it leaks through and
// nuget.exe rejects it with "Unknown option". Conditional-upload Xray scanning (blocking the
// push itself on a critical vulnerability, as Maven's --scan does via
// commandsUtils.ConditionalUploadScanFunc) isn't wired for NuGet FlexPack yet - same
// documented gap as the curation hook (scenario 11) - so for now this only strips the flag
// rather than acting on it.
xrayScan, err := cliutils.ExtractBoolFlagFromArgs(&filteredArgs, "scan")
if err != nil {
return err
}
if xrayScan {
return errors.New("--scan is not yet supported for 'jf nuget'/'jf dotnet' in native mode; omit --scan or use the legacy path")
}

cmdName, nugetArgs := getNugetCommandName(filteredArgs, toolchainType)
workingDir, err := filepath.Abs(".")
if err != nil {
return err
}

nugetCmd := nugetcommand.NewNuGetFlexPackCommand().
SetToolchainType(toolchainType).
SetSubCommand(cmdName).
SetArgs(nugetArgs).
SetRepoResolve(repoResolve).
SetRepoDeploy(repoDeploy).
SetUseNugetV2(useNugetV2).
SetAllowInsecureConnections(allowInsecure).
SetBuildConfiguration(buildConfiguration).
SetWorkingDir(workingDir)

// Always attempt to load server details from --server-id or the default configured server.
// Credential injection into the temp nuget.config happens later in Run() only when needed
// (i.e. --repo-resolve/--repo is set and no existing nuget.config credentials take priority).
serverDetails, err := coreConfig.GetSpecificConfig(serverID, true, false)
if err != nil && serverID != "" {
// Only fail hard when a specific --server-id was requested but not found.
return fmt.Errorf("server-id %q not found: %w", serverID, err)
}
if err == nil {
nugetCmd.SetServerDetails(serverDetails)
}

return commands.ExecWithPackageManager(nugetCmd, project.Nuget.String())
}

// getNugetCommandName parses the native NuGet command and handles dotnet's two-token
// "nuget push" subcommand without changing the argument list for any other command.
func getNugetCommandName(args []string, toolchainType dotnetutils.ToolchainType) (string, []string) {
commandName, commandArgs := getCommandName(args)
if toolchainType == dotnetutils.DotnetCore && commandName == "nuget" && len(commandArgs) > 0 && commandArgs[0] == "push" {
return "nuget push", commandArgs[1:]
}
return commandName, commandArgs
}

func NixCmd(c *cli.Context) error {
if show, err := cliutils.ShowCmdHelpIfNeeded(c, c.Args()); show || err != nil {
return err
Expand Down
48 changes: 48 additions & 0 deletions buildtools/cli_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"os"
"testing"

dotnetutils "github.com/jfrog/build-info-go/build/utils/dotnet"
containerutils "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/ocicontainer"
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
securityDocs "github.com/jfrog/jfrog-cli-security/cli/docs"
Expand All @@ -13,6 +14,53 @@ import (
"github.com/urfave/cli"
)

func TestGetNugetCommandName(t *testing.T) {
tests := []struct {
name string
toolchainType dotnetutils.ToolchainType
args []string
expectedCommand string
expectedArgs []string
}{
{
name: "dotnet nuget push",
toolchainType: dotnetutils.DotnetCore,
args: []string{"nuget", "push", "Package.1.0.0.nupkg", "--skip-duplicate"},
expectedCommand: "nuget push",
expectedArgs: []string{"Package.1.0.0.nupkg", "--skip-duplicate"},
},
{
name: "dotnet restore",
toolchainType: dotnetutils.DotnetCore,
args: []string{"restore", "Project.csproj"},
expectedCommand: "restore",
expectedArgs: []string{"Project.csproj"},
},
{
name: "nuget push remains one token",
toolchainType: dotnetutils.Nuget,
args: []string{"push", "Package.1.0.0.nupkg"},
expectedCommand: "push",
expectedArgs: []string{"Package.1.0.0.nupkg"},
},
{
name: "dotnet nuget non-push passthrough",
toolchainType: dotnetutils.DotnetCore,
args: []string{"nuget", "locals", "all", "--clear"},
expectedCommand: "nuget",
expectedArgs: []string{"locals", "all", "--clear"},
},
}

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
actualCommand, actualArgs := getNugetCommandName(test.args, test.toolchainType)
assert.Equal(t, test.expectedCommand, actualCommand)
assert.Equal(t, test.expectedArgs, actualArgs)
})
}
}

func TestExtractDockerBuildOptionsFromArgs(t *testing.T) {
tests := []struct {
name string
Expand Down
8 changes: 6 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ require (
github.com/buger/jsonparser v1.6.1
github.com/gocarina/gocsv v0.0.0-20260628180327-50907998929c
github.com/jfrog/archiver/v3 v3.6.4
github.com/jfrog/build-info-go v1.13.1-0.20260826064110-7c983a17241d
github.com/jfrog/build-info-go v1.13.1-0.20260828051808-4a2e4939ca36
github.com/jfrog/gofrog v1.7.6
github.com/jfrog/jfrog-cli-application v1.0.2-0.20260820134442-c8629258ff3a
github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260819070735-a590327f2489
github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260828051927-fc82a932a9e8
github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260826121657-9a951b0bb4b7
github.com/jfrog/jfrog-cli-evidence v0.11.1-0.20260824063609-79b735ec565e
github.com/jfrog/jfrog-cli-platform-services v1.10.1-0.20260618062042-6053ab368cab
Expand Down Expand Up @@ -249,3 +249,7 @@ require (
// replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.54.2-0.20251007084958-5eeaa42c31a6

// replace github.com/jfrog/jfrog-cli-artifactory => github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260818062137-18e36e626c63

// replace github.com/jfrog/build-info-go => github.com/bhanurp/build-info-go v1.10.10-0.20260820072515-bd3fffb4622c

// replace github.com/jfrog/jfrog-cli-artifactory => github.com/bhanurp/jfrog-cli-artifactory v0.1.12-0.20260820111339-146a760b0fd1
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -390,8 +390,8 @@ github.com/jellydator/ttlcache/v3 v3.4.0 h1:YS4P125qQS0tNhtL6aeYkheEaB/m8HCqdMMP
github.com/jellydator/ttlcache/v3 v3.4.0/go.mod h1:Hw9EgjymziQD3yGsQdf1FqFdpp7YjFMd4Srg5EJlgD4=
github.com/jfrog/archiver/v3 v3.6.4 h1:qHAWCLKwo3+ocHNNoWzGZ8ESl8QQk/lR3W09Pt+ROvE=
github.com/jfrog/archiver/v3 v3.6.4/go.mod h1:5V9l+Fte30Y4qe9dUOAd3yNTf8lmtVNuhKNrvI8PMhg=
github.com/jfrog/build-info-go v1.13.1-0.20260826064110-7c983a17241d h1:teonoTSr3taBNzIyx3/tlJShpxgDDc6kj9vGrgtxX0c=
github.com/jfrog/build-info-go v1.13.1-0.20260826064110-7c983a17241d/go.mod h1:CYRUCvLKfyARjoJXLWAxce1qNUxTEtbRKAARkV42vpE=
github.com/jfrog/build-info-go v1.13.1-0.20260828051808-4a2e4939ca36 h1:5pgzvDcQO9D+5Gqv7UT/RGyg08fnf1lbNSXpHCetC0s=
github.com/jfrog/build-info-go v1.13.1-0.20260828051808-4a2e4939ca36/go.mod h1:CYRUCvLKfyARjoJXLWAxce1qNUxTEtbRKAARkV42vpE=
github.com/jfrog/froggit-go v1.23.1 h1:4wmaHeuptxVINbovMaeITzVhi3+VQoc/FFIjF4axzu0=
github.com/jfrog/froggit-go v1.23.1/go.mod h1:wRDryqyp3oe+eHgME2mpnEQmO8XBECIPagFwj0nHmdI=
github.com/jfrog/go-mockhttp v0.3.1 h1:/wac8v4GMZx62viZmv4wazB5GNKs+GxawuS1u3maJH8=
Expand All @@ -402,8 +402,8 @@ github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYL
github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w=
github.com/jfrog/jfrog-cli-application v1.0.2-0.20260820134442-c8629258ff3a h1:7GhcPfi+k9oOAJdCsKWjymnqH0e7DQZ1soVhbneYnGY=
github.com/jfrog/jfrog-cli-application v1.0.2-0.20260820134442-c8629258ff3a/go.mod h1:p8yLtbmCxxQucIbLZKnWu0F+EDtj6NLXbRQCEK/nb6o=
github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260819070735-a590327f2489 h1:FxdCh8hxWuboF+q6okuJimF96aTFNSTXlIi0Blwp3Uo=
github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260819070735-a590327f2489/go.mod h1:1ACZmkzA38Si48i9f052M4BDLfti02lHUfL/f853Ny0=
github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260828051927-fc82a932a9e8 h1:8ICY8lL0m+1nreuU0QBxgB+vJyL2uBsNoE5Gthi6U50=
github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260828051927-fc82a932a9e8/go.mod h1:z0B+ehTC+fTlRHmZUTAq0c/rwV4MnsmNg0FFZ48khl8=
github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260826121657-9a951b0bb4b7 h1:IrRhHTynuXxyTWAZThrLuAxJ3m48fAsJ7aTIxGbSYpg=
github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260826121657-9a951b0bb4b7/go.mod h1:gf7aUg/G9JyltCNhwMD5RVEsFzUCKPWKXRcTXSqMYBk=
github.com/jfrog/jfrog-cli-evidence v0.11.1-0.20260824063609-79b735ec565e h1:+QYbewvK+PZKbfPpxYmy0bewhqMFtJPk/tUbCICjf8U=
Expand Down
5 changes: 3 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ import (
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
clientlog "github.com/jfrog/jfrog-client-go/utils/log"
"github.com/urfave/cli"
"golang.org/x/exp/slices"
)

const commandHelpTemplate string = `{{.HelpName}}{{if .UsageText}}
Expand Down Expand Up @@ -479,7 +478,9 @@ func getCommands() ([]cli.Command, error) {
return nil, err
}

allCommands := append(slices.Clone(cliNameSpaces), securityCmds...)
allCommands := make([]cli.Command, 0, len(cliNameSpaces))
allCommands = append(allCommands, cliNameSpaces...)
allCommands = append(allCommands, securityCmds...)
allCommands = mergeCommands(allCommands, artifactoryCmds)
allCommands = mergeCommands(allCommands, evidenceCmds)
allCommands = append(allCommands, platformServicesCmds...)
Expand Down
Loading
Loading