github.com/jfrog/jfrog-cli-core/v2@v2.51.0/lifecycle/export.go (about) 1 package lifecycle 2 3 import ( 4 artUtils "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils" 5 "github.com/jfrog/jfrog-cli-core/v2/utils/config" 6 "github.com/jfrog/jfrog-cli-core/v2/utils/coreutils" 7 "github.com/jfrog/jfrog-client-go/artifactory" 8 artServices "github.com/jfrog/jfrog-client-go/artifactory/services" 9 "github.com/jfrog/jfrog-client-go/artifactory/services/utils" 10 clientConfig "github.com/jfrog/jfrog-client-go/config" 11 "github.com/jfrog/jfrog-client-go/lifecycle/services" 12 "github.com/jfrog/jfrog-client-go/utils/errorutils" 13 "github.com/jfrog/jfrog-client-go/utils/log" 14 "strings" 15 ) 16 17 type ReleaseBundleExportCommand struct { 18 releaseBundleCmd 19 modifications services.Modifications 20 downloadConfigurations artUtils.DownloadConfiguration 21 targetPath string 22 } 23 24 func (rbe *ReleaseBundleExportCommand) Run() (err error) { 25 if err = validateArtifactoryVersionSupported(rbe.serverDetails); err != nil { 26 return 27 } 28 servicesManager, rbDetails, queryParams, err := rbe.getPrerequisites() 29 if err != nil { 30 return errorutils.CheckErrorf("Failed getting prerequisites for exporting command, error: '%s'", err.Error()) 31 } 32 // Start the Export process and wait for completion 33 log.Info("Exporting Release Bundle archive...") 34 exportResponse, err := servicesManager.ExportReleaseBundle(rbDetails, rbe.modifications, queryParams) 35 if err != nil { 36 return errorutils.CheckErrorf("Failed exporting release bundle, error: '%s'", err.Error()) 37 } 38 // Download the exported bundle 39 log.Debug("Downloading the exported bundle...") 40 downloaded, failed, err := rbe.downloadReleaseBundle(exportResponse, rbe.downloadConfigurations) 41 if err != nil || failed > 0 || downloaded < 1 { 42 return 43 } 44 log.Info("Successfully Downloaded Release Bundle archive") 45 return 46 } 47 48 // Download the exported release bundle using artifactory service manager 49 func (rbe *ReleaseBundleExportCommand) downloadReleaseBundle(exportResponse services.ReleaseBundleExportedStatusResponse, downloadConfiguration artUtils.DownloadConfiguration) (downloaded int, failed int, err error) { 50 downloadParams := artServices.DownloadParams{ 51 CommonParams: &utils.CommonParams{ 52 Pattern: strings.TrimPrefix(exportResponse.RelativeUrl, "/"), 53 Target: rbe.targetPath, 54 }, 55 MinSplitSize: downloadConfiguration.MinSplitSize, 56 SplitCount: downloadConfiguration.SplitCount, 57 } 58 artifactoryServiceManager, err := createArtifactoryServiceManager(rbe.serverDetails) 59 if err != nil { 60 return 61 } 62 return artifactoryServiceManager.DownloadFiles(downloadParams) 63 64 } 65 func (rbe *ReleaseBundleExportCommand) ServerDetails() (*config.ServerDetails, error) { 66 return rbe.serverDetails, nil 67 } 68 69 func (rbe *ReleaseBundleExportCommand) CommandName() string { 70 return "rb_export" 71 } 72 73 func NewReleaseBundleExportCommand() *ReleaseBundleExportCommand { 74 return &ReleaseBundleExportCommand{} 75 } 76 func (rbe *ReleaseBundleExportCommand) SetServerDetails(serverDetails *config.ServerDetails) *ReleaseBundleExportCommand { 77 rbe.serverDetails = serverDetails 78 return rbe 79 } 80 81 func (rbe *ReleaseBundleExportCommand) SetReleaseBundleExportModifications(modifications services.Modifications) *ReleaseBundleExportCommand { 82 rbe.modifications = modifications 83 return rbe 84 } 85 func (rbe *ReleaseBundleExportCommand) SetReleaseBundleName(releaseBundleName string) *ReleaseBundleExportCommand { 86 rbe.releaseBundleName = releaseBundleName 87 return rbe 88 } 89 90 func (rbe *ReleaseBundleExportCommand) SetReleaseBundleVersion(releaseBundleVersion string) *ReleaseBundleExportCommand { 91 rbe.releaseBundleVersion = releaseBundleVersion 92 return rbe 93 } 94 95 func (rbe *ReleaseBundleExportCommand) SetProject(project string) *ReleaseBundleExportCommand { 96 rbe.rbProjectKey = project 97 return rbe 98 } 99 100 func (rbe *ReleaseBundleExportCommand) SetDownloadConfiguration(downloadConfig artUtils.DownloadConfiguration) *ReleaseBundleExportCommand { 101 rbe.downloadConfigurations = downloadConfig 102 return rbe 103 } 104 105 func (rbe *ReleaseBundleExportCommand) SetTargetPath(target string) *ReleaseBundleExportCommand { 106 if target == "" { 107 // Default value as current dir 108 target += "./" 109 } 110 rbe.targetPath = target 111 return rbe 112 } 113 114 func createArtifactoryServiceManager(artDetails *config.ServerDetails) (artifactory.ArtifactoryServicesManager, error) { 115 certsPath, err := coreutils.GetJfrogCertsDir() 116 if err != nil { 117 return nil, err 118 } 119 artAuth, err := artDetails.CreateArtAuthConfig() 120 if err != nil { 121 return nil, err 122 } 123 serviceConfig, err := clientConfig.NewConfigBuilder(). 124 SetServiceDetails(artAuth). 125 SetCertificatesPath(certsPath). 126 SetInsecureTls(artDetails.InsecureTls). 127 SetDryRun(false). 128 Build() 129 if err != nil { 130 return nil, err 131 } 132 return artifactory.New(serviceConfig) 133 }