diff --git a/.drone.yml b/.drone.yml index 94458747507..e9dcd1d7026 100644 --- a/.drone.yml +++ b/.drone.yml @@ -17,7 +17,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -62,7 +62,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -141,7 +141,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -246,7 +246,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -509,7 +509,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -612,7 +612,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -696,7 +696,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -785,7 +785,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -861,7 +861,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -965,7 +965,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1399,7 +1399,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1503,7 +1503,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -1599,7 +1599,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1705,7 +1705,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2013,7 +2013,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2152,7 +2152,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2248,7 +2248,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -2306,7 +2306,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2654,7 +2654,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2839,7 +2839,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2981,7 +2981,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/windows/grabpl.exe -OutFile grabpl.exe - git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git" - cd grafana-enterprise @@ -3057,7 +3057,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3137,7 +3137,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3200,7 +3200,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3281,7 +3281,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3345,7 +3345,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3385,7 +3385,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3425,7 +3425,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3485,7 +3485,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3564,7 +3564,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3641,7 +3641,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3682,7 +3682,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3957,7 +3957,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4090,7 +4090,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4180,7 +4180,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -4228,7 +4228,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4565,7 +4565,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4741,7 +4741,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4874,7 +4874,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.5/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.6/windows/grabpl.exe -OutFile grabpl.exe - git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git" - cd grafana-enterprise @@ -5115,6 +5115,6 @@ kind: secret name: packages_secret_access_key --- kind: signature -hmac: 0b1eda9462f2da0c0991a3e774e2073b082924705ef8d97dd58a40a8c314d9cd +hmac: 6cefdb187edd20260ae51a32f160df1b5523fc48152112284db283b1152f8f4a ... diff --git a/pkg/build/cmd/buildbackend.go b/pkg/build/cmd/buildbackend.go index e2b9b2e67f3..2fd89830b81 100644 --- a/pkg/build/cmd/buildbackend.go +++ b/pkg/build/cmd/buildbackend.go @@ -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")) diff --git a/pkg/build/cmd/builddocker.go b/pkg/build/cmd/builddocker.go index 34d3f3b4862..8718dfd35cd 100644 --- a/pkg/build/cmd/builddocker.go +++ b/pkg/build/cmd/builddocker.go @@ -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 } diff --git a/pkg/build/cmd/buildfrontend.go b/pkg/build/cmd/buildfrontend.go index a6e1bd1f0ad..2874a119403 100644 --- a/pkg/build/cmd/buildfrontend.go +++ b/pkg/build/cmd/buildfrontend.go @@ -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 { diff --git a/pkg/build/cmd/buildinternalplugins.go b/pkg/build/cmd/buildinternalplugins.go index 20788a86f05..5420398b07f 100644 --- a/pkg/build/cmd/buildinternalplugins.go +++ b/pkg/build/cmd/buildinternalplugins.go @@ -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 } diff --git a/pkg/build/cmd/genversions.go b/pkg/build/cmd/genversions.go index cba987df36c..5f088bfa343 100644 --- a/pkg/build/cmd/genversions.go +++ b/pkg/build/cmd/genversions.go @@ -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) - 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 nil + 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 "", err + } + return version, nil } diff --git a/pkg/build/cmd/genversions_test.go b/pkg/build/cmd/genversions_test.go new file mode 100644 index 00000000000..c34b8915da2 --- /dev/null +++ b/pkg/build/cmd/genversions_test.go @@ -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) + } +} diff --git a/pkg/build/cmd/main.go b/pkg/build/cmd/main.go index c2beba847d5..fe7db03c8e9 100644 --- a/pkg/build/cmd/main.go +++ b/pkg/build/cmd/main.go @@ -11,7 +11,6 @@ import ( func main() { app := cli.NewApp() - app.Before = GenerateVersions app.Commands = cli.Commands{ { Name: "build-backend", diff --git a/pkg/build/cmd/package.json b/pkg/build/cmd/package.json new file mode 100644 index 00000000000..1a5184b05c7 --- /dev/null +++ b/pkg/build/cmd/package.json @@ -0,0 +1,3 @@ +{ + "version": "9.2.0-pre" +} diff --git a/pkg/build/config/version.go b/pkg/build/config/version.go index bf49087af58..9103579f84d 100644 --- a/pkg/build/config/version.go +++ b/pkg/build/config/version.go @@ -2,10 +2,7 @@ package config import ( "encoding/json" - "errors" "fmt" - "io" - "log" "os" "path/filepath" "regexp" @@ -57,40 +54,6 @@ func (md *Metadata) GetReleaseMode() (ReleaseMode, error) { // than the way it will be built in 'main' type VersionMap map[VersionMode]Version -// GetMetadata attempts to read the JSON file located at 'path' and decode it as a Metadata{} type. -// If the provided path does not exist, then an error is not returned. Instead, an empty metadata is returned with no error. -func GetMetadata(path string) (*Metadata, error) { - if _, err := os.Stat(path); err != nil { - if errors.Is(err, os.ErrNotExist) { - return &Metadata{}, nil - } - return nil, err - } - // Ignore gosec G304 as this function is only used in the build process. - //nolint:gosec - file, err := os.Open(path) - if err != nil { - return nil, err - } - defer func() { - if err := file.Close(); err != nil { - log.Printf("error closing file at '%s': %s", path, err.Error()) - } - }() - - return DecodeMetadata(file) -} - -// DecodeMetadata decodes the data in the io.Reader 'r' as Metadata. -func DecodeMetadata(r io.Reader) (*Metadata, error) { - m := &Metadata{} - if err := json.NewDecoder(r).Decode(m); err != nil { - return nil, err - } - - return m, nil -} - // GetVersions reads the embedded config.json and decodes it. func GetVersion(mode VersionMode) (*Version, error) { if v, ok := Versions[mode]; ok { diff --git a/pkg/build/config/version_json_test.go b/pkg/build/config/version_json_test.go deleted file mode 100644 index 43aec98d5cb..00000000000 --- a/pkg/build/config/version_json_test.go +++ /dev/null @@ -1,167 +0,0 @@ -package config_test - -var configJSON = []byte(`{ - "pull_request": { - "variants": [ - "linux-amd64", - "linux-amd64-musl", - "darwin-amd64", - "windows-amd64" - ], - "pluginSignature": { - "sign": false, - "adminSign": false - }, - "docker": { - "shouldSave": false, - "archs": [ - "amd64" - ] - } - }, - "main": { - "variants": [ - "linux-armv6", - "linux-armv7", - "linux-armv7-musl", - "linux-arm64", - "linux-arm64-musl", - "darwin-amd64", - "windows-amd64", - "linux-amd64", - "linux-amd64-musl" - ], - "pluginSignature": { - "sign": true, - "adminSign": true - }, - "docker": { - "shouldSave": false, - "archs": [ - "amd64", - "arm64", - "armv7" - ] - }, - "packagesBucket": "grafana-downloads", - "CDNAssetsBucket": "grafana-static-assets" - }, - "branch": { - "variants": [ - "linux-armv6", - "linux-armv7", - "linux-armv7-musl", - "linux-arm64", - "linux-arm64-musl", - "darwin-amd64", - "windows-amd64", - "linux-amd64", - "linux-amd64-musl" - ], - "pluginSignature": { - "sign": true, - "adminSign": true - }, - "docker": { - "shouldSave": true, - "archs": [ - "amd64", - "arm64", - "armv7" - ] - }, - "packagesBucket": "grafana-downloads", - "packagesBucketEnterprise2": "grafana-downloads-enterprise2", - "CDNAssetsBucket": "grafana-static-assets" - }, - "release": { - "variants": [ - "linux-armv6", - "linux-armv7", - "linux-armv7-musl", - "linux-arm64", - "linux-arm64-musl", - "darwin-amd64", - "windows-amd64", - "linux-amd64", - "linux-amd64-musl" - ], - "pluginSignature": { - "sign": true, - "adminSign": true - }, - "docker": { - "shouldSave": true, - "archs": [ - "amd64", - "arm64", - "armv7" - ] - }, - "packagesBucket": "grafana-prerelease/artifacts/downloads", - "CDNAssetsBucket": "grafana-prerelease", - "CDNAssetsDir": "artifacts/static-assets", - "storybookBucket": "grafana-prerelease", - "storybookSrcDir": "artifacts/storybook" - }, - "beta": { - "variants": [ - "linux-armv6", - "linux-armv7", - "linux-armv7-musl", - "linux-arm64", - "linux-arm64-musl", - "darwin-amd64", - "windows-amd64", - "linux-amd64", - "linux-amd64-musl" - ], - "pluginSignature": { - "sign": true, - "adminSign": true - }, - "docker": { - "shouldSave": true, - "archs": [ - "amd64", - "arm64", - "armv7" - ] - }, - "packagesBucket": "grafana-prerelease/artifacts/downloads", - "CDNAssetsBucket": "grafana-prerelease", - "CDNAssetsDir": "artifacts/static-assets", - "storybookBucket": "grafana-prerelease", - "storybookSrcDir": "artifacts/storybook" - }, - "test": { - "variants": [ - "linux-armv6", - "linux-armv7", - "linux-armv7-musl", - "linux-arm64", - "linux-arm64-musl", - "darwin-amd64", - "windows-amd64", - "linux-amd64", - "linux-amd64-musl" - ], - "pluginSignature": { - "sign": true, - "adminSign": true - }, - "docker": { - "shouldSave": true, - "archs": [ - "amd64", - "arm64", - "armv7" - ] - }, - "packagesBucket": "grafana-prerelease/artifacts/downloads", - "CDNAssetsBucket": "grafana-prerelease", - "CDNAssetsDir": "artifacts/static-assets", - "storybookBucket": "grafana-prerelease", - "storybookSrcDir": "artifacts/storybook" - } -}`) diff --git a/pkg/build/config/version_test.go b/pkg/build/config/version_test.go deleted file mode 100644 index 1307e2ae27a..00000000000 --- a/pkg/build/config/version_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package config_test - -import ( - "encoding/json" - "os" - "path/filepath" - "testing" - - "github.com/grafana/grafana/pkg/build/config" - "github.com/stretchr/testify/require" -) - -func TestGetMetadata(t *testing.T) { - tcs := []struct { - version string - mode config.ReleaseMode - }{ - {"v1.2.3", config.ReleaseMode{Mode: config.TagMode}}, - {"v1.2.3-12345pre", config.ReleaseMode{Mode: config.PullRequestMode}}, - {"v1.2.3-beta1", config.ReleaseMode{Mode: config.TagMode, IsBeta: true}}, - {"v1.2.3-test1", config.ReleaseMode{Mode: config.TagMode, IsTest: true}}, - {"v1.2.3-foobar", config.ReleaseMode{Mode: config.ReleaseBranchMode}}, - {"v1.2.3-foobar", config.ReleaseMode{Mode: config.PullRequestMode}}, - } - - t.Run("Should return empty metadata, dist/ is not present", func(t *testing.T) { - dir := t.TempDir() - metadata, err := config.GetMetadata(filepath.Join(dir, "dist")) - require.NoError(t, err) - require.Equal(t, metadata, &config.Metadata{}) - if err := os.RemoveAll(dir); err != nil { - t.Fatal(err) - } - }) - - for _, tc := range tcs { - dir := t.TempDir() - t.Run("Should return valid metadata, tag mode, ", func(t *testing.T) { - testMetadata(t, dir, tc.version, tc.mode) - }) - if err := os.RemoveAll(dir); err != nil { - t.Fatal(err) - } - } -} - -func testMetadata(t *testing.T, dir string, version string, releaseMode config.ReleaseMode) { - t.Helper() - file := filepath.Join(dir, "version.json") - createVersionJSON(t, version, file, releaseMode) - - metadata, err := config.GetMetadata(file) - 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) - }) - - t.Run("with a valid configuration from a JSON file", func(t *testing.T) { - version, err := config.GetVersion(metadata.ReleaseMode.Mode) - require.NoError(t, err) - parsed := verModeFromConfig(t, metadata) - require.EqualValues(t, parsed, *version) - }) -} - -func verModeFromConfig(t *testing.T, metadata *config.Metadata) config.Version { - t.Helper() - - metadataComp := config.VersionMap{} - - require.NoError(t, json.Unmarshal(configJSON, &metadataComp)) - - return metadataComp[metadata.ReleaseMode.Mode] -} - -func createVersionJSON(t *testing.T, version string, file string, releaseMode config.ReleaseMode) { - t.Helper() - - metadata := &config.Metadata{ - GrafanaVersion: version, - ReleaseMode: releaseMode, - } - - //nolint:gosec - f, err := os.Create(file) - require.NoError(t, err) - - require.NoError(t, json.NewEncoder(f).Encode(metadata)) -} diff --git a/scripts/drone/steps/lib.star b/scripts/drone/steps/lib.star index 1f9da4ef248..8d22d03dce8 100644 --- a/scripts/drone/steps/lib.star +++ b/scripts/drone/steps/lib.star @@ -1,6 +1,6 @@ load('scripts/drone/vault.star', 'from_secret', 'github_token', 'pull_secret', 'drone_token', 'prerelease_bucket') -grabpl_version = 'v3.0.5' +grabpl_version = 'v3.0.6' build_image = 'grafana/build-container:1.5.9' publish_image = 'grafana/grafana-ci-deploy:1.3.3' deploy_docker_image = 'us.gcr.io/kubernetes-dev/drone/plugins/deploy-image'