CI: Split enterprise2 pipelines (#57997)

* Add publishimages_enterprise2.go file

* Add push.go

* Modify build files

* Modify starlark files

* Remove promotion pipeline

* Remove unused args

* Handle tag for custom events
This commit is contained in:
Dimitris Sotirakis
2022-11-21 20:06:00 +02:00
committed by GitHub
parent 1f4834a144
commit 44402ff726
12 changed files with 1084 additions and 71 deletions
+14 -3
View File
@@ -19,6 +19,11 @@ func GenerateMetadata(c *cli.Context) (config.Metadata, error) {
return config.Metadata{}, err
}
tag, ok := os.LookupEnv("DRONE_TAG")
if !ok {
fmt.Println("DRONE_TAG envvar not present, %w", err)
}
var releaseMode config.ReleaseMode
switch event {
case string(config.PullRequestMode):
@@ -30,6 +35,13 @@ func GenerateMetadata(c *cli.Context) (config.Metadata, error) {
}
releaseMode = config.ReleaseMode{Mode: mode}
case config.Custom:
if edition, _ := os.LookupEnv("EDITION"); edition == string(config.EditionEnterprise2) {
releaseMode = config.ReleaseMode{Mode: config.TagMode}
if tag != "" {
version = strings.TrimPrefix(tag, "v")
}
break
}
mode, err := config.CheckDroneTargetBranch()
if err != nil {
return config.Metadata{}, err
@@ -41,9 +53,8 @@ func GenerateMetadata(c *cli.Context) (config.Metadata, error) {
releaseMode = config.ReleaseMode{Mode: mode}
}
case config.Tag, config.Promote:
tag, ok := os.LookupEnv("DRONE_TAG")
if !ok || tag == "" {
return config.Metadata{}, err
if tag == "" {
return config.Metadata{}, fmt.Errorf("DRONE_TAG envvar not present for a tag/promotion event, %w", err)
}
version = strings.TrimPrefix(tag, "v")
mode, err := config.CheckSemverSuffix()
+12
View File
@@ -187,6 +187,18 @@ func main() {
&editionFlag,
},
},
{
Name: "publish-enterprise2",
Usage: "Handle Grafana Enterprise2 Docker images",
ArgsUsage: "[version]",
Action: Enterprise2,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "dockerhub-repo",
Usage: "DockerHub repo to push images",
},
},
},
},
},
},
+100
View File
@@ -0,0 +1,100 @@
package main
import (
"fmt"
"log"
"os"
"os/exec"
"github.com/grafana/grafana/pkg/build/config"
"github.com/grafana/grafana/pkg/build/docker"
"github.com/grafana/grafana/pkg/build/gcloud"
"github.com/urfave/cli/v2"
)
func Enterprise2(c *cli.Context) error {
if c.NArg() > 0 {
if err := cli.ShowSubcommandHelp(c); err != nil {
return cli.NewExitError(err.Error(), 1)
}
return cli.NewExitError("", 1)
}
if err := gcloud.ActivateServiceAccount(); err != nil {
return fmt.Errorf("couldn't activate service account, err: %w", err)
}
metadata, err := GenerateMetadata(c)
if err != nil {
return err
}
buildConfig, err := config.GetBuildConfig(metadata.ReleaseMode.Mode)
if err != nil {
return err
}
cfg := docker.Config{
Archs: buildConfig.Docker.Architectures,
Distribution: buildConfig.Docker.Distribution,
DockerHubRepo: c.String("dockerhub-repo"),
Tag: metadata.GrafanaVersion,
}
err = dockerLoginEnterprise2()
if err != nil {
return err
}
var distributionStr []string
for _, distribution := range cfg.Distribution {
switch distribution {
case alpine:
distributionStr = append(distributionStr, "")
case ubuntu:
distributionStr = append(distributionStr, "-ubuntu")
default:
return fmt.Errorf("unrecognized distribution %q", distribution)
}
}
for _, distribution := range distributionStr {
var imageFileNames []string
for _, arch := range cfg.Archs {
imageFilename := fmt.Sprintf("%s:%s%s-%s", cfg.DockerHubRepo, cfg.Tag, distribution, arch)
err := docker.PushImage(imageFilename)
if err != nil {
return err
}
imageFileNames = append(imageFileNames, imageFilename)
}
manifest := fmt.Sprintf("%s:%s%s", cfg.DockerHubRepo, cfg.Tag, distribution)
args := []string{"manifest", "create", manifest}
args = append(args, imageFileNames...)
//nolint:gosec
cmd := exec.Command("docker", args...)
cmd.Env = append(os.Environ(), "DOCKER_CLI_EXPERIMENTAL=enabled")
if output, err := cmd.CombinedOutput(); err != nil {
return fmt.Errorf("failed to create Docker manifest: %w\n%s", err, output)
}
err = docker.PushManifest(manifest)
if err != nil {
return err
}
}
return nil
}
func dockerLoginEnterprise2() error {
log.Println("Docker login...")
cmd := exec.Command("gcloud", "auth", "configure-docker")
if out, err := cmd.CombinedOutput(); err != nil {
return fmt.Errorf("error logging in to DockerHub: %s %q", out, err)
}
log.Println("Successful login!")
return nil
}