diff --git a/go.mod b/go.mod index 5048105bf56..f85d3b78ed1 100644 --- a/go.mod +++ b/go.mod @@ -100,7 +100,7 @@ require ( github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf github.com/ua-parser/uap-go v0.0.0-20211112212520-00c877edfe0f github.com/uber/jaeger-client-go v2.29.1+incompatible - github.com/urfave/cli/v2 v2.3.0 + github.com/urfave/cli/v2 v2.25.0 github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae github.com/yalue/merged_fs v1.2.2 github.com/yudai/gojsondiff v1.0.0 @@ -331,6 +331,7 @@ require ( github.com/unknwon/com v1.0.1 // indirect github.com/unknwon/log v0.0.0-20150304194804-e617c87089d3 // indirect github.com/weaveworks/promrus v1.2.0 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.opentelemetry.io/otel/metric v0.37.0 // indirect go.starlark.net v0.0.0-20221020143700-22309ac47eac // indirect gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect diff --git a/go.sum b/go.sum index 26c56c8389b..bb8fd40767d 100644 --- a/go.sum +++ b/go.sum @@ -2265,6 +2265,8 @@ github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8= github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/urfave/cli/v2 v2.25.0 h1:ykdZKuQey2zq0yin/l7JOm9Mh+pg72ngYMeB0ABn6q8= +github.com/urfave/cli/v2 v2.25.0/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= @@ -2317,6 +2319,8 @@ github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6Ut github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yalue/merged_fs v1.2.2 h1:vXHTpJBluJryju7BBpytr3PDIkzsPMpiEknxVGPhN/I= github.com/yalue/merged_fs v1.2.2/go.mod h1:WqqchfVYQyclV2tnR7wtRhBddzBvLVR83Cjw9BKQw0M= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= diff --git a/pkg/build/frontend/config.go b/pkg/build/frontend/config.go index 5aa6bcc4294..3d244faa248 100644 --- a/pkg/build/frontend/config.go +++ b/pkg/build/frontend/config.go @@ -1,31 +1,39 @@ package frontend import ( - "github.com/urfave/cli/v2" + "fmt" "github.com/grafana/grafana/pkg/build/config" + "github.com/urfave/cli/v2" ) const GrafanaDir = "." -func GetConfig(c *cli.Context, version string) (config.Config, config.Edition, error) { +func GetConfig(c *cli.Context, inputTagVersion string) (config.Config, config.Edition, error) { cfg := config.Config{ NumWorkers: c.Int("jobs"), GitHubToken: c.String("github-token"), - PackageVersion: version, + PackageVersion: inputTagVersion, } 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 version == "" { - buildID := c.String("build-id") - var err error - version, err = config.GetGrafanaVersion(buildID, GrafanaDir) - cfg.PackageVersion = version + if inputTagVersion == "" { + cfg.PackageVersion = packageVersion if err != nil { return config.Config{}, config.EditionOSS, cli.Exit(err.Error(), 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 return cfg, mode, nil } diff --git a/pkg/build/frontend/config_test.go b/pkg/build/frontend/config_test.go new file mode 100644 index 00000000000..a456887dbcb --- /dev/null +++ b/pkg/build/frontend/config_test.go @@ -0,0 +1,102 @@ +package frontend + +import ( + "encoding/json" + "flag" + "os" + "testing" + + "github.com/stretchr/testify/require" + "github.com/urfave/cli/v2" +) + +const ( + jobs = "jobs" + githubToken = "github-token" +) + +type packageJson struct { + Version string `json:"version"` +} + +var app = cli.NewApp() + +func TestGetConfig(t *testing.T) { + tests := []struct { + ctx *cli.Context + name string + packageJsonVersion string + tagVersion string + wantErr bool + }{ + { + 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", + wantErr: false, + }, + { + 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", + wantErr: true, + }, + { + ctx: cli.NewContext(app, setFlags(t, jobs, githubToken, flag.NewFlagSet("flagSet", flag.ContinueOnError)), nil), + name: "non-tag event", + packageJsonVersion: "10.1.0", + tagVersion: "", + 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) + if !tt.wantErr { + require.Equal(t, got.PackageVersion, tt.packageJsonVersion) + } + + if tt.wantErr { + require.Equal(t, got.PackageVersion, "") + require.Error(t, err) + } + }) + } +} + +func setFlags(t *testing.T, flag1, flag2 string, flagSet *flag.FlagSet) *flag.FlagSet { + t.Helper() + if flag1 != "" { + flagSet.StringVar(&flag1, jobs, "2", "") + } + if flag2 != "" { + flagSet.StringVar(&flag2, githubToken, "token", "") + } + return flagSet +} + +func createTempPackageJson(t *testing.T, version string) error { + t.Helper() + + data := packageJson{Version: version} + file, _ := json.MarshalIndent(data, "", " ") + + err := os.WriteFile("package.json", file, 0644) + require.NoError(t, err) + + return nil +} + +func deleteTempPackageJson(t *testing.T) { + t.Helper() + + err := os.RemoveAll("package.json") + require.NoError(t, err) +}