1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/pkg/versioning/helm.go
Oliver Nocon 7ec512cb9f
feat(artifactPrepareVersion): helm & propagate version (#3627)
* feat(artifactPrepareVersion): helm & propagate version

* chore: small refactoring

* chore: fix linting issue

* fix version persistence
2022-03-15 09:08:24 +01:00

97 lines
2.3 KiB
Go

package versioning
import (
"fmt"
"github.com/ghodss/yaml"
"helm.sh/helm/v3/pkg/chart"
)
// JSONfile defines an artifact using a json file for versioning
type HelmChart struct {
path string
metadata chart.Metadata
utils Utils
updateAppVersion bool
}
func (h *HelmChart) init() error {
if h.utils == nil {
return fmt.Errorf("no file utils provided")
}
if len(h.path) == 0 {
charts, err := h.utils.Glob("**/Chart.yaml")
if len(charts) == 0 || err != nil {
return fmt.Errorf("failed to find a helm chart file")
}
// use first chart which can be found
h.path = charts[0]
}
if len(h.metadata.Version) == 0 {
content, err := h.utils.FileRead(h.path)
if err != nil {
return fmt.Errorf("failed to read file '%v': %w", h.path, err)
}
err = yaml.Unmarshal(content, &h.metadata)
if err != nil {
return fmt.Errorf("helm chart content invalid '%v': %w", h.path, err)
}
}
return nil
}
// VersioningScheme returns the relevant versioning scheme
func (h *HelmChart) VersioningScheme() string {
return "semver2"
}
// GetVersion returns the current version of the artifact with a JSON-based build descriptor
func (h *HelmChart) GetVersion() (string, error) {
if err := h.init(); err != nil {
return "", fmt.Errorf("failed to init helm chart versioning: %w", err)
}
return h.metadata.Version, nil
}
// SetVersion updates the version of the artifact with a JSON-based build descriptor
func (h *HelmChart) SetVersion(version string) error {
if err := h.init(); err != nil {
return fmt.Errorf("failed to init helm chart versioning: %w", err)
}
h.metadata.Version = version
if h.updateAppVersion {
h.metadata.AppVersion = version
}
content, err := yaml.Marshal(h.metadata)
if err != nil {
return fmt.Errorf("failed to create chart content for '%v': %w", h.path, err)
}
err = h.utils.FileWrite(h.path, content, 666)
if err != nil {
return fmt.Errorf("failed to write file '%v': %w", h.path, err)
}
return nil
}
// GetCoordinates returns the coordinates
func (h *HelmChart) GetCoordinates() (Coordinates, error) {
result := Coordinates{}
projectVersion, err := h.GetVersion()
if err != nil {
return result, err
}
result.ArtifactID = h.metadata.Name
result.Version = projectVersion
result.GroupID = h.metadata.Home
return result, nil
}