diff --git a/pkg/build/cmd/buildfrontend.go b/pkg/build/cmd/buildfrontend.go index 1f64ab0b0e8..ef0fbc9a5fd 100644 --- a/pkg/build/cmd/buildfrontend.go +++ b/pkg/build/cmd/buildfrontend.go @@ -16,9 +16,8 @@ func BuildFrontend(c *cli.Context) error { if err != nil { return err } - version := metadata.GrafanaVersion - cfg, mode, err := frontend.GetConfig(c, version) + cfg, mode, err := frontend.GetConfig(c, metadata) if err != nil { return err } diff --git a/pkg/build/cmd/buildfrontendpackages.go b/pkg/build/cmd/buildfrontendpackages.go index b3c07039818..b1fef3dfcee 100644 --- a/pkg/build/cmd/buildfrontendpackages.go +++ b/pkg/build/cmd/buildfrontendpackages.go @@ -2,26 +2,21 @@ package main import ( "log" - "strings" - - "github.com/urfave/cli/v2" + "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" + "github.com/urfave/cli/v2" ) func BuildFrontendPackages(c *cli.Context) error { - version := "" - if c.NArg() == 1 { - // Fixes scenario where an incompatible semver is provided to lerna, which will cause the step to fail. - // When there is an invalid semver, a frontend package won't be published anyways. - if strings.Count(version, ".") == 2 { - version = strings.TrimPrefix(c.Args().Get(0), "v") - } + metadata, err := config.GenerateMetadata(c) + if err != nil { + return err } - cfg, mode, err := frontend.GetConfig(c, version) + cfg, mode, err := frontend.GetConfig(c, metadata) if err != nil { return err } diff --git a/pkg/build/config/genmetadata.go b/pkg/build/config/genmetadata.go index f79094c5979..1ff0565bc17 100644 --- a/pkg/build/config/genmetadata.go +++ b/pkg/build/config/genmetadata.go @@ -95,7 +95,7 @@ func generateVersionFromBuildID() (string, error) { return "", fmt.Errorf("unable to get DRONE_BUILD_NUMBER environmental variable") } var err error - version, err := GetGrafanaVersion(buildID, ".") + version, err := GenerateGrafanaVersion(buildID, ".") if err != nil { return "", err } diff --git a/pkg/build/config/version.go b/pkg/build/config/version.go index 8b10aed9493..6ce1bcae867 100644 --- a/pkg/build/config/version.go +++ b/pkg/build/config/version.go @@ -71,8 +71,26 @@ func GetBuildConfig(mode VersionMode) (*BuildConfig, error) { return nil, fmt.Errorf("mode '%s' not found in version list", mode) } -// GetGrafanaVersion gets the Grafana version from the package.json -func GetGrafanaVersion(buildID, grafanaDir string) (string, error) { +// GenerateGrafanaVersion gets the Grafana version from the package.json +func GenerateGrafanaVersion(buildID, grafanaDir string) (string, error) { + version, err := GetPackageJSONVersion(grafanaDir) + if err != nil { + return version, err + } + if buildID != "" { + buildID = shortenBuildID(buildID) + verComponents := strings.Split(version, "-") + version = verComponents[0] + if len(verComponents) > 1 { + buildID = fmt.Sprintf("%s%s", buildID, verComponents[1]) + } + version = fmt.Sprintf("%s-%s", version, buildID) + } + + return version, nil +} + +func GetPackageJSONVersion(grafanaDir string) (string, error) { pkgJSONPath := filepath.Join(grafanaDir, "package.json") //nolint:gosec pkgJSONB, err := os.ReadFile(pkgJSONPath) @@ -88,16 +106,6 @@ func GetGrafanaVersion(buildID, grafanaDir string) (string, error) { if version == "" { return "", fmt.Errorf("failed to read version from %q", pkgJSONPath) } - if buildID != "" { - buildID = shortenBuildID(buildID) - verComponents := strings.Split(version, "-") - version = verComponents[0] - if len(verComponents) > 1 { - buildID = fmt.Sprintf("%s%s", buildID, verComponents[1]) - } - version = fmt.Sprintf("%s-%s", version, buildID) - } - return version, nil } diff --git a/pkg/build/frontend/config.go b/pkg/build/frontend/config.go index 3d244faa248..398adcff752 100644 --- a/pkg/build/frontend/config.go +++ b/pkg/build/frontend/config.go @@ -9,31 +9,24 @@ import ( const GrafanaDir = "." -func GetConfig(c *cli.Context, inputTagVersion string) (config.Config, config.Edition, error) { +func GetConfig(c *cli.Context, metadata config.Metadata) (config.Config, config.Edition, error) { cfg := config.Config{ - NumWorkers: c.Int("jobs"), - GitHubToken: c.String("github-token"), - PackageVersion: inputTagVersion, + NumWorkers: c.Int("jobs"), + GitHubToken: c.String("github-token"), } mode := config.Edition(c.String("edition")) - buildID := c.String("build-id") - packageVersion, err := config.GetGrafanaVersion(buildID, GrafanaDir) - if err != nil { - return config.Config{}, "", cli.Exit(err.Error(), 1) - } - if inputTagVersion == "" { - cfg.PackageVersion = packageVersion + if metadata.ReleaseMode.Mode == config.TagMode && !metadata.ReleaseMode.IsTest { + packageJSONVersion, err := config.GetPackageJSONVersion(GrafanaDir) if err != nil { - return config.Config{}, config.EditionOSS, cli.Exit(err.Error(), 1) + return config.Config{}, "", err + } + if metadata.GrafanaVersion != packageJSONVersion { + return config.Config{}, "", cli.Exit(fmt.Errorf("package.json version and input tag version differ %s != %s.\nPlease update package.json", packageJSONVersion, metadata.GrafanaVersion), 1) } - return cfg, mode, err - } - if inputTagVersion != packageVersion { - return config.Config{}, "", cli.Exit(fmt.Errorf("package.json version and input tag version differ %s != %s.\nPlease update package.json", packageVersion, inputTagVersion), 1) } - cfg.PackageVersion = inputTagVersion + cfg.PackageVersion = metadata.GrafanaVersion return cfg, mode, nil } diff --git a/pkg/build/frontend/config_test.go b/pkg/build/frontend/config_test.go index a456887dbcb..d8bbfb4e9b1 100644 --- a/pkg/build/frontend/config_test.go +++ b/pkg/build/frontend/config_test.go @@ -3,9 +3,11 @@ package frontend import ( "encoding/json" "flag" + "fmt" "os" "testing" + "github.com/grafana/grafana/pkg/build/config" "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" ) @@ -13,6 +15,7 @@ import ( const ( jobs = "jobs" githubToken = "github-token" + buildID = "build-id" ) type packageJson struct { @@ -26,41 +29,47 @@ func TestGetConfig(t *testing.T) { ctx *cli.Context name string packageJsonVersion string - tagVersion string + metadata config.Metadata wantErr bool }{ { - ctx: cli.NewContext(app, setFlags(t, jobs, githubToken, flag.NewFlagSet("flagSet", flag.ContinueOnError)), nil), + ctx: cli.NewContext(app, setFlags(t, jobs, githubToken, "", flag.NewFlagSet("flagSet", flag.ContinueOnError)), nil), name: "package.json matches tag", packageJsonVersion: "10.0.0", - tagVersion: "10.0.0", + metadata: config.Metadata{GrafanaVersion: "10.0.0", ReleaseMode: config.ReleaseMode{Mode: config.TagMode}}, wantErr: false, }, { - ctx: cli.NewContext(app, setFlags(t, jobs, githubToken, flag.NewFlagSet("flagSet", flag.ContinueOnError)), nil), + ctx: cli.NewContext(app, setFlags(t, jobs, githubToken, "", flag.NewFlagSet("flagSet", flag.ContinueOnError)), nil), name: "package.json doesn't match tag", packageJsonVersion: "10.1.0", - tagVersion: "10.0.0", + metadata: config.Metadata{GrafanaVersion: "10.0.0", ReleaseMode: config.ReleaseMode{Mode: config.TagMode}}, wantErr: true, }, { - ctx: cli.NewContext(app, setFlags(t, jobs, githubToken, flag.NewFlagSet("flagSet", flag.ContinueOnError)), nil), - name: "non-tag event", + ctx: cli.NewContext(app, setFlags(t, jobs, githubToken, "", flag.NewFlagSet("flagSet", flag.ContinueOnError)), nil), + name: "test tag event, check should be skipped", packageJsonVersion: "10.1.0", - tagVersion: "", + metadata: config.Metadata{GrafanaVersion: "10.1.0-test", ReleaseMode: config.ReleaseMode{Mode: config.TagMode, IsTest: true}}, + wantErr: false, + }, + { + ctx: cli.NewContext(app, setFlags(t, jobs, githubToken, buildID, flag.NewFlagSet("flagSet", flag.ContinueOnError)), nil), + name: "non-tag event", + packageJsonVersion: "10.1.0-pre", + metadata: config.Metadata{GrafanaVersion: "10.1.0-12345pre", ReleaseMode: config.ReleaseMode{Mode: config.PullRequestMode}}, wantErr: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - var context cli.Context err := createTempPackageJson(t, tt.packageJsonVersion) require.NoError(t, err) - defer deleteTempPackageJson(t) - got, _, err := GetConfig(&context, tt.tagVersion) + got, _, err := GetConfig(tt.ctx, tt.metadata) if !tt.wantErr { - require.Equal(t, got.PackageVersion, tt.packageJsonVersion) + fmt.Println(got.PackageVersion + " : " + tt.metadata.GrafanaVersion) + require.Equal(t, got.PackageVersion, tt.metadata.GrafanaVersion) } if tt.wantErr { @@ -71,7 +80,7 @@ func TestGetConfig(t *testing.T) { } } -func setFlags(t *testing.T, flag1, flag2 string, flagSet *flag.FlagSet) *flag.FlagSet { +func setFlags(t *testing.T, flag1, flag2, flag3 string, flagSet *flag.FlagSet) *flag.FlagSet { t.Helper() if flag1 != "" { flagSet.StringVar(&flag1, jobs, "2", "") @@ -79,6 +88,9 @@ func setFlags(t *testing.T, flag1, flag2 string, flagSet *flag.FlagSet) *flag.Fl if flag2 != "" { flagSet.StringVar(&flag2, githubToken, "token", "") } + if flag3 != "" { + flagSet.StringVar(&flag3, buildID, "12345", "") + } return flagSet } @@ -91,12 +103,9 @@ func createTempPackageJson(t *testing.T, version string) error { err := os.WriteFile("package.json", file, 0644) require.NoError(t, err) + t.Cleanup(func() { + err := os.RemoveAll("package.json") + require.NoError(t, err) + }) return nil } - -func deleteTempPackageJson(t *testing.T) { - t.Helper() - - err := os.RemoveAll("package.json") - require.NoError(t, err) -}