From 30194e03757844c122ad22bbf78d7ade021e6b17 Mon Sep 17 00:00:00 2001 From: Reshmi Date: Fri, 21 Nov 2025 15:43:11 +0530 Subject: [PATCH 1/4] add support for native conan --- buildtools/cli.go | 60 +++++++++++++++++++++++++++++++++ docs/buildtools/conan/help.go | 17 ++++++++++ utils/cliutils/commandsflags.go | 4 +++ 3 files changed, 81 insertions(+) create mode 100644 docs/buildtools/conan/help.go diff --git a/buildtools/cli.go b/buildtools/cli.go index 082af5afb..c91339969 100644 --- a/buildtools/cli.go +++ b/buildtools/cli.go @@ -42,6 +42,7 @@ import ( terraformdocs "github.com/jfrog/jfrog-cli/docs/artifactory/terraform" "github.com/jfrog/jfrog-cli/docs/artifactory/terraformconfig" twinedocs "github.com/jfrog/jfrog-cli/docs/artifactory/twine" + "github.com/jfrog/jfrog-cli/docs/buildtools/conan" "github.com/jfrog/jfrog-cli/docs/buildtools/docker" dotnetdocs "github.com/jfrog/jfrog-cli/docs/buildtools/dotnet" "github.com/jfrog/jfrog-cli/docs/buildtools/dotnetconfig" @@ -336,6 +337,18 @@ func GetCommands() []cli.Command { Category: buildToolsCategory, Action: PoetryCmd, }, + { + Name: "conan", + Flags: cliutils.GetCommandFlags(cliutils.Conan), + Usage: conan.GetDescription(), + HelpName: corecommon.CreateUsage("conan", conan.GetDescription(), conan.Usage), + UsageText: conan.GetArguments(), + ArgsUsage: common.CreateEnvVars(), + SkipFlagParsing: true, + BashComplete: corecommon.CreateBashCompletionFunc(), + Category: buildToolsCategory, + Action: ConanCmd, + }, { Name: "ruby-config", Flags: cliutils.GetCommandFlags(cliutils.RubyConfig), @@ -1205,6 +1218,53 @@ func PoetryCmd(c *cli.Context) error { return pythonCmd(c, project.Poetry) } +func ConanCmd(c *cli.Context) error { + if show, err := cliutils.ShowCmdHelpIfNeeded(c, c.Args()); show || err != nil { + return err + } + if c.NArg() < 1 { + return cliutils.WrongNumberOfArgumentsHandler(c) + } + + args := cliutils.ExtractCommand(c) + filteredArgs, buildConfiguration, err := build.ExtractBuildDetailsFromArgs(args) + if err != nil { + return err + } + cmdName, conanArgs := getCommandName(filteredArgs) + + // Execute native conan command directly + log.Info(fmt.Sprintf("Running Conan %s.", cmdName)) + conanCmd := exec.Command("poetry", append([]string{cmdName}, conanArgs...)...) + conanCmd.Stdout = os.Stdout + conanCmd.Stderr = os.Stderr + if err := conanCmd.Run(); err != nil { + return fmt.Errorf("conanArgs %s failed: %w", cmdName, err) + } + + // Collect build info if build parameters provided + if buildConfiguration != nil { + buildName, err := buildConfiguration.GetBuildName() + if err == nil && buildName != "" { + workingDir, err := os.Getwd() + if err != nil { + log.Warn("Failed to get working directory, skipping build info collection: " + err.Error()) + } else if err := buildinfo.GetPoetryBuildInfo(workingDir, buildConfiguration); err != nil { + log.Warn("Failed to collect Conan build info: " + err.Error()) + } else { + buildNumber, err := buildConfiguration.GetBuildNumber() + if err != nil { + log.Warn("Failed to get build number: " + err.Error()) + } else { + log.Info(fmt.Sprintf("Conan build info collected. Use 'jf rt bp %s %s' to publish it to Artifactory.", buildName, buildNumber)) + } + } + } + } + + return nil +} + func pythonCmd(c *cli.Context, projectType project.ProjectType) error { if show, err := cliutils.ShowCmdHelpIfNeeded(c, c.Args()); show || err != nil { return err diff --git a/docs/buildtools/conan/help.go b/docs/buildtools/conan/help.go new file mode 100644 index 000000000..bc8db64a0 --- /dev/null +++ b/docs/buildtools/conan/help.go @@ -0,0 +1,17 @@ +package conan + +var Usage = []string{"conan [command options]"} + +func GetDescription() string { + return "Run native conan command." +} + +func GetArguments() string { + return ` conan sub-command + Arguments and options for the conan command. + + Examples: + - jf conan install . --build=missing + - jf conan create . --name=hello --version=1.0 + - jf conan art:build-info create create.json my_build 1 develop --server=myartifactory` +} diff --git a/utils/cliutils/commandsflags.go b/utils/cliutils/commandsflags.go index 2adc3bf69..9838cca49 100644 --- a/utils/cliutils/commandsflags.go +++ b/utils/cliutils/commandsflags.go @@ -77,6 +77,7 @@ const ( PoetryConfig = "poetry-config" Poetry = "poetry" RubyConfig = "ruby-config" + Conan = "conan" Ping = "ping" RtCurl = "rt-curl" TemplateConsumer = "template-consumer" @@ -1967,6 +1968,9 @@ var commandFlags = map[string][]string{ RubyConfig: { global, serverIdResolve, serverIdDeploy, repoResolve, repoDeploy, }, + Conan: { + BuildName, BuildNumber, module, Project, + }, Stats: { xrOutput, accessToken, serverId, }, From 155b0dc83885354d79ad6d34ec79161e3f904b58 Mon Sep 17 00:00:00 2001 From: Reshmi Date: Tue, 25 Nov 2025 16:04:41 +0530 Subject: [PATCH 2/4] remove the build info collection logic --- buildtools/cli.go | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/buildtools/cli.go b/buildtools/cli.go index c91339969..a3aa86cab 100644 --- a/buildtools/cli.go +++ b/buildtools/cli.go @@ -1227,41 +1227,17 @@ func ConanCmd(c *cli.Context) error { } args := cliutils.ExtractCommand(c) - filteredArgs, buildConfiguration, err := build.ExtractBuildDetailsFromArgs(args) - if err != nil { - return err - } - cmdName, conanArgs := getCommandName(filteredArgs) + cmdName, conanArgs := getCommandName(args) // Execute native conan command directly log.Info(fmt.Sprintf("Running Conan %s.", cmdName)) - conanCmd := exec.Command("poetry", append([]string{cmdName}, conanArgs...)...) + conanCmd := exec.Command("conan", append([]string{cmdName}, conanArgs...)...) conanCmd.Stdout = os.Stdout conanCmd.Stderr = os.Stderr if err := conanCmd.Run(); err != nil { return fmt.Errorf("conanArgs %s failed: %w", cmdName, err) } - // Collect build info if build parameters provided - if buildConfiguration != nil { - buildName, err := buildConfiguration.GetBuildName() - if err == nil && buildName != "" { - workingDir, err := os.Getwd() - if err != nil { - log.Warn("Failed to get working directory, skipping build info collection: " + err.Error()) - } else if err := buildinfo.GetPoetryBuildInfo(workingDir, buildConfiguration); err != nil { - log.Warn("Failed to collect Conan build info: " + err.Error()) - } else { - buildNumber, err := buildConfiguration.GetBuildNumber() - if err != nil { - log.Warn("Failed to get build number: " + err.Error()) - } else { - log.Info(fmt.Sprintf("Conan build info collected. Use 'jf rt bp %s %s' to publish it to Artifactory.", buildName, buildNumber)) - } - } - } - } - return nil } From a3816863f653a3ce5bc206528127acff829a0a60 Mon Sep 17 00:00:00 2001 From: Reshmi Date: Wed, 26 Nov 2025 10:28:57 +0530 Subject: [PATCH 3/4] use conan instead of conanargs --- buildtools/cli.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildtools/cli.go b/buildtools/cli.go index a3aa86cab..e8789ef97 100644 --- a/buildtools/cli.go +++ b/buildtools/cli.go @@ -1235,7 +1235,7 @@ func ConanCmd(c *cli.Context) error { conanCmd.Stdout = os.Stdout conanCmd.Stderr = os.Stderr if err := conanCmd.Run(); err != nil { - return fmt.Errorf("conanArgs %s failed: %w", cmdName, err) + return fmt.Errorf("conan %s failed: %w", cmdName, err) } return nil From 85b799306f2ce86ac2eaa924d36e01e8462d4404 Mon Sep 17 00:00:00 2001 From: Reshmi Date: Wed, 26 Nov 2025 11:21:00 +0530 Subject: [PATCH 4/4] removed extensionc command from conan help doc --- docs/buildtools/conan/help.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/buildtools/conan/help.go b/docs/buildtools/conan/help.go index bc8db64a0..cf315c04e 100644 --- a/docs/buildtools/conan/help.go +++ b/docs/buildtools/conan/help.go @@ -12,6 +12,5 @@ func GetArguments() string { Examples: - jf conan install . --build=missing - - jf conan create . --name=hello --version=1.0 - - jf conan art:build-info create create.json my_build 1 develop --server=myartifactory` + - jf conan create . --name=hello --version=1.0` }