diff --git a/buildtools/cli.go b/buildtools/cli.go index db434ee7c..cff097855 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), @@ -1218,6 +1231,29 @@ 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) + cmdName, conanArgs := getCommandName(args) + + // Execute native conan command directly + log.Info(fmt.Sprintf("Running Conan %s.", cmdName)) + 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("conan %s failed: %w", cmdName, err) + } + + 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..cf315c04e --- /dev/null +++ b/docs/buildtools/conan/help.go @@ -0,0 +1,16 @@ +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` +} 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, },