Bug: Fix build-frontend* config checks (#70076)

* Fix frontend config checks

* Exclude test tag events
This commit is contained in:
Dimitris Sotirakis
2023-06-14 17:34:30 +03:00
committed by GitHub
parent 193247bc73
commit 5a36fa5f8a
6 changed files with 67 additions and 63 deletions

View File

@@ -16,9 +16,8 @@ func BuildFrontend(c *cli.Context) error {
if err != nil { if err != nil {
return err return err
} }
version := metadata.GrafanaVersion
cfg, mode, err := frontend.GetConfig(c, version) cfg, mode, err := frontend.GetConfig(c, metadata)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -2,26 +2,21 @@ package main
import ( import (
"log" "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/errutil"
"github.com/grafana/grafana/pkg/build/frontend" "github.com/grafana/grafana/pkg/build/frontend"
"github.com/grafana/grafana/pkg/build/syncutil" "github.com/grafana/grafana/pkg/build/syncutil"
"github.com/urfave/cli/v2"
) )
func BuildFrontendPackages(c *cli.Context) error { func BuildFrontendPackages(c *cli.Context) error {
version := "" metadata, err := config.GenerateMetadata(c)
if c.NArg() == 1 { if err != nil {
// Fixes scenario where an incompatible semver is provided to lerna, which will cause the step to fail. return err
// 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")
}
} }
cfg, mode, err := frontend.GetConfig(c, version) cfg, mode, err := frontend.GetConfig(c, metadata)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -95,7 +95,7 @@ func generateVersionFromBuildID() (string, error) {
return "", fmt.Errorf("unable to get DRONE_BUILD_NUMBER environmental variable") return "", fmt.Errorf("unable to get DRONE_BUILD_NUMBER environmental variable")
} }
var err error var err error
version, err := GetGrafanaVersion(buildID, ".") version, err := GenerateGrafanaVersion(buildID, ".")
if err != nil { if err != nil {
return "", err return "", err
} }

View File

@@ -71,8 +71,26 @@ func GetBuildConfig(mode VersionMode) (*BuildConfig, error) {
return nil, fmt.Errorf("mode '%s' not found in version list", mode) return nil, fmt.Errorf("mode '%s' not found in version list", mode)
} }
// GetGrafanaVersion gets the Grafana version from the package.json // GenerateGrafanaVersion gets the Grafana version from the package.json
func GetGrafanaVersion(buildID, grafanaDir string) (string, error) { 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") pkgJSONPath := filepath.Join(grafanaDir, "package.json")
//nolint:gosec //nolint:gosec
pkgJSONB, err := os.ReadFile(pkgJSONPath) pkgJSONB, err := os.ReadFile(pkgJSONPath)
@@ -88,16 +106,6 @@ func GetGrafanaVersion(buildID, grafanaDir string) (string, error) {
if version == "" { if version == "" {
return "", fmt.Errorf("failed to read version from %q", pkgJSONPath) 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 return version, nil
} }

View File

@@ -9,31 +9,24 @@ import (
const GrafanaDir = "." 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{ cfg := config.Config{
NumWorkers: c.Int("jobs"), NumWorkers: c.Int("jobs"),
GitHubToken: c.String("github-token"), GitHubToken: c.String("github-token"),
PackageVersion: inputTagVersion,
} }
mode := config.Edition(c.String("edition")) 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 == "" { if metadata.ReleaseMode.Mode == config.TagMode && !metadata.ReleaseMode.IsTest {
cfg.PackageVersion = packageVersion packageJSONVersion, err := config.GetPackageJSONVersion(GrafanaDir)
if err != nil { 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 return cfg, mode, nil
} }

View File

@@ -3,9 +3,11 @@ package frontend
import ( import (
"encoding/json" "encoding/json"
"flag" "flag"
"fmt"
"os" "os"
"testing" "testing"
"github.com/grafana/grafana/pkg/build/config"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
) )
@@ -13,6 +15,7 @@ import (
const ( const (
jobs = "jobs" jobs = "jobs"
githubToken = "github-token" githubToken = "github-token"
buildID = "build-id"
) )
type packageJson struct { type packageJson struct {
@@ -26,41 +29,47 @@ func TestGetConfig(t *testing.T) {
ctx *cli.Context ctx *cli.Context
name string name string
packageJsonVersion string packageJsonVersion string
tagVersion string metadata config.Metadata
wantErr bool 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", name: "package.json matches tag",
packageJsonVersion: "10.0.0", packageJsonVersion: "10.0.0",
tagVersion: "10.0.0", metadata: config.Metadata{GrafanaVersion: "10.0.0", ReleaseMode: config.ReleaseMode{Mode: config.TagMode}},
wantErr: false, 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", name: "package.json doesn't match tag",
packageJsonVersion: "10.1.0", packageJsonVersion: "10.1.0",
tagVersion: "10.0.0", metadata: config.Metadata{GrafanaVersion: "10.0.0", ReleaseMode: config.ReleaseMode{Mode: config.TagMode}},
wantErr: true, wantErr: true,
}, },
{ {
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: "non-tag event", name: "test tag event, check should be skipped",
packageJsonVersion: "10.1.0", 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, wantErr: false,
}, },
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
var context cli.Context
err := createTempPackageJson(t, tt.packageJsonVersion) err := createTempPackageJson(t, tt.packageJsonVersion)
require.NoError(t, err) require.NoError(t, err)
defer deleteTempPackageJson(t)
got, _, err := GetConfig(&context, tt.tagVersion) got, _, err := GetConfig(tt.ctx, tt.metadata)
if !tt.wantErr { 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 { 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() t.Helper()
if flag1 != "" { if flag1 != "" {
flagSet.StringVar(&flag1, jobs, "2", "") flagSet.StringVar(&flag1, jobs, "2", "")
@@ -79,6 +88,9 @@ func setFlags(t *testing.T, flag1, flag2 string, flagSet *flag.FlagSet) *flag.Fl
if flag2 != "" { if flag2 != "" {
flagSet.StringVar(&flag2, githubToken, "token", "") flagSet.StringVar(&flag2, githubToken, "token", "")
} }
if flag3 != "" {
flagSet.StringVar(&flag3, buildID, "12345", "")
}
return flagSet return flagSet
} }
@@ -91,12 +103,9 @@ func createTempPackageJson(t *testing.T, version string) error {
err := os.WriteFile("package.json", file, 0644) err := os.WriteFile("package.json", file, 0644)
require.NoError(t, err) require.NoError(t, err)
t.Cleanup(func() {
err := os.RemoveAll("package.json")
require.NoError(t, err)
})
return nil return nil
} }
func deleteTempPackageJson(t *testing.T) {
t.Helper()
err := os.RemoveAll("package.json")
require.NoError(t, err)
}