grafana/pkg/build/version.go

67 lines
1.4 KiB
Go

package build
import (
"encoding/json"
"fmt"
"os"
"strings"
"time"
)
type PackageJSON struct {
Version string `json:"version"`
}
// Opens the package.json file in the provided directory and returns a struct that represents its contents
func OpenPackageJSON(dir string) (PackageJSON, error) {
reader, err := os.Open("package.json")
if err != nil {
return PackageJSON{}, err
}
defer logAndClose(reader)
jsonObj := PackageJSON{}
if err := json.NewDecoder(reader).Decode(&jsonObj); err != nil {
return PackageJSON{}, err
}
return jsonObj, nil
}
// LinuxPackageVersion extracts the linux package version and iteration out of the version string. The version string is likely extracted from the package JSON.
func LinuxPackageVersion(v string, buildID string) (string, string) {
var (
version = v
iteration = ""
)
// handle pre version stuff (deb / rpm does not support semver)
parts := strings.Split(v, "-")
if len(parts) > 1 {
version = parts[0]
iteration = parts[1]
}
if buildID == "" {
return version, iteration
}
// add timestamp to iteration
if buildID != "0" {
iteration = strings.Join([]string{buildID, iteration}, "")
return version, iteration
}
return version, fmt.Sprintf("%d%s", time.Now().Unix(), iteration)
}
func shortenBuildID(buildID string) string {
buildID = strings.ReplaceAll(buildID, "-", "")
if len(buildID) < 9 {
return buildID
}
return buildID[0:8]
}