mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
108 lines
3.1 KiB
Go
108 lines
3.1 KiB
Go
|
package abaputils
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"path/filepath"
|
||
|
|
||
|
"github.com/ghodss/yaml"
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
// AddonDescriptor contains fields about the addonProduct
|
||
|
type AddonDescriptor struct {
|
||
|
AddonProduct string `json:"addonProduct"`
|
||
|
AddonVersionYAML string `json:"addonVersion"`
|
||
|
AddonVersion string `json:"addonVersionAAK"`
|
||
|
AddonUniqueID string `json:"addonUniqueID"`
|
||
|
CustomerID interface{} `json:"customerID"`
|
||
|
AddonSpsLevel string
|
||
|
AddonPatchLevel string
|
||
|
TargetVectorID string
|
||
|
Repositories []Repository `json:"repositories"`
|
||
|
}
|
||
|
|
||
|
// Repository contains fields for the repository/component version
|
||
|
type Repository struct {
|
||
|
Name string `json:"name"`
|
||
|
Tag string `json:"tag"`
|
||
|
Branch string `json:"branch"`
|
||
|
VersionYAML string `json:"version"`
|
||
|
Version string `json:"versionAAK"`
|
||
|
PackageName string
|
||
|
PackageType string
|
||
|
SpLevel string
|
||
|
PatchLevel string
|
||
|
PredecessorCommitID string
|
||
|
Status string
|
||
|
Namespace string
|
||
|
SarXMLFilePath string
|
||
|
}
|
||
|
|
||
|
// ReadAddonDescriptorType is the type for ReadAddonDescriptor for mocking
|
||
|
type ReadAddonDescriptorType func(FileName string) (AddonDescriptor, error)
|
||
|
|
||
|
// ReadAddonDescriptor parses AddonDescriptor YAML file
|
||
|
func ReadAddonDescriptor(FileName string) (AddonDescriptor, error) {
|
||
|
var addonDescriptor AddonDescriptor
|
||
|
err := addonDescriptor.initFromYmlFile(FileName)
|
||
|
return addonDescriptor, err
|
||
|
}
|
||
|
|
||
|
// ConstructAddonDescriptorFromJSON : Create new AddonDescriptor filled with data from JSON
|
||
|
func ConstructAddonDescriptorFromJSON(JSON []byte) (AddonDescriptor, error) {
|
||
|
var addonDescriptor AddonDescriptor
|
||
|
err := addonDescriptor.initFromJSON(JSON)
|
||
|
return addonDescriptor, err
|
||
|
}
|
||
|
|
||
|
// initFromYmlFile : Reads from file
|
||
|
func (me *AddonDescriptor) initFromYmlFile(FileName string) error {
|
||
|
filelocation, err := filepath.Glob(FileName)
|
||
|
if err != nil || len(filelocation) != 1 {
|
||
|
return errors.New(fmt.Sprintf("Could not find %v", FileName))
|
||
|
}
|
||
|
|
||
|
filename, err := filepath.Abs(filelocation[0])
|
||
|
if err != nil {
|
||
|
return errors.New(fmt.Sprintf("Could not get path of %v", FileName))
|
||
|
}
|
||
|
|
||
|
var yamlBytes []byte
|
||
|
yamlBytes, err = ioutil.ReadFile(filename)
|
||
|
if err != nil {
|
||
|
return errors.New(fmt.Sprintf("Could not read %v", FileName))
|
||
|
}
|
||
|
|
||
|
var jsonBytes []byte
|
||
|
jsonBytes, err = yaml.YAMLToJSON(yamlBytes)
|
||
|
if err != nil {
|
||
|
return errors.New(fmt.Sprintf("Could not parse %v", FileName))
|
||
|
}
|
||
|
|
||
|
err = me.initFromJSON(jsonBytes)
|
||
|
if err != nil {
|
||
|
return errors.New(fmt.Sprintf("Could not unmarshal %v", FileName))
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// initFromJSON : Init from json
|
||
|
func (me *AddonDescriptor) initFromJSON(JSON []byte) error {
|
||
|
return json.Unmarshal(JSON, me)
|
||
|
}
|
||
|
|
||
|
// AsJSON : dito
|
||
|
func (me *AddonDescriptor) AsJSON() []byte {
|
||
|
//hopefully no errors should happen here or they are covered by the users unit tests
|
||
|
jsonBytes, _ := json.Marshal(me)
|
||
|
return jsonBytes
|
||
|
}
|
||
|
|
||
|
// SetRepositories : dito
|
||
|
func (me *AddonDescriptor) SetRepositories(Repositories []Repository) {
|
||
|
me.Repositories = Repositories
|
||
|
}
|