github.com/jfrog/jfrog-cli-core/v2@v2.51.0/general/cisetup/utils.go (about)

     1  package cisetup
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
     8  )
     9  
    10  const (
    11  	m2pathCmd             = "MVN_PATH=`which mvn` && export M2_HOME=`readlink -f $MVN_PATH | xargs dirname | xargs dirname`"
    12  	jfrogCliRtPrefix      = "jfrog rt"
    13  	jfrogCliConfig        = "jfrog c add"
    14  	jfrogCliOldConfig     = "jfrog rt c"
    15  	jfrogCliBce           = "jfrog rt bce"
    16  	jfrogCliBag           = "jfrog rt bag"
    17  	jfrogCliBp            = "jfrog rt bp"
    18  	buildNameEnvVar       = "JFROG_CLI_BUILD_NAME"
    19  	buildNumberEnvVar     = "JFROG_CLI_BUILD_NUMBER"
    20  	buildUrlEnvVar        = "JFROG_CLI_BUILD_URL"
    21  	buildStatusEnvVar     = "JFROG_BUILD_STATUS"
    22  	runNumberEnvVar       = "$run_number"
    23  	stepUrlEnvVar         = "$step_url"
    24  	updateCommitStatusCmd = "update_commit_status"
    25  
    26  	gradleConfigCmdName  = "gradle-config"
    27  	npmConfigCmdName     = "npm-config"
    28  	mvnConfigCmdName     = "mvn-config"
    29  	serverIdResolve      = "server-id-resolve"
    30  	repoResolveReleases  = "repo-resolve-releases"
    31  	repoResolveSnapshots = "repo-resolve-snapshots"
    32  	repoResolve          = "repo-resolve"
    33  
    34  	passResult = "PASS"
    35  	failResult = "FAIL"
    36  
    37  	urlFlag   = "url"
    38  	rtUrlFlag = "artifactory-url"
    39  	userFlag  = "user"
    40  
    41  	// Replace exe (group 2) with "jfrog rt exe" while maintaining preceding (if any) and succeeding spaces.
    42  	mvnGradleRegexp             = `(^|\s)(mvn|gradle)(\s)`
    43  	mvnGradleRegexpReplacement  = `${1}jfrog rt ${2}${3}`
    44  	npmInstallRegexp            = `(^|\s)(npm i|npm install)(\s|$)`
    45  	npmInstallRegexpReplacement = `${1}jfrog rt npmi${3}`
    46  	npmCiRegexp                 = `(^|\s)(npm ci)(\s|$)`
    47  	npmCiRegexpReplacement      = `${1}jfrog rt npmci${3}`
    48  
    49  	cmdAndOperator = " &&\n"
    50  )
    51  
    52  func getFlagSyntax(flagName string) string {
    53  	return fmt.Sprintf("--%s", flagName)
    54  }
    55  
    56  func getCdToResourceCmd(gitResourceName string) string {
    57  	return fmt.Sprintf("cd $res_%s_resourcePath", gitResourceName)
    58  }
    59  
    60  func getIntDetailForCmd(intName, detail string) string {
    61  	return fmt.Sprintf("$int_%s_%s", intName, detail)
    62  }
    63  
    64  // Returns the JFrog CLI config command according to the given server details.
    65  func getJfrogCliConfigCmd(rtIntName, serverId string, useOld bool) string {
    66  	usedConfigCmd := jfrogCliConfig
    67  	usedUrlFlag := rtUrlFlag
    68  	if useOld {
    69  		usedConfigCmd = jfrogCliOldConfig
    70  		usedUrlFlag = urlFlag
    71  	}
    72  	return strings.Join([]string{
    73  		usedConfigCmd, serverId,
    74  		getFlagSyntax(usedUrlFlag), getIntDetailForCmd(rtIntName, urlFlag),
    75  		getFlagSyntax(userFlag), getIntDetailForCmd(rtIntName, userFlag),
    76  		"--enc-password=false",
    77  	}, " ")
    78  }
    79  
    80  // Returns an array of JFrog CLI config commands according to the given CiSetupData.
    81  func getTechConfigsCommands(serverId string, setM2ForMaven bool, data *CiSetupData) []string {
    82  	var configs []string
    83  	switch data.BuiltTechnology.Type {
    84  	case coreutils.Maven:
    85  		if setM2ForMaven {
    86  			configs = append(configs, m2pathCmd)
    87  		}
    88  		configs = append(configs, getMavenConfigCmd(serverId, data.BuiltTechnology.VirtualRepo))
    89  
    90  	case coreutils.Gradle:
    91  		configs = append(configs, getBuildToolConfigCmd(gradleConfigCmdName, serverId, data.BuiltTechnology.VirtualRepo))
    92  
    93  	case coreutils.Npm:
    94  		configs = append(configs, getBuildToolConfigCmd(npmConfigCmdName, serverId, data.BuiltTechnology.VirtualRepo))
    95  
    96  	}
    97  	return configs
    98  }
    99  
   100  // Converts build tools commands to run via JFrog CLI.
   101  func convertBuildCmd(data *CiSetupData) (buildCmd string, err error) {
   102  	commandsArray := []string{}
   103  	switch data.BuiltTechnology.Type {
   104  	case coreutils.Npm:
   105  		buildCmd, err = replaceCmdWithRegexp(data.BuiltTechnology.BuildCmd, npmInstallRegexp, npmInstallRegexpReplacement)
   106  		if err != nil {
   107  			return "", err
   108  		}
   109  		buildCmd, err = replaceCmdWithRegexp(buildCmd, npmCiRegexp, npmCiRegexpReplacement)
   110  		if err != nil {
   111  			return "", err
   112  		}
   113  	case coreutils.Maven, coreutils.Gradle:
   114  		buildCmd, err = replaceCmdWithRegexp(data.BuiltTechnology.BuildCmd, mvnGradleRegexp, mvnGradleRegexpReplacement)
   115  		if err != nil {
   116  			return "", err
   117  		}
   118  	}
   119  	commandsArray = append(commandsArray, buildCmd)
   120  	return strings.Join(commandsArray, cmdAndOperator), nil
   121  }
   122  
   123  // Returns Maven's config command according to given server and repo information.
   124  func getMavenConfigCmd(serverId, repo string) string {
   125  	return strings.Join([]string{
   126  		jfrogCliRtPrefix, mvnConfigCmdName,
   127  		getFlagSyntax(serverIdResolve), serverId,
   128  		getFlagSyntax(repoResolveReleases), repo,
   129  		getFlagSyntax(repoResolveSnapshots), repo,
   130  	}, " ")
   131  }
   132  
   133  // Returns build tool's (except Maven) config command according to given server and repo information.
   134  func getBuildToolConfigCmd(configCmd, serverId, repo string) string {
   135  	return strings.Join([]string{
   136  		jfrogCliRtPrefix, configCmd,
   137  		getFlagSyntax(serverIdResolve), serverId,
   138  		getFlagSyntax(repoResolve), repo,
   139  	}, " ")
   140  }
   141  
   142  // Returns a string of environment variable export command.
   143  // key - The variable name.
   144  // value - the value to be set.
   145  func getExportCmd(key, value string) string {
   146  	return fmt.Sprintf("export %s=%s", key, value)
   147  }