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
This commit is contained in:
Dimitris Sotirakis 2023-06-14 09:56:19 +03:00 committed by GitHub
parent 9f7776f073
commit a6b524fd56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 118 additions and 8 deletions

View File

@ -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
}

View File

@ -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)
}