mirror of https://github.com/grafana/grafana
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.6pull/54941/head
parent
942be4215a
commit
e277ab0017
@ -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) |
||||
} |
||||
} |
@ -0,0 +1,3 @@ |
||||
{ |
||||
"version": "9.2.0-pre" |
||||
} |
@ -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)) |
||||
} |
Loading…
Reference in new issue