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  }