github.com/jfrog/jfrog-cli-core/v2@v2.52.0/artifactory/commands/golang/gopublish.go (about) 1 package golang 2 3 import ( 4 "os/exec" 5 6 "github.com/jfrog/build-info-go/build" 7 commandutils "github.com/jfrog/jfrog-cli-core/v2/artifactory/commands/utils" 8 "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils" 9 buildUtils "github.com/jfrog/jfrog-cli-core/v2/common/build" 10 "github.com/jfrog/jfrog-cli-core/v2/common/project" 11 goutils "github.com/jfrog/jfrog-cli-core/v2/utils/golang" 12 clientutils "github.com/jfrog/jfrog-client-go/utils" 13 "github.com/jfrog/jfrog-client-go/utils/errorutils" 14 ) 15 16 const minSupportedArtifactoryVersion = "6.2.0" 17 18 type GoPublishCommandArgs struct { 19 buildConfiguration *buildUtils.BuildConfiguration 20 version string 21 detailedSummary bool 22 excludedPatterns []string 23 result *commandutils.Result 24 project.RepositoryConfig 25 } 26 27 type GoPublishCommand struct { 28 configFilePath string 29 internalCommandName string 30 *GoPublishCommandArgs 31 } 32 33 func NewGoPublishCommand() *GoPublishCommand { 34 return &GoPublishCommand{GoPublishCommandArgs: &GoPublishCommandArgs{result: new(commandutils.Result)}, internalCommandName: "rt_go_publish"} 35 } 36 37 func (gpc *GoPublishCommand) CommandName() string { 38 return gpc.internalCommandName 39 } 40 41 func (gpc *GoPublishCommand) SetConfigFilePath(configFilePath string) *GoPublishCommand { 42 gpc.configFilePath = configFilePath 43 return gpc 44 } 45 46 func (gpc *GoPublishCommand) GetExcludedPatterns() []string { 47 return gpc.excludedPatterns 48 } 49 50 func (gpc *GoPublishCommandArgs) SetExcludedPatterns(excludedPatterns []string) *GoPublishCommandArgs { 51 gpc.excludedPatterns = excludedPatterns 52 return gpc 53 } 54 55 func (gpc *GoPublishCommand) Run() error { 56 err := validatePrerequisites() 57 if err != nil { 58 return err 59 } 60 61 err = goutils.LogGoVersion() 62 if err != nil { 63 return err 64 } 65 // Read config file. 66 vConfig, err := project.ReadConfigFile(gpc.configFilePath, project.YAML) 67 if err != nil { 68 return err 69 } 70 repoConfig, err := project.GetRepoConfigByPrefix(gpc.configFilePath, project.ProjectConfigDeployerPrefix, vConfig) 71 if err != nil { 72 return err 73 } 74 gpc.RepositoryConfig = *repoConfig 75 serverDetails, err := gpc.ServerDetails() 76 if errorutils.CheckError(err) != nil { 77 return err 78 } 79 serviceManager, err := utils.CreateServiceManager(serverDetails, -1, 0, false) 80 if err != nil { 81 return err 82 } 83 artifactoryVersion, err := serviceManager.GetConfig().GetServiceDetails().GetVersion() 84 if err != nil { 85 return err 86 } 87 err = clientutils.ValidateMinimumVersion(clientutils.Artifactory, artifactoryVersion, minSupportedArtifactoryVersion) 88 if err != nil { 89 return err 90 } 91 var goBuild *build.Build 92 var buildName, buildNumber, project string 93 collectBuildInfo, err := gpc.buildConfiguration.IsCollectBuildInfo() 94 if err != nil { 95 return err 96 } 97 if collectBuildInfo { 98 buildName, err = gpc.buildConfiguration.GetBuildName() 99 if err != nil { 100 return err 101 } 102 buildNumber, err = gpc.buildConfiguration.GetBuildNumber() 103 if err != nil { 104 return err 105 } 106 project = gpc.buildConfiguration.GetProject() 107 buildInfoService := buildUtils.CreateBuildInfoService() 108 goBuild, err = buildInfoService.GetOrCreateBuildWithProject(buildName, buildNumber, project) 109 if err != nil { 110 return errorutils.CheckError(err) 111 } 112 } 113 114 // Publish the package to Artifactory. 115 summary, artifacts, err := publishPackage(gpc.version, gpc.TargetRepo(), buildName, buildNumber, project, gpc.GetExcludedPatterns(), serviceManager) 116 if err != nil { 117 return err 118 } 119 result := gpc.Result() 120 result.SetSuccessCount(summary.TotalSucceeded) 121 result.SetFailCount(summary.TotalFailed) 122 if gpc.detailedSummary { 123 result.SetReader(summary.TransferDetailsReader) 124 } 125 // Publish the build-info to Artifactory 126 if collectBuildInfo { 127 goModule, err := goBuild.AddGoModule("") 128 if err != nil { 129 return errorutils.CheckError(err) 130 } 131 if gpc.buildConfiguration.GetModule() != "" { 132 goModule.SetName(gpc.buildConfiguration.GetModule()) 133 } 134 err = goModule.AddArtifacts(artifacts...) 135 if err != nil { 136 return errorutils.CheckError(err) 137 } 138 } 139 140 return err 141 } 142 143 func (gpc *GoPublishCommandArgs) Result() *commandutils.Result { 144 return gpc.result 145 } 146 147 func (gpc *GoPublishCommandArgs) SetVersion(version string) *GoPublishCommandArgs { 148 gpc.version = version 149 return gpc 150 } 151 152 func (gpc *GoPublishCommandArgs) SetBuildConfiguration(buildConfiguration *buildUtils.BuildConfiguration) *GoPublishCommandArgs { 153 gpc.buildConfiguration = buildConfiguration 154 return gpc 155 } 156 157 func (gpc *GoPublishCommandArgs) SetDetailedSummary(detailedSummary bool) *GoPublishCommandArgs { 158 gpc.detailedSummary = detailedSummary 159 return gpc 160 } 161 162 func (gpc *GoPublishCommandArgs) IsDetailedSummary() bool { 163 return gpc.detailedSummary 164 } 165 166 func validatePrerequisites() error { 167 _, err := exec.LookPath("go") 168 if err != nil { 169 return errorutils.CheckError(err) 170 } 171 return nil 172 }