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