CI: Call for Grafana version on demand - remove need for version.json (#54638)

* Remove need for version.json

* Fix lint

* log.Info -> fmt.Print

* Add back tests

* Remove non-used file

* Fix lint

* Update grabpl version to v3.0.6
This commit is contained in:
Dimitris Sotirakis
2022-09-09 02:35:10 -04:00
committed by GitHub
parent 942be4215a
commit e277ab0017
13 changed files with 165 additions and 404 deletions
+3 -14
View File
@@ -3,32 +3,21 @@ package main
import (
"fmt"
"log"
"path/filepath"
"strings"
"github.com/urfave/cli/v2"
"github.com/grafana/grafana/pkg/build/compilers"
"github.com/grafana/grafana/pkg/build/config"
"github.com/grafana/grafana/pkg/build/errutil"
"github.com/grafana/grafana/pkg/build/grafana"
"github.com/grafana/grafana/pkg/build/syncutil"
"github.com/urfave/cli/v2"
)
func BuildBackend(ctx *cli.Context) error {
metadata, err := config.GetMetadata(filepath.Join("dist", "version.json"))
metadata, err := GenerateMetadata(ctx)
if err != nil {
return err
}
var version string
// ./ci build-backend v1.0.0
if ctx.NArg() == 1 {
version = strings.TrimPrefix(ctx.Args().Get(0), "v")
} else {
version = metadata.GrafanaVersion
}
version := metadata.GrafanaVersion
var (
edition = config.Edition(ctx.String("edition"))
+1 -2
View File
@@ -2,7 +2,6 @@ package main
import (
"log"
"path/filepath"
"github.com/grafana/grafana/pkg/build/config"
"github.com/grafana/grafana/pkg/build/docker"
@@ -15,7 +14,7 @@ func BuildDocker(c *cli.Context) error {
return err
}
metadata, err := config.GetMetadata(filepath.Join("dist", "version.json"))
metadata, err := GenerateMetadata(c)
if err != nil {
return err
}
+4 -4
View File
@@ -2,7 +2,6 @@ package main
import (
"log"
"strings"
"github.com/grafana/grafana/pkg/build/errutil"
"github.com/grafana/grafana/pkg/build/frontend"
@@ -11,10 +10,11 @@ import (
)
func BuildFrontend(c *cli.Context) error {
version := ""
if c.NArg() == 1 {
version = strings.TrimPrefix(c.Args().Get(0), "v")
metadata, err := GenerateMetadata(c)
if err != nil {
return err
}
version := metadata.GrafanaVersion
cfg, mode, err := frontend.GetConfig(c, version)
if err != nil {
+1 -2
View File
@@ -3,7 +3,6 @@ package main
import (
"context"
"log"
"path/filepath"
"github.com/grafana/grafana/pkg/build/config"
"github.com/grafana/grafana/pkg/build/errutil"
@@ -18,7 +17,7 @@ func BuildInternalPlugins(c *cli.Context) error {
}
const grafanaDir = "."
metadata, err := config.GetMetadata(filepath.Join("dist", "version.json"))
metadata, err := GenerateMetadata(c)
if err != nil {
return err
}
+31 -40
View File
@@ -1,10 +1,8 @@
package main
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"strings"
"github.com/grafana/grafana/pkg/build/config"
@@ -12,25 +10,13 @@ import (
"github.com/urfave/cli/v2"
)
func GenerateVersions(c *cli.Context) error {
func GenerateMetadata(c *cli.Context) (config.Metadata, error) {
var metadata config.Metadata
version := ""
if c.NArg() == 1 {
version = strings.TrimPrefix(c.Args().Get(0), "v")
} else {
buildID, ok := os.LookupEnv("DRONE_BUILD_NUMBER")
if !ok {
return fmt.Errorf("unable to get DRONE_BUILD_NUMBER environmental variable")
}
var err error
version, err = config.GetGrafanaVersion(buildID, ".")
if err != nil {
return err
}
}
event, err := droneutil.GetDroneEventFromEnv()
if err != nil {
return err
return config.Metadata{}, err
}
var releaseMode config.ReleaseMode
@@ -40,13 +26,13 @@ func GenerateVersions(c *cli.Context) error {
case config.Push:
mode, err := config.CheckDroneTargetBranch()
if err != nil {
return err
return config.Metadata{}, err
}
releaseMode = config.ReleaseMode{Mode: mode}
case config.Custom:
mode, err := config.CheckDroneTargetBranch()
if err != nil {
return err
return config.Metadata{}, err
}
// if there is a custom event targeting the main branch, that's an enterprise downstream build
if mode == config.MainBranch {
@@ -55,16 +41,28 @@ func GenerateVersions(c *cli.Context) error {
releaseMode = config.ReleaseMode{Mode: mode}
}
case config.Tag, config.Promote:
tag, ok := os.LookupEnv("DRONE_TAG")
if !ok || tag == "" {
return config.Metadata{}, err
}
version = strings.TrimPrefix(tag, "v")
mode, err := config.CheckSemverSuffix()
if err != nil {
return err
return config.Metadata{}, err
}
releaseMode = mode
}
if version == "" {
version, err = generateVersionFromBuildID()
if err != nil {
return config.Metadata{}, err
}
}
currentCommit, err := config.GetDroneCommit()
if err != nil {
return err
return config.Metadata{}, err
}
metadata = config.Metadata{
GrafanaVersion: version,
@@ -75,25 +73,18 @@ func GenerateVersions(c *cli.Context) error {
fmt.Printf("building Grafana version: %s, release mode: %+v", metadata.GrafanaVersion, metadata.ReleaseMode)
jsonMetadata, err := json.Marshal(&metadata)
return metadata, nil
}
func generateVersionFromBuildID() (string, error) {
buildID, ok := os.LookupEnv("DRONE_BUILD_NUMBER")
if !ok {
return "", fmt.Errorf("unable to get DRONE_BUILD_NUMBER environmental variable")
}
var err error
version, err := config.GetGrafanaVersion(buildID, ".")
if err != nil {
return fmt.Errorf("error marshalling metadata, %w", err)
}
const distDir = "dist"
if _, err := os.Stat(distDir); os.IsNotExist(err) {
if err := os.RemoveAll(distDir); err != nil {
return err
}
if err := os.Mkdir(distDir, 0750); err != nil {
return err
}
// nolint:gosec
if err := os.WriteFile(filepath.Join(distDir, "version.json"), jsonMetadata, 0664); err != nil {
return err
}
return "", err
}
return nil
return version, nil
}
+81
View File
@@ -0,0 +1,81 @@
package main
import (
"flag"
"os"
"testing"
"github.com/grafana/grafana/pkg/build/config"
"github.com/stretchr/testify/require"
"github.com/urfave/cli/v2"
)
const (
DroneBuildEvent = "DRONE_BUILD_EVENT"
DroneTargetBranch = "DRONE_TARGET_BRANCH"
DroneTag = "DRONE_TAG"
DroneSemverPrerelease = "DRONE_SEMVER_PRERELEASE"
DroneBuildNumber = "DRONE_BUILD_NUMBER"
)
const (
hashedGrafanaVersion = "9.2.0-12345pre"
versionedBranch = "v9.2.x"
)
func TestGetMetadata(t *testing.T) {
tcs := []struct {
envMap map[string]string
expVersion string
mode config.ReleaseMode
}{
{map[string]string{DroneBuildEvent: config.PullRequest, DroneTargetBranch: "", DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.PullRequestMode}},
{map[string]string{DroneBuildEvent: config.Push, DroneTargetBranch: versionedBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.ReleaseBranchMode}},
{map[string]string{DroneBuildEvent: config.Push, DroneTargetBranch: config.MainBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.MainMode}},
{map[string]string{DroneBuildEvent: config.Custom, DroneTargetBranch: versionedBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.ReleaseBranchMode}},
{map[string]string{DroneBuildEvent: config.Custom, DroneTargetBranch: config.MainBranch, DroneTag: "", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, hashedGrafanaVersion, config.ReleaseMode{Mode: config.Custom}},
{map[string]string{DroneBuildEvent: config.Tag, DroneTargetBranch: "", DroneTag: "v9.2.0", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, "9.2.0", config.ReleaseMode{Mode: config.TagMode, IsBeta: false, IsTest: false}},
{map[string]string{DroneBuildEvent: config.Tag, DroneTargetBranch: "", DroneTag: "v9.2.0-beta", DroneSemverPrerelease: "beta", DroneBuildNumber: "12345"}, "9.2.0-beta", config.ReleaseMode{Mode: config.TagMode, IsBeta: true, IsTest: false}},
{map[string]string{DroneBuildEvent: config.Tag, DroneTargetBranch: "", DroneTag: "v9.2.0-test", DroneSemverPrerelease: "test", DroneBuildNumber: "12345"}, "9.2.0-test", config.ReleaseMode{Mode: config.TagMode, IsBeta: false, IsTest: true}},
{map[string]string{DroneBuildEvent: config.Promote, DroneTargetBranch: "", DroneTag: "v9.2.0", DroneSemverPrerelease: "", DroneBuildNumber: "12345"}, "9.2.0", config.ReleaseMode{Mode: config.TagMode, IsBeta: false, IsTest: false}},
{map[string]string{DroneBuildEvent: config.Promote, DroneTargetBranch: "", DroneTag: "v9.2.0-beta", DroneSemverPrerelease: "beta", DroneBuildNumber: "12345"}, "9.2.0-beta", config.ReleaseMode{Mode: config.TagMode, IsBeta: true, IsTest: false}},
{map[string]string{DroneBuildEvent: config.Promote, DroneTargetBranch: "", DroneTag: "v9.2.0-test", DroneSemverPrerelease: "test", DroneBuildNumber: "12345"}, "9.2.0-test", config.ReleaseMode{Mode: config.TagMode, IsBeta: false, IsTest: true}},
}
ctx := cli.NewContext(cli.NewApp(), &flag.FlagSet{}, nil)
for _, tc := range tcs {
t.Run("Should return valid metadata, ", func(t *testing.T) {
setUpEnv(t, tc.envMap)
testMetadata(t, ctx, tc.expVersion, tc.mode)
})
}
}
func testMetadata(t *testing.T, ctx *cli.Context, version string, releaseMode config.ReleaseMode) {
t.Helper()
metadata, err := GenerateMetadata(ctx)
require.NoError(t, err)
t.Run("with a valid version", func(t *testing.T) {
expVersion := metadata.GrafanaVersion
require.Equal(t, expVersion, version)
})
t.Run("with a valid release mode from the built-in list", func(t *testing.T) {
expMode := metadata.ReleaseMode
require.NoError(t, err)
require.Equal(t, expMode, releaseMode)
})
}
func setUpEnv(t *testing.T, envMap map[string]string) {
t.Helper()
os.Clearenv()
err := os.Setenv("DRONE_COMMIT", "abcd12345")
require.NoError(t, err)
for k, v := range envMap {
err := os.Setenv(k, v)
require.NoError(t, err)
}
}
-1
View File
@@ -11,7 +11,6 @@ import (
func main() {
app := cli.NewApp()
app.Before = GenerateVersions
app.Commands = cli.Commands{
{
Name: "build-backend",
+3
View File
@@ -0,0 +1,3 @@
{
"version": "9.2.0-pre"
}