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  }