github.com/jfrog/jfrog-cli-core/v2@v2.51.0/lifecycle/createfrombundles.go (about) 1 package lifecycle 2 3 import ( 4 "encoding/json" 5 "github.com/jfrog/jfrog-cli-core/v2/common/spec" 6 "github.com/jfrog/jfrog-client-go/artifactory/services/utils" 7 "github.com/jfrog/jfrog-client-go/lifecycle" 8 "github.com/jfrog/jfrog-client-go/lifecycle/services" 9 "github.com/jfrog/jfrog-client-go/utils/errorutils" 10 "github.com/jfrog/jfrog-client-go/utils/io/fileutils" 11 ) 12 13 func (rbc *ReleaseBundleCreateCommand) createFromReleaseBundles(servicesManager *lifecycle.LifecycleServicesManager, 14 rbDetails services.ReleaseBundleDetails, queryParams services.CommonOptionalQueryParams) error { 15 16 var releaseBundlesSource services.CreateFromReleaseBundlesSource 17 var err error 18 if rbc.releaseBundlesSpecPath != "" { 19 releaseBundlesSource, err = rbc.getReleaseBundlesSourceFromBundlesSpec() 20 } else { 21 releaseBundlesSource, err = rbc.convertSpecToReleaseBundlesSource(rbc.spec.Files) 22 } 23 if err != nil { 24 return err 25 } 26 27 if len(releaseBundlesSource.ReleaseBundles) == 0 { 28 return errorutils.CheckErrorf("at least one release bundle is expected in order to create a release bundle from release bundles") 29 } 30 31 return servicesManager.CreateReleaseBundleFromBundles(rbDetails, queryParams, rbc.signingKeyName, releaseBundlesSource) 32 } 33 34 func (rbc *ReleaseBundleCreateCommand) convertToReleaseBundlesSource(bundles CreateFromReleaseBundlesSpec) services.CreateFromReleaseBundlesSource { 35 releaseBundlesSource := services.CreateFromReleaseBundlesSource{} 36 for _, rb := range bundles.ReleaseBundles { 37 rbSource := services.ReleaseBundleSource{ 38 ReleaseBundleName: rb.Name, 39 ReleaseBundleVersion: rb.Version, 40 ProjectKey: rb.Project, 41 } 42 releaseBundlesSource.ReleaseBundles = append(releaseBundlesSource.ReleaseBundles, rbSource) 43 } 44 return releaseBundlesSource 45 } 46 47 func (rbc *ReleaseBundleCreateCommand) convertSpecToReleaseBundlesSource(files []spec.File) (services.CreateFromReleaseBundlesSource, error) { 48 releaseBundlesSource := services.CreateFromReleaseBundlesSource{} 49 for _, file := range files { 50 name, version, err := utils.ParseNameAndVersion(file.Bundle, false) 51 if err != nil { 52 return releaseBundlesSource, err 53 } 54 if name == "" || version == "" { 55 return releaseBundlesSource, errorutils.CheckErrorf( 56 "invalid release bundle source was provided. Both name and version are mandatory. Provided name: '%s', version: '%s'", name, version) 57 } 58 rbSource := services.ReleaseBundleSource{ 59 ReleaseBundleName: name, 60 ReleaseBundleVersion: version, 61 ProjectKey: file.Project, 62 } 63 releaseBundlesSource.ReleaseBundles = append(releaseBundlesSource.ReleaseBundles, rbSource) 64 } 65 return releaseBundlesSource, nil 66 } 67 68 func (rbc *ReleaseBundleCreateCommand) getReleaseBundlesSourceFromBundlesSpec() (releaseBundlesSource services.CreateFromReleaseBundlesSource, err error) { 69 releaseBundles := CreateFromReleaseBundlesSpec{} 70 content, err := fileutils.ReadFile(rbc.releaseBundlesSpecPath) 71 if err != nil { 72 return 73 } 74 if err = json.Unmarshal(content, &releaseBundles); errorutils.CheckError(err) != nil { 75 return 76 } 77 78 return rbc.convertToReleaseBundlesSource(releaseBundles), nil 79 } 80 81 type CreateFromReleaseBundlesSpec struct { 82 ReleaseBundles []SourceReleaseBundleSpec `json:"releaseBundles,omitempty"` 83 } 84 85 type SourceReleaseBundleSpec struct { 86 Name string `json:"name,omitempty"` 87 Version string `json:"version,omitempty"` 88 Project string `json:"project,omitempty"` 89 }