CI: Call for Grafana version on demand - remove need for version.json (#54638)
* Remove need for version.json * Fix lint * log.Info -> fmt.Print * Add back tests * Remove non-used file * Fix lint * Update grabpl version to v3.0.6
This commit is contained in:
@@ -3,32 +3,21 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/urfave/cli/v2"
|
||||
|
||||
"github.com/grafana/grafana/pkg/build/compilers"
|
||||
"github.com/grafana/grafana/pkg/build/config"
|
||||
"github.com/grafana/grafana/pkg/build/errutil"
|
||||
"github.com/grafana/grafana/pkg/build/grafana"
|
||||
"github.com/grafana/grafana/pkg/build/syncutil"
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
func BuildBackend(ctx *cli.Context) error {
|
||||
metadata, err := config.GetMetadata(filepath.Join("dist", "version.json"))
|
||||
metadata, err := GenerateMetadata(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var version string
|
||||
|
||||
// ./ci build-backend v1.0.0
|
||||
if ctx.NArg() == 1 {
|
||||
version = strings.TrimPrefix(ctx.Args().Get(0), "v")
|
||||
} else {
|
||||
version = metadata.GrafanaVersion
|
||||
}
|
||||
version := metadata.GrafanaVersion
|
||||
|
||||
var (
|
||||
edition = config.Edition(ctx.String("edition"))
|
||||
|
||||
@@ -2,7 +2,6 @@ package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/grafana/grafana/pkg/build/config"
|
||||
"github.com/grafana/grafana/pkg/build/docker"
|
||||
@@ -15,7 +14,7 @@ func BuildDocker(c *cli.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
metadata, err := config.GetMetadata(filepath.Join("dist", "version.json"))
|
||||
metadata, err := GenerateMetadata(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana/pkg/build/errutil"
|
||||
"github.com/grafana/grafana/pkg/build/frontend"
|
||||
@@ -11,10 +10,11 @@ import (
|
||||
)
|
||||
|
||||
func BuildFrontend(c *cli.Context) error {
|
||||
version := ""
|
||||
if c.NArg() == 1 {
|
||||
version = strings.TrimPrefix(c.Args().Get(0), "v")
|
||||
metadata, err := GenerateMetadata(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
version := metadata.GrafanaVersion
|
||||
|
||||
cfg, mode, err := frontend.GetConfig(c, version)
|
||||
if err != nil {
|
||||
|
||||
@@ -3,7 +3,6 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/grafana/grafana/pkg/build/config"
|
||||
"github.com/grafana/grafana/pkg/build/errutil"
|
||||
@@ -18,7 +17,7 @@ func BuildInternalPlugins(c *cli.Context) error {
|
||||
}
|
||||
|
||||
const grafanaDir = "."
|
||||
metadata, err := config.GetMetadata(filepath.Join("dist", "version.json"))
|
||||
metadata, err := GenerateMetadata(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana/pkg/build/config"
|
||||
@@ -12,25 +10,13 @@ import (
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
func GenerateVersions(c *cli.Context) error {
|
||||
func GenerateMetadata(c *cli.Context) (config.Metadata, error) {
|
||||
var metadata config.Metadata
|
||||
version := ""
|
||||
if c.NArg() == 1 {
|
||||
version = strings.TrimPrefix(c.Args().Get(0), "v")
|
||||
} else {
|
||||
buildID, ok := os.LookupEnv("DRONE_BUILD_NUMBER")
|
||||
if !ok {
|
||||
return fmt.Errorf("unable to get DRONE_BUILD_NUMBER environmental variable")
|
||||
}
|
||||
var err error
|
||||
version, err = config.GetGrafanaVersion(buildID, ".")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
event, err := droneutil.GetDroneEventFromEnv()
|
||||
if err != nil {
|
||||
return err
|
||||
return config.Metadata{}, err
|
||||
}
|
||||
|
||||
var releaseMode config.ReleaseMode
|
||||
@@ -40,13 +26,13 @@ func GenerateVersions(c *cli.Context) error {
|
||||
case config.Push:
|
||||
mode, err := config.CheckDroneTargetBranch()
|
||||
if err != nil {
|
||||
return err
|
||||
return config.Metadata{}, err
|
||||
}
|
||||
releaseMode = config.ReleaseMode{Mode: mode}
|
||||
case config.Custom:
|
||||
mode, err := config.CheckDroneTargetBranch()
|
||||
if err != nil {
|
||||
return err
|
||||
return config.Metadata{}, err
|
||||
}
|
||||
// if there is a custom event targeting the main branch, that's an enterprise downstream build
|
||||
if mode == config.MainBranch {
|
||||
@@ -55,16 +41,28 @@ func GenerateVersions(c *cli.Context) error {
|
||||
releaseMode = config.ReleaseMode{Mode: mode}
|
||||
}
|
||||
case config.Tag, config.Promote:
|
||||
tag, ok := os.LookupEnv("DRONE_TAG")
|
||||
if !ok || tag == "" {
|
||||
return config.Metadata{}, err
|
||||
}
|
||||
version = strings.TrimPrefix(tag, "v")
|
||||
mode, err := config.CheckSemverSuffix()
|
||||
if err != nil {
|
||||
return err
|
||||
return config.Metadata{}, err
|
||||
}
|
||||
releaseMode = mode
|
||||
}
|
||||
|
||||
if version == "" {
|
||||
version, err = generateVersionFromBuildID()
|
||||
if err != nil {
|
||||
return config.Metadata{}, err
|
||||
}
|
||||
}
|
||||
|
||||
currentCommit, err := config.GetDroneCommit()
|
||||
if err != nil {
|
||||
return err
|
||||
return config.Metadata{}, err
|
||||
}
|
||||
metadata = config.Metadata{
|
||||
GrafanaVersion: version,
|
||||
@@ -75,25 +73,18 @@ func GenerateVersions(c *cli.Context) error {
|
||||
|
||||
fmt.Printf("building Grafana version: %s, release mode: %+v", metadata.GrafanaVersion, metadata.ReleaseMode)
|
||||
|
||||
jsonMetadata, err := json.Marshal(&metadata)
|
||||
return metadata, nil
|
||||
}
|
||||
|
||||
func generateVersionFromBuildID() (string, error) {
|
||||
buildID, ok := os.LookupEnv("DRONE_BUILD_NUMBER")
|
||||
if !ok {
|
||||
return "", fmt.Errorf("unable to get DRONE_BUILD_NUMBER environmental variable")
|
||||
}
|
||||
var err error
|
||||
version, err := config.GetGrafanaVersion(buildID, ".")
|
||||
if err != nil {
|
||||
return fmt.Errorf("error marshalling metadata, %w", err)
|
||||
}
|
||||
|
||||
const distDir = "dist"
|
||||
if _, err := os.Stat(distDir); os.IsNotExist(err) {
|
||||
if err := os.RemoveAll(distDir); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := os.Mkdir(distDir, 0750); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// nolint:gosec
|
||||
if err := os.WriteFile(filepath.Join(distDir, "version.json"), jsonMetadata, 0664); err != nil {
|
||||
return err
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
return nil
|
||||
return version, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana/pkg/build/config"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
const (
|
||||
DroneBuildEvent = "DRONE_BUILD_EVENT"
|
||||
DroneTargetBranch = "DRONE_TARGET_BRANCH"
|
||||
DroneTag = "DRONE_TAG"
|
||||
DroneSemverPrerelease = "DRONE_SEMVER_PRERELEASE"
|
||||
DroneBuildNumber = "DRONE_BUILD_NUMBER"
|
||||
)
|
||||
|
||||
const (
|
||||
hashedGrafanaVersion = "9.2.0-12345pre"
|
||||
versionedBranch = "v9.2.x"
|
||||
)
|
||||
|
||||
func TestGetMetadata(t *testing.T) {
|
||||
tcs := []struct {
|
||||
envMap map[string]string
|
||||
expVersion string
|
||||
mode config.ReleaseMode
|
||||
}{
|
||||
{map[string]string{DroneBuildEvent: config.PullRequest, DroneTargetBranch: "", DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.PullRequestMode}},
|
||||
{map[string]string{DroneBuildEvent: config.Push, DroneTargetBranch: versionedBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.ReleaseBranchMode}},
|
||||
{map[string]string{DroneBuildEvent: config.Push, DroneTargetBranch: config.MainBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.MainMode}},
|
||||
{map[string]string{DroneBuildEvent: config.Custom, DroneTargetBranch: versionedBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.ReleaseBranchMode}},
|
||||
{map[string]string{DroneBuildEvent: config.Custom, DroneTargetBranch: config.MainBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.Custom}},
|
||||
{map[string]string{DroneBuildEvent: config.Tag, DroneTargetBranch: "", DroneTag: "v9.2.0", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, "9.2.0", config.ReleaseMode{Mode: config.TagMode, IsBeta: false, IsTest: false}},
|
||||
{map[string]string{DroneBuildEvent: config.Tag, DroneTargetBranch: "", DroneTag: "v9.2.0-beta", DroneSemverPrerelease: "beta", DroneBuildNumber: "12345"}, "9.2.0-beta", config.ReleaseMode{Mode: config.TagMode, IsBeta: true, IsTest: false}},
|
||||
{map[string]string{DroneBuildEvent: config.Tag, DroneTargetBranch: "", DroneTag: "v9.2.0-test", DroneSemverPrerelease: "test", DroneBuildNumber: "12345"}, "9.2.0-test", config.ReleaseMode{Mode: config.TagMode, IsBeta: false, IsTest: true}},
|
||||
{map[string]string{DroneBuildEvent: config.Promote, DroneTargetBranch: "", DroneTag: "v9.2.0", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, "9.2.0", config.ReleaseMode{Mode: config.TagMode, IsBeta: false, IsTest: false}},
|
||||
{map[string]string{DroneBuildEvent: config.Promote, DroneTargetBranch: "", DroneTag: "v9.2.0-beta", DroneSemverPrerelease: "beta", DroneBuildNumber: "12345"}, "9.2.0-beta", config.ReleaseMode{Mode: config.TagMode, IsBeta: true, IsTest: false}},
|
||||
{map[string]string{DroneBuildEvent: config.Promote, DroneTargetBranch: "", DroneTag: "v9.2.0-test", DroneSemverPrerelease: "test", DroneBuildNumber: "12345"}, "9.2.0-test", config.ReleaseMode{Mode: config.TagMode, IsBeta: false, IsTest: true}},
|
||||
}
|
||||
|
||||
ctx := cli.NewContext(cli.NewApp(), &flag.FlagSet{}, nil)
|
||||
for _, tc := range tcs {
|
||||
t.Run("Should return valid metadata, ", func(t *testing.T) {
|
||||
setUpEnv(t, tc.envMap)
|
||||
testMetadata(t, ctx, tc.expVersion, tc.mode)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func testMetadata(t *testing.T, ctx *cli.Context, version string, releaseMode config.ReleaseMode) {
|
||||
t.Helper()
|
||||
|
||||
metadata, err := GenerateMetadata(ctx)
|
||||
require.NoError(t, err)
|
||||
t.Run("with a valid version", func(t *testing.T) {
|
||||
expVersion := metadata.GrafanaVersion
|
||||
require.Equal(t, expVersion, version)
|
||||
})
|
||||
|
||||
t.Run("with a valid release mode from the built-in list", func(t *testing.T) {
|
||||
expMode := metadata.ReleaseMode
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, expMode, releaseMode)
|
||||
})
|
||||
}
|
||||
|
||||
func setUpEnv(t *testing.T, envMap map[string]string) {
|
||||
t.Helper()
|
||||
|
||||
os.Clearenv()
|
||||
err := os.Setenv("DRONE_COMMIT", "abcd12345")
|
||||
require.NoError(t, err)
|
||||
for k, v := range envMap {
|
||||
err := os.Setenv(k, v)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,6 @@ import (
|
||||
|
||||
func main() {
|
||||
app := cli.NewApp()
|
||||
app.Before = GenerateVersions
|
||||
app.Commands = cli.Commands{
|
||||
{
|
||||
Name: "build-backend",
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"version": "9.2.0-pre"
|
||||
}
|
||||
@@ -2,10 +2,7 @@ package config
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
@@ -57,40 +54,6 @@ func (md *Metadata) GetReleaseMode() (ReleaseMode, error) {
|
||||
// than the way it will be built in 'main'
|
||||
type VersionMap map[VersionMode]Version
|
||||
|
||||
// GetMetadata attempts to read the JSON file located at 'path' and decode it as a Metadata{} type.
|
||||
// If the provided path does not exist, then an error is not returned. Instead, an empty metadata is returned with no error.
|
||||
func GetMetadata(path string) (*Metadata, error) {
|
||||
if _, err := os.Stat(path); err != nil {
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
return &Metadata{}, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
// Ignore gosec G304 as this function is only used in the build process.
|
||||
//nolint:gosec
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
if err := file.Close(); err != nil {
|
||||
log.Printf("error closing file at '%s': %s", path, err.Error())
|
||||
}
|
||||
}()
|
||||
|
||||
return DecodeMetadata(file)
|
||||
}
|
||||
|
||||
// DecodeMetadata decodes the data in the io.Reader 'r' as Metadata.
|
||||
func DecodeMetadata(r io.Reader) (*Metadata, error) {
|
||||
m := &Metadata{}
|
||||
if err := json.NewDecoder(r).Decode(m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetVersions reads the embedded config.json and decodes it.
|
||||
func GetVersion(mode VersionMode) (*Version, error) {
|
||||
if v, ok := Versions[mode]; ok {
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
package config_test
|
||||
|
||||
var configJSON = []byte(`{
|
||||
"pull_request": {
|
||||
"variants": [
|
||||
"linux-amd64",
|
||||
"linux-amd64-musl",
|
||||
"darwin-amd64",
|
||||
"windows-amd64"
|
||||
],
|
||||
"pluginSignature": {
|
||||
"sign": false,
|
||||
"adminSign": false
|
||||
},
|
||||
"docker": {
|
||||
"shouldSave": false,
|
||||
"archs": [
|
||||
"amd64"
|
||||
]
|
||||
}
|
||||
},
|
||||
"main": {
|
||||
"variants": [
|
||||
"linux-armv6",
|
||||
"linux-armv7",
|
||||
"linux-armv7-musl",
|
||||
"linux-arm64",
|
||||
"linux-arm64-musl",
|
||||
"darwin-amd64",
|
||||
"windows-amd64",
|
||||
"linux-amd64",
|
||||
"linux-amd64-musl"
|
||||
],
|
||||
"pluginSignature": {
|
||||
"sign": true,
|
||||
"adminSign": true
|
||||
},
|
||||
"docker": {
|
||||
"shouldSave": false,
|
||||
"archs": [
|
||||
"amd64",
|
||||
"arm64",
|
||||
"armv7"
|
||||
]
|
||||
},
|
||||
"packagesBucket": "grafana-downloads",
|
||||
"CDNAssetsBucket": "grafana-static-assets"
|
||||
},
|
||||
"branch": {
|
||||
"variants": [
|
||||
"linux-armv6",
|
||||
"linux-armv7",
|
||||
"linux-armv7-musl",
|
||||
"linux-arm64",
|
||||
"linux-arm64-musl",
|
||||
"darwin-amd64",
|
||||
"windows-amd64",
|
||||
"linux-amd64",
|
||||
"linux-amd64-musl"
|
||||
],
|
||||
"pluginSignature": {
|
||||
"sign": true,
|
||||
"adminSign": true
|
||||
},
|
||||
"docker": {
|
||||
"shouldSave": true,
|
||||
"archs": [
|
||||
"amd64",
|
||||
"arm64",
|
||||
"armv7"
|
||||
]
|
||||
},
|
||||
"packagesBucket": "grafana-downloads",
|
||||
"packagesBucketEnterprise2": "grafana-downloads-enterprise2",
|
||||
"CDNAssetsBucket": "grafana-static-assets"
|
||||
},
|
||||
"release": {
|
||||
"variants": [
|
||||
"linux-armv6",
|
||||
"linux-armv7",
|
||||
"linux-armv7-musl",
|
||||
"linux-arm64",
|
||||
"linux-arm64-musl",
|
||||
"darwin-amd64",
|
||||
"windows-amd64",
|
||||
"linux-amd64",
|
||||
"linux-amd64-musl"
|
||||
],
|
||||
"pluginSignature": {
|
||||
"sign": true,
|
||||
"adminSign": true
|
||||
},
|
||||
"docker": {
|
||||
"shouldSave": true,
|
||||
"archs": [
|
||||
"amd64",
|
||||
"arm64",
|
||||
"armv7"
|
||||
]
|
||||
},
|
||||
"packagesBucket": "grafana-prerelease/artifacts/downloads",
|
||||
"CDNAssetsBucket": "grafana-prerelease",
|
||||
"CDNAssetsDir": "artifacts/static-assets",
|
||||
"storybookBucket": "grafana-prerelease",
|
||||
"storybookSrcDir": "artifacts/storybook"
|
||||
},
|
||||
"beta": {
|
||||
"variants": [
|
||||
"linux-armv6",
|
||||
"linux-armv7",
|
||||
"linux-armv7-musl",
|
||||
"linux-arm64",
|
||||
"linux-arm64-musl",
|
||||
"darwin-amd64",
|
||||
"windows-amd64",
|
||||
"linux-amd64",
|
||||
"linux-amd64-musl"
|
||||
],
|
||||
"pluginSignature": {
|
||||
"sign": true,
|
||||
"adminSign": true
|
||||
},
|
||||
"docker": {
|
||||
"shouldSave": true,
|
||||
"archs": [
|
||||
"amd64",
|
||||
"arm64",
|
||||
"armv7"
|
||||
]
|
||||
},
|
||||
"packagesBucket": "grafana-prerelease/artifacts/downloads",
|
||||
"CDNAssetsBucket": "grafana-prerelease",
|
||||
"CDNAssetsDir": "artifacts/static-assets",
|
||||
"storybookBucket": "grafana-prerelease",
|
||||
"storybookSrcDir": "artifacts/storybook"
|
||||
},
|
||||
"test": {
|
||||
"variants": [
|
||||
"linux-armv6",
|
||||
"linux-armv7",
|
||||
"linux-armv7-musl",
|
||||
"linux-arm64",
|
||||
"linux-arm64-musl",
|
||||
"darwin-amd64",
|
||||
"windows-amd64",
|
||||
"linux-amd64",
|
||||
"linux-amd64-musl"
|
||||
],
|
||||
"pluginSignature": {
|
||||
"sign": true,
|
||||
"adminSign": true
|
||||
},
|
||||
"docker": {
|
||||
"shouldSave": true,
|
||||
"archs": [
|
||||
"amd64",
|
||||
"arm64",
|
||||
"armv7"
|
||||
]
|
||||
},
|
||||
"packagesBucket": "grafana-prerelease/artifacts/downloads",
|
||||
"CDNAssetsBucket": "grafana-prerelease",
|
||||
"CDNAssetsDir": "artifacts/static-assets",
|
||||
"storybookBucket": "grafana-prerelease",
|
||||
"storybookSrcDir": "artifacts/storybook"
|
||||
}
|
||||
}`)
|
||||
@@ -1,96 +0,0 @@
|
||||
package config_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana/pkg/build/config"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestGetMetadata(t *testing.T) {
|
||||
tcs := []struct {
|
||||
version string
|
||||
mode config.ReleaseMode
|
||||
}{
|
||||
{"v1.2.3", config.ReleaseMode{Mode: config.TagMode}},
|
||||
{"v1.2.3-12345pre", config.ReleaseMode{Mode: config.PullRequestMode}},
|
||||
{"v1.2.3-beta1", config.ReleaseMode{Mode: config.TagMode, IsBeta: true}},
|
||||
{"v1.2.3-test1", config.ReleaseMode{Mode: config.TagMode, IsTest: true}},
|
||||
{"v1.2.3-foobar", config.ReleaseMode{Mode: config.ReleaseBranchMode}},
|
||||
{"v1.2.3-foobar", config.ReleaseMode{Mode: config.PullRequestMode}},
|
||||
}
|
||||
|
||||
t.Run("Should return empty metadata, dist/ is not present", func(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
metadata, err := config.GetMetadata(filepath.Join(dir, "dist"))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, metadata, &config.Metadata{})
|
||||
if err := os.RemoveAll(dir); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
for _, tc := range tcs {
|
||||
dir := t.TempDir()
|
||||
t.Run("Should return valid metadata, tag mode, ", func(t *testing.T) {
|
||||
testMetadata(t, dir, tc.version, tc.mode)
|
||||
})
|
||||
if err := os.RemoveAll(dir); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testMetadata(t *testing.T, dir string, version string, releaseMode config.ReleaseMode) {
|
||||
t.Helper()
|
||||
file := filepath.Join(dir, "version.json")
|
||||
createVersionJSON(t, version, file, releaseMode)
|
||||
|
||||
metadata, err := config.GetMetadata(file)
|
||||
require.NoError(t, err)
|
||||
t.Run("with a valid version", func(t *testing.T) {
|
||||
expVersion := metadata.GrafanaVersion
|
||||
require.Equal(t, expVersion, version)
|
||||
})
|
||||
|
||||
t.Run("with a valid release mode from the built-in list", func(t *testing.T) {
|
||||
expMode := metadata.ReleaseMode
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, expMode, releaseMode)
|
||||
})
|
||||
|
||||
t.Run("with a valid configuration from a JSON file", func(t *testing.T) {
|
||||
version, err := config.GetVersion(metadata.ReleaseMode.Mode)
|
||||
require.NoError(t, err)
|
||||
parsed := verModeFromConfig(t, metadata)
|
||||
require.EqualValues(t, parsed, *version)
|
||||
})
|
||||
}
|
||||
|
||||
func verModeFromConfig(t *testing.T, metadata *config.Metadata) config.Version {
|
||||
t.Helper()
|
||||
|
||||
metadataComp := config.VersionMap{}
|
||||
|
||||
require.NoError(t, json.Unmarshal(configJSON, &metadataComp))
|
||||
|
||||
return metadataComp[metadata.ReleaseMode.Mode]
|
||||
}
|
||||
|
||||
func createVersionJSON(t *testing.T, version string, file string, releaseMode config.ReleaseMode) {
|
||||
t.Helper()
|
||||
|
||||
metadata := &config.Metadata{
|
||||
GrafanaVersion: version,
|
||||
ReleaseMode: releaseMode,
|
||||
}
|
||||
|
||||
//nolint:gosec
|
||||
f, err := os.Create(file)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, json.NewEncoder(f).Encode(metadata))
|
||||
}
|
||||
Reference in New Issue
Block a user