[v9.5.x] NPM packages: Fail build-frontend-packages step if package.json and input tag differ (#70037)
NPM packages: Fail `build-frontend-packages` step if `package.json` and input tag differ (#70011)
* Fail if package.json version is different than the tag
* Add tests
* Update message
* Small refactoring
* Fix lint
(cherry picked from commit a6b524fd56)
Co-authored-by: Dimitris Sotirakis <dimitrios.sotirakis@grafana.com>
This commit is contained in:
co-authored by
Dimitris Sotirakis
parent
0882b84c27
commit
9a3d3a7f8a
@@ -100,7 +100,7 @@ require (
|
|||||||
github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf
|
github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf
|
||||||
github.com/ua-parser/uap-go v0.0.0-20211112212520-00c877edfe0f
|
github.com/ua-parser/uap-go v0.0.0-20211112212520-00c877edfe0f
|
||||||
github.com/uber/jaeger-client-go v2.29.1+incompatible
|
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/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae
|
||||||
github.com/yalue/merged_fs v1.2.2
|
github.com/yalue/merged_fs v1.2.2
|
||||||
github.com/yudai/gojsondiff v1.0.0
|
github.com/yudai/gojsondiff v1.0.0
|
||||||
@@ -331,6 +331,7 @@ require (
|
|||||||
github.com/unknwon/com v1.0.1 // indirect
|
github.com/unknwon/com v1.0.1 // indirect
|
||||||
github.com/unknwon/log v0.0.0-20150304194804-e617c87089d3 // indirect
|
github.com/unknwon/log v0.0.0-20150304194804-e617c87089d3 // indirect
|
||||||
github.com/weaveworks/promrus v1.2.0 // 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.opentelemetry.io/otel/metric v0.37.0 // indirect
|
||||||
go.starlark.net v0.0.0-20221020143700-22309ac47eac // indirect
|
go.starlark.net v0.0.0-20221020143700-22309ac47eac // indirect
|
||||||
gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect
|
gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect
|
||||||
|
|||||||
@@ -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 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 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
|
||||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
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 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
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=
|
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 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk=
|
||||||
github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
|
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/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 h1:vXHTpJBluJryju7BBpytr3PDIkzsPMpiEknxVGPhN/I=
|
||||||
github.com/yalue/merged_fs v1.2.2/go.mod h1:WqqchfVYQyclV2tnR7wtRhBddzBvLVR83Cjw9BKQw0M=
|
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=
|
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
||||||
|
|||||||
@@ -1,31 +1,39 @@
|
|||||||
package frontend
|
package frontend
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/urfave/cli/v2"
|
"fmt"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/build/config"
|
"github.com/grafana/grafana/pkg/build/config"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
const GrafanaDir = "."
|
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{
|
cfg := config.Config{
|
||||||
NumWorkers: c.Int("jobs"),
|
NumWorkers: c.Int("jobs"),
|
||||||
GitHubToken: c.String("github-token"),
|
GitHubToken: c.String("github-token"),
|
||||||
PackageVersion: version,
|
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 version == "" {
|
if inputTagVersion == "" {
|
||||||
buildID := c.String("build-id")
|
cfg.PackageVersion = packageVersion
|
||||||
var err error
|
|
||||||
version, err = config.GetGrafanaVersion(buildID, GrafanaDir)
|
|
||||||
cfg.PackageVersion = version
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return config.Config{}, config.EditionOSS, cli.Exit(err.Error(), 1)
|
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
|
return cfg, mode, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user