diff --git a/pkg/build/cmd/buildbackend.go b/pkg/build/cmd/buildbackend.go index 29ffb307d63..39f0d707fe4 100644 --- a/pkg/build/cmd/buildbackend.go +++ b/pkg/build/cmd/buildbackend.go @@ -13,7 +13,7 @@ import ( ) func BuildBackend(ctx *cli.Context) error { - metadata, err := GenerateMetadata(ctx) + metadata, err := config.GenerateMetadata(ctx) if err != nil { return err } diff --git a/pkg/build/cmd/builddocker.go b/pkg/build/cmd/builddocker.go index f17037664a7..ac1858a65ba 100644 --- a/pkg/build/cmd/builddocker.go +++ b/pkg/build/cmd/builddocker.go @@ -14,7 +14,7 @@ func BuildDocker(c *cli.Context) error { return err } - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/buildfrontend.go b/pkg/build/cmd/buildfrontend.go index 2874a119403..d7825f419cd 100644 --- a/pkg/build/cmd/buildfrontend.go +++ b/pkg/build/cmd/buildfrontend.go @@ -3,6 +3,7 @@ package main import ( "log" + "github.com/grafana/grafana/pkg/build/config" "github.com/grafana/grafana/pkg/build/errutil" "github.com/grafana/grafana/pkg/build/frontend" "github.com/grafana/grafana/pkg/build/syncutil" @@ -10,7 +11,7 @@ import ( ) func BuildFrontend(c *cli.Context) error { - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/buildinternalplugins.go b/pkg/build/cmd/buildinternalplugins.go index 2871106c933..fad80b818d5 100644 --- a/pkg/build/cmd/buildinternalplugins.go +++ b/pkg/build/cmd/buildinternalplugins.go @@ -17,7 +17,7 @@ func BuildInternalPlugins(c *cli.Context) error { } const grafanaDir = "." - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/exportversion.go b/pkg/build/cmd/exportversion.go index afbe05114af..a3a54309c73 100644 --- a/pkg/build/cmd/exportversion.go +++ b/pkg/build/cmd/exportversion.go @@ -4,11 +4,12 @@ import ( "os" "path/filepath" + "github.com/grafana/grafana/pkg/build/config" "github.com/urfave/cli/v2" ) func ExportVersion(c *cli.Context) error { - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/fetchimages.go b/pkg/build/cmd/fetchimages.go index fcdd9fc3eeb..bd1ec6a5102 100644 --- a/pkg/build/cmd/fetchimages.go +++ b/pkg/build/cmd/fetchimages.go @@ -6,11 +6,10 @@ import ( "os/exec" "strings" - "github.com/urfave/cli/v2" - "github.com/grafana/grafana/pkg/build/config" "github.com/grafana/grafana/pkg/build/docker" "github.com/grafana/grafana/pkg/build/gcloud" + "github.com/urfave/cli/v2" ) const ( @@ -26,7 +25,7 @@ func FetchImages(c *cli.Context) error { return cli.Exit("", 1) } - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/genversions.go b/pkg/build/cmd/genversions.go deleted file mode 100644 index 851acb195aa..00000000000 --- a/pkg/build/cmd/genversions.go +++ /dev/null @@ -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 -} diff --git a/pkg/build/cmd/genversions_test.go b/pkg/build/cmd/genversions_test.go deleted file mode 100644 index 1345c8c4e4e..00000000000 --- a/pkg/build/cmd/genversions_test.go +++ /dev/null @@ -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) - } -} diff --git a/pkg/build/cmd/grafanacom.go b/pkg/build/cmd/grafanacom.go index ce7f7fc83a4..43f5bc9eb0f 100644 --- a/pkg/build/cmd/grafanacom.go +++ b/pkg/build/cmd/grafanacom.go @@ -34,7 +34,7 @@ func GrafanaCom(c *cli.Context) error { return fmt.Errorf("couldn't activate service account, err: %w", err) } - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/package.go b/pkg/build/cmd/package.go index f5c0b9993a6..b91f1be0179 100644 --- a/pkg/build/cmd/package.go +++ b/pkg/build/cmd/package.go @@ -5,16 +5,15 @@ import ( "log" "strings" - "github.com/urfave/cli/v2" - "github.com/grafana/grafana/pkg/build/config" "github.com/grafana/grafana/pkg/build/gpg" "github.com/grafana/grafana/pkg/build/packaging" "github.com/grafana/grafana/pkg/build/syncutil" + "github.com/urfave/cli/v2" ) func Package(c *cli.Context) error { - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/publishaws.go b/pkg/build/cmd/publishaws.go index 68ed5e695ac..e499c6b27fa 100644 --- a/pkg/build/cmd/publishaws.go +++ b/pkg/build/cmd/publishaws.go @@ -17,6 +17,7 @@ import ( "github.com/aws/aws-sdk-go/service/marketplacecatalog" "github.com/docker/docker/api/types" "github.com/docker/docker/client" + "github.com/grafana/grafana/pkg/build/config" "github.com/urfave/cli/v2" ) @@ -240,7 +241,7 @@ func (s *AwsMarketplacePublishingService) ReleaseToProduct(ctx context.Context, } func getPublishAwsMarketplaceFlags(ctx *cli.Context) (*publishAwsMarketplaceFlags, error) { - metadata, err := GenerateMetadata(ctx) + metadata, err := config.GenerateMetadata(ctx) if err != nil { return nil, err } diff --git a/pkg/build/cmd/publishaws_test.go b/pkg/build/cmd/publishaws_test.go index 34274aff92a..fc8f2615336 100644 --- a/pkg/build/cmd/publishaws_test.go +++ b/pkg/build/cmd/publishaws_test.go @@ -30,6 +30,8 @@ type awsPublishTestCase struct { func TestPublishAwsMarketplace(t *testing.T) { t.Setenv("DRONE_BUILD_EVENT", "promote") + t.Setenv("DRONE_TAG", "v1.0.0") + t.Setenv("DRONE_COMMIT", "abcdefgh") testApp := setupPublishAwsMarketplaceTests(t) errShouldNotCallMock := errors.New("shouldn't call") diff --git a/pkg/build/cmd/publishgithub.go b/pkg/build/cmd/publishgithub.go index bdec497f9d2..49366cecd27 100644 --- a/pkg/build/cmd/publishgithub.go +++ b/pkg/build/cmd/publishgithub.go @@ -9,6 +9,7 @@ import ( "strings" "github.com/google/go-github/github" + "github.com/grafana/grafana/pkg/build/config" "github.com/urfave/cli/v2" "golang.org/x/oauth2" ) @@ -100,7 +101,7 @@ func githubRepositoryClient(ctx context.Context, token string) githubRepositoryS } func getPublishGithubFlags(ctx *cli.Context) (*publishGithubFlags, error) { - metadata, err := GenerateMetadata(ctx) + metadata, err := config.GenerateMetadata(ctx) if err != nil { return nil, err } diff --git a/pkg/build/cmd/publishgithub_test.go b/pkg/build/cmd/publishgithub_test.go index 537669a3f1c..6c9b0b18934 100644 --- a/pkg/build/cmd/publishgithub_test.go +++ b/pkg/build/cmd/publishgithub_test.go @@ -32,6 +32,8 @@ func mockGithubRepositoryClient(context.Context, string) githubRepositoryService func TestPublishGithub(t *testing.T) { t.Setenv("DRONE_BUILD_EVENT", "promote") + t.Setenv("DRONE_TAG", "v1.0.0") + t.Setenv("DRONE_COMMIT", "abcdefgh") testApp, testPath := setupPublishGithubTests(t) mockErrUnauthorized := errors.New("401") diff --git a/pkg/build/cmd/publishimages_enterprise2.go b/pkg/build/cmd/publishimages_enterprise2.go index 1315b2897b0..b76b2688d6f 100644 --- a/pkg/build/cmd/publishimages_enterprise2.go +++ b/pkg/build/cmd/publishimages_enterprise2.go @@ -6,11 +6,10 @@ import ( "os" "os/exec" - "github.com/urfave/cli/v2" - "github.com/grafana/grafana/pkg/build/config" "github.com/grafana/grafana/pkg/build/docker" "github.com/grafana/grafana/pkg/build/gcloud" + "github.com/urfave/cli/v2" ) func Enterprise2(c *cli.Context) error { @@ -25,7 +24,7 @@ func Enterprise2(c *cli.Context) error { return fmt.Errorf("couldn't activate service account, err: %w", err) } - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/storestorybook.go b/pkg/build/cmd/storestorybook.go index 0daeb7080f6..65adfa1fbb7 100644 --- a/pkg/build/cmd/storestorybook.go +++ b/pkg/build/cmd/storestorybook.go @@ -13,7 +13,7 @@ import ( func StoreStorybook(c *cli.Context) error { deployment := c.String("deployment") - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/uploadcdn.go b/pkg/build/cmd/uploadcdn.go index 3c202a35157..8b8ddb0cd81 100644 --- a/pkg/build/cmd/uploadcdn.go +++ b/pkg/build/cmd/uploadcdn.go @@ -6,10 +6,9 @@ import ( "os" "path/filepath" - "github.com/urfave/cli/v2" - "github.com/grafana/grafana/pkg/build/config" "github.com/grafana/grafana/pkg/build/gcloud/storage" + "github.com/urfave/cli/v2" ) // UploadCDN implements the sub-command "upload-cdn". @@ -21,7 +20,7 @@ func UploadCDN(c *cli.Context) error { return cli.Exit("", 1) } - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/cmd/uploadpackages.go b/pkg/build/cmd/uploadpackages.go index 0a0778bb055..e5944e03f3f 100644 --- a/pkg/build/cmd/uploadpackages.go +++ b/pkg/build/cmd/uploadpackages.go @@ -9,11 +9,10 @@ import ( "path/filepath" "strings" - "github.com/urfave/cli/v2" - "github.com/grafana/grafana/pkg/build/config" "github.com/grafana/grafana/pkg/build/gcloud" "github.com/grafana/grafana/pkg/build/packaging" + "github.com/urfave/cli/v2" ) const releaseFolder = "release" @@ -53,7 +52,7 @@ func UploadPackages(c *cli.Context) error { return cli.Exit(err.Error(), 1) } - metadata, err := GenerateMetadata(c) + metadata, err := config.GenerateMetadata(c) if err != nil { return err } diff --git a/pkg/build/config/genmetadata.go b/pkg/build/config/genmetadata.go new file mode 100644 index 00000000000..c201d77dd39 --- /dev/null +++ b/pkg/build/config/genmetadata.go @@ -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 +} diff --git a/pkg/build/config/genmetadata_test.go b/pkg/build/config/genmetadata_test.go new file mode 100644 index 00000000000..605b68496c7 --- /dev/null +++ b/pkg/build/config/genmetadata_test.go @@ -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) + } +} diff --git a/pkg/build/cmd/package.json b/pkg/build/config/package.json similarity index 100% rename from pkg/build/cmd/package.json rename to pkg/build/config/package.json