github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/abap/aakaas/productVersion.go (about) 1 package aakaas 2 3 import ( 4 "encoding/json" 5 "net/url" 6 7 abapbuild "github.com/SAP/jenkins-library/pkg/abap/build" 8 "github.com/SAP/jenkins-library/pkg/abaputils" 9 "github.com/SAP/jenkins-library/pkg/log" 10 "github.com/pkg/errors" 11 ) 12 13 const pvQueryURL string = "/odata/aas_ocs_package/xSSDAxC_Product_Version" 14 const pvValidateURL string = "/odata/aas_ocs_package/ValidateProductVersion" 15 16 type ProductVersion struct { 17 versionable 18 } 19 20 func (p *ProductVersion) ConstructProductversion(desc abaputils.AddonDescriptor, conn abapbuild.Connector) error { 21 if err := p.constructVersionable(desc.AddonProduct, desc.AddonVersionYAML, conn, pvQueryURL); err != nil { 22 return err 23 } 24 if err := p.resolveNext(statusFilterPV); err != nil { 25 return err 26 } 27 return nil 28 } 29 30 func (p *ProductVersion) CopyVersionFieldsToDescriptor(desc *abaputils.AddonDescriptor) { 31 desc.AddonVersion = p.TechRelease 32 desc.AddonSpsLevel = p.TechSpLevel 33 desc.AddonPatchLevel = p.TechPatchLevel 34 desc.AddonVersionYAML = p.Version 35 } 36 37 func (p *ProductVersion) ValidateAndResolveVersionFields() error { 38 log.Entry().Infof("Validate product '%s' version '%s' and resolve version", p.Name, p.Version) 39 40 values := url.Values{} 41 values.Set("Name", "'"+p.Name+"'") 42 values.Set("Version", "'"+p.Version+"'") 43 requestUrl := pvValidateURL + "?" + values.Encode() 44 45 body, err := p.connector.Get(requestUrl) 46 if err != nil { 47 return err 48 } 49 var response jsonProductVersionValidationResponse 50 if err := json.Unmarshal(body, &response); err != nil { 51 return errors.Wrap(err, "Unexpected AAKaaS response for Validate Product Version: "+string(body)) 52 } 53 p.Name = response.Wrapper.Name 54 p.TechRelease = response.Wrapper.TechRelease 55 p.TechSpLevel = response.Wrapper.TechSpLevel 56 p.TechPatchLevel = response.Wrapper.TechPatchLevel 57 log.Entry().Infof("Resolved version %s, spslevel %s, patchlevel %s", p.TechRelease, p.TechSpLevel, p.TechPatchLevel) 58 return nil 59 } 60 61 type jsonProductVersionValidationResponse struct { 62 Wrapper struct { 63 Name string `json:"Name"` 64 TechRelease string `json:"Version"` 65 TechSpLevel string `json:"SpsLevel"` 66 TechPatchLevel string `json:"PatchLevel"` 67 } `json:"d"` 68 }