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  }