mirror of https://github.com/grafana/grafana
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 lintpull/70043/head
parent
9f7776f073
commit
a6b524fd56
@ -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 |
||||
} |
||||
|
@ -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) |
||||
} |
Loading…
Reference in new issue