mirror of https://github.com/grafana/grafana
Metadata: Move and rename `genversions.go` and `genversions_test.go` (#60315)
* Move and rename genversions.go and tests * Fix lint - bring back cli.Exit * Move package.json and fix tests * Add necessary env vars for promote eventpull/60372/head
parent
edb86d4bf3
commit
f73cdc5e80
@ -1,103 +0,0 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
|
||||
"github.com/grafana/grafana/pkg/build/config" |
||||
"github.com/grafana/grafana/pkg/build/droneutil" |
||||
"github.com/urfave/cli/v2" |
||||
) |
||||
|
||||
func GenerateMetadata(c *cli.Context) (config.Metadata, error) { |
||||
var metadata config.Metadata |
||||
version := "" |
||||
|
||||
event, err := droneutil.GetDroneEventFromEnv() |
||||
if err != nil { |
||||
return config.Metadata{}, err |
||||
} |
||||
|
||||
tag, ok := os.LookupEnv("DRONE_TAG") |
||||
if !ok { |
||||
fmt.Println("DRONE_TAG envvar not present") |
||||
} |
||||
|
||||
var releaseMode config.ReleaseMode |
||||
switch event { |
||||
case string(config.PullRequestMode): |
||||
releaseMode = config.ReleaseMode{Mode: config.PullRequestMode} |
||||
case config.Push: |
||||
mode, err := config.CheckDroneTargetBranch() |
||||
if err != nil { |
||||
return config.Metadata{}, err |
||||
} |
||||
releaseMode = config.ReleaseMode{Mode: mode} |
||||
case config.Custom: |
||||
if edition, _ := os.LookupEnv("EDITION"); edition == string(config.EditionEnterprise2) { |
||||
releaseMode = config.ReleaseMode{Mode: config.Enterprise2Mode} |
||||
if tag != "" { |
||||
version = strings.TrimPrefix(tag, "v") |
||||
} |
||||
break |
||||
} |
||||
mode, err := config.CheckDroneTargetBranch() |
||||
if err != nil { |
||||
return config.Metadata{}, err |
||||
} |
||||
// if there is a custom event targeting the main branch, that's an enterprise downstream build
|
||||
if mode == config.MainBranch { |
||||
releaseMode = config.ReleaseMode{Mode: config.DownstreamMode} |
||||
} else { |
||||
releaseMode = config.ReleaseMode{Mode: mode} |
||||
} |
||||
case config.Tag, config.Promote: |
||||
if tag == "" { |
||||
return config.Metadata{}, fmt.Errorf("DRONE_TAG envvar not present for a tag/promotion event, %w", err) |
||||
} |
||||
version = strings.TrimPrefix(tag, "v") |
||||
mode, err := config.CheckSemverSuffix() |
||||
if err != nil { |
||||
return config.Metadata{}, err |
||||
} |
||||
releaseMode = mode |
||||
case config.Cronjob: |
||||
releaseMode = config.ReleaseMode{Mode: config.CronjobMode} |
||||
} |
||||
|
||||
if version == "" { |
||||
version, err = generateVersionFromBuildID() |
||||
if err != nil { |
||||
return config.Metadata{}, err |
||||
} |
||||
} |
||||
|
||||
currentCommit, err := config.GetDroneCommit() |
||||
if err != nil { |
||||
return config.Metadata{}, err |
||||
} |
||||
metadata = config.Metadata{ |
||||
GrafanaVersion: version, |
||||
ReleaseMode: releaseMode, |
||||
GrabplVersion: c.App.Version, |
||||
CurrentCommit: currentCommit, |
||||
} |
||||
|
||||
fmt.Printf("building Grafana version: %s, release mode: %+v", metadata.GrafanaVersion, metadata.ReleaseMode) |
||||
|
||||
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 "", err |
||||
} |
||||
return version, nil |
||||
} |
@ -1,84 +0,0 @@ |
||||
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" |
||||
Edition = "EDITION" |
||||
) |
||||
|
||||
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.Push, DroneTargetBranch: "prc-12345-foo/bar", DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.PullRequestMode}}, |
||||
{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.DownstreamMode}}, |
||||
{map[string]string{DroneBuildEvent: config.Custom, DroneTargetBranch: config.MainBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345", Edition: "enterprise2"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.Enterprise2Mode}}, |
||||
{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,102 @@ |
||||
package config |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
|
||||
"github.com/grafana/grafana/pkg/build/droneutil" |
||||
"github.com/urfave/cli/v2" |
||||
) |
||||
|
||||
func GenerateMetadata(c *cli.Context) (Metadata, error) { |
||||
var metadata Metadata |
||||
version := "" |
||||
|
||||
event, err := droneutil.GetDroneEventFromEnv() |
||||
if err != nil { |
||||
return Metadata{}, err |
||||
} |
||||
|
||||
tag, ok := os.LookupEnv("DRONE_TAG") |
||||
if !ok { |
||||
fmt.Println("DRONE_TAG envvar not present, %w", err) |
||||
} |
||||
|
||||
var releaseMode ReleaseMode |
||||
switch event { |
||||
case string(PullRequestMode): |
||||
releaseMode = ReleaseMode{Mode: PullRequestMode} |
||||
case Push: |
||||
mode, err := CheckDroneTargetBranch() |
||||
if err != nil { |
||||
return Metadata{}, err |
||||
} |
||||
releaseMode = ReleaseMode{Mode: mode} |
||||
case Custom: |
||||
if edition, _ := os.LookupEnv("EDITION"); edition == string(EditionEnterprise2) { |
||||
releaseMode = ReleaseMode{Mode: Enterprise2Mode} |
||||
if tag != "" { |
||||
version = strings.TrimPrefix(tag, "v") |
||||
} |
||||
break |
||||
} |
||||
mode, err := CheckDroneTargetBranch() |
||||
if err != nil { |
||||
return Metadata{}, err |
||||
} |
||||
// if there is a custom event targeting the main branch, that's an enterprise downstream build
|
||||
if mode == MainBranch { |
||||
releaseMode = ReleaseMode{Mode: DownstreamMode} |
||||
} else { |
||||
releaseMode = ReleaseMode{Mode: mode} |
||||
} |
||||
case Tag, Promote: |
||||
if tag == "" { |
||||
return Metadata{}, fmt.Errorf("DRONE_TAG envvar not present for a tag/promotion event, %w", err) |
||||
} |
||||
version = strings.TrimPrefix(tag, "v") |
||||
mode, err := CheckSemverSuffix() |
||||
if err != nil { |
||||
return Metadata{}, err |
||||
} |
||||
releaseMode = mode |
||||
case Cronjob: |
||||
releaseMode = ReleaseMode{Mode: CronjobMode} |
||||
} |
||||
|
||||
if version == "" { |
||||
version, err = generateVersionFromBuildID() |
||||
if err != nil { |
||||
return Metadata{}, err |
||||
} |
||||
} |
||||
|
||||
currentCommit, err := GetDroneCommit() |
||||
if err != nil { |
||||
return Metadata{}, err |
||||
} |
||||
metadata = Metadata{ |
||||
GrafanaVersion: version, |
||||
ReleaseMode: releaseMode, |
||||
GrabplVersion: c.App.Version, |
||||
CurrentCommit: currentCommit, |
||||
} |
||||
|
||||
fmt.Printf("building Grafana version: %s, release mode: %+v", metadata.GrafanaVersion, metadata.ReleaseMode) |
||||
|
||||
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 := GetGrafanaVersion(buildID, ".") |
||||
if err != nil { |
||||
return "", err |
||||
} |
||||
return version, nil |
||||
} |
@ -0,0 +1,81 @@ |
||||
package config |
||||
|
||||
import ( |
||||
"flag" |
||||
"os" |
||||
"testing" |
||||
|
||||
"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 ReleaseMode |
||||
}{ |
||||
{map[string]string{DroneBuildEvent: PullRequest, DroneTargetBranch: "", DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, ReleaseMode{Mode: PullRequestMode}}, |
||||
{map[string]string{DroneBuildEvent: Push, DroneTargetBranch: versionedBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, ReleaseMode{Mode: ReleaseBranchMode}}, |
||||
{map[string]string{DroneBuildEvent: Push, DroneTargetBranch: MainBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, ReleaseMode{Mode: MainMode}}, |
||||
{map[string]string{DroneBuildEvent: Custom, DroneTargetBranch: versionedBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, ReleaseMode{Mode: ReleaseBranchMode}}, |
||||
{map[string]string{DroneBuildEvent: Custom, DroneTargetBranch: MainBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, ReleaseMode{Mode: DownstreamMode}}, |
||||
{map[string]string{DroneBuildEvent: Custom, DroneTargetBranch: MainBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345", "EDITION": string(EditionEnterprise2)}, hashedGrafanaVersion, ReleaseMode{Mode: Enterprise2Mode}}, |
||||
{map[string]string{DroneBuildEvent: Tag, DroneTargetBranch: "", DroneTag: "v9.2.0", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, "9.2.0", ReleaseMode{Mode: TagMode, IsBeta: false, IsTest: false}}, |
||||
{map[string]string{DroneBuildEvent: Tag, DroneTargetBranch: "", DroneTag: "v9.2.0-beta", DroneSemverPrerelease: "beta", DroneBuildNumber: "12345"}, "9.2.0-beta", ReleaseMode{Mode: TagMode, IsBeta: true, IsTest: false}}, |
||||
{map[string]string{DroneBuildEvent: Tag, DroneTargetBranch: "", DroneTag: "v9.2.0-test", DroneSemverPrerelease: "test", DroneBuildNumber: "12345"}, "9.2.0-test", ReleaseMode{Mode: TagMode, IsBeta: false, IsTest: true}}, |
||||
{map[string]string{DroneBuildEvent: Promote, DroneTargetBranch: "", DroneTag: "v9.2.0", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, "9.2.0", ReleaseMode{Mode: TagMode, IsBeta: false, IsTest: false}}, |
||||
{map[string]string{DroneBuildEvent: Promote, DroneTargetBranch: "", DroneTag: "v9.2.0-beta", DroneSemverPrerelease: "beta", DroneBuildNumber: "12345"}, "9.2.0-beta", ReleaseMode{Mode: TagMode, IsBeta: true, IsTest: false}}, |
||||
{map[string]string{DroneBuildEvent: Promote, DroneTargetBranch: "", DroneTag: "v9.2.0-test", DroneSemverPrerelease: "test", DroneBuildNumber: "12345"}, "9.2.0-test", ReleaseMode{Mode: 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 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) |
||||
} |
||||
} |
Loading…
Reference in new issue