Files
Kevin Minehart 13f4cf162e CI: move grafana-build into pkg/build (#105640)
* move grafana-build into pkg/build
2025-05-20 10:48:00 -05:00

260 lines
7.7 KiB
Go

package cmd
import (
"github.com/grafana/grafana/pkg/build/daggerbuild/arguments"
"github.com/grafana/grafana/pkg/build/daggerbuild/cmd/flags"
"github.com/urfave/cli/v2"
)
var FlagPackage = &cli.StringSliceFlag{
Name: "package",
Usage: "Path to a grafana.tar.gz package used as input. This command will process each package provided separately and produce an equal number of applicable outputs",
}
var FlagNameOverride = &cli.StringFlag{
Name: "name",
Usage: "Overrides any calculation for name in the package with the value provided here",
}
// PackageInputFlags are used for commands that require a grafana package as input.
// These commands are exclusively used outside of the CI process and are typically used in the CD process where a grafana.tar.gz has already been created.
var PackageInputFlags = []cli.Flag{
FlagPackage,
FlagNameOverride,
}
// GCPFlags are used in commands that need to authenticate with Google Cloud platform using the Google Cloud SDK
var GCPFlags = []cli.Flag{
&cli.StringFlag{
Name: "gcp-service-account-key-base64",
Usage: "Provides a service-account key encoded in base64 to use to authenticate with the Google Cloud SDK",
},
&cli.StringFlag{
Name: "gcp-service-account-key",
Usage: "Provides a service-account keyfile to use to authenticate with the Google Cloud SDK. If not provided or is empty, then $XDG_CONFIG_HOME/gcloud will be mounted in the container",
},
}
// NPMFlags are used in commands that need to authenticate with package registries to publish NPM packages
var NPMFlags = []cli.Flag{
&cli.StringFlag{
Name: "registry",
Usage: "The package registry to publish packages",
Value: "registry.npmjs.org",
},
&cli.StringFlag{
Name: "token",
Usage: "Provides a token to use to authenticate with the package registry",
Required: true,
},
&cli.StringSliceFlag{
Name: "tag",
Usage: "Provides the tags to use when publishing packages",
Required: true,
},
}
// PublishFlags are flags that are used in commands that create artifacts.
// Anything that creates an artifact should have the option to specify a local folder destination or a remote destination.
var PublishFlags = flags.PublishFlags
// GrafanaFlags are flags that are required when working with the grafana source code.
var GrafanaFlags = []cli.Flag{
&cli.BoolFlag{
Name: "grafana",
Usage: "If set, initialize Grafana",
Required: false,
Value: true,
},
&cli.StringFlag{
Name: "grafana-dir",
Usage: "Local Grafana dir to use, instead of git clone",
Required: false,
},
&cli.StringFlag{
Name: "grafana-repo",
Usage: "Grafana repo to clone, not valid if --grafana-dir is set",
Required: false,
Value: "https://github.com/grafana/grafana.git",
},
&cli.StringFlag{
Name: "grafana-ref",
Usage: "Grafana ref to clone, not valid if --grafana-dir is set",
Required: false,
Value: "main",
},
&cli.BoolFlag{
Name: "enterprise",
Usage: "If set, initialize Grafana Enterprise",
Value: false,
},
&cli.StringFlag{
Name: "enterprise-dir",
Usage: "Local Grafana Enterprise dir to use, instead of git clone",
Required: false,
},
&cli.StringFlag{
Name: "enterprise-repo",
Usage: "Grafana Enterprise repo to clone, not valid if --grafana-dir is set",
Required: false,
Value: "https://github.com/grafana/grafana-enterprise.git",
},
&cli.StringFlag{
Name: "enterprise-ref",
Usage: "Grafana Enterprise ref to clone, not valid if --enterprise-dir is set",
Required: false,
Value: "main",
},
&cli.StringFlag{
Name: "github-token",
Usage: "Github token to use for git cloning, by default will be pulled from GitHub",
Required: false,
},
&cli.StringSliceFlag{
Name: "env",
Aliases: []string{"e"},
Usage: "Set a build-time environment variable using the same syntax as 'docker run'. Example: `--env=GOOS=linux --env=GOARCH=amd64`",
},
&cli.StringSliceFlag{
Name: "go-tags",
Usage: "Sets the go `-tags` flag when compiling the backend",
},
&cli.StringFlag{
Name: "go-version",
Usage: "The version of Go to be used for building the Grafana backend",
Required: false,
Value: "1.21.8",
},
&cli.StringFlag{
Name: "yarn-cache",
Usage: "If there is a yarn cache directory, then mount that when running 'yarn install' instead of creating a cache directory",
},
}
// DockerFlags are used when producing docker images.
var DockerFlags = []cli.Flag{
arguments.DockerRegistryFlag,
arguments.AlpineImageFlag,
arguments.UbuntuImageFlag,
arguments.TagFormatFlag,
arguments.UbuntuTagFormatFlag,
arguments.DockerOrgFlag,
}
var DockerPublishFlags = []cli.Flag{
&cli.StringFlag{
Name: "username",
Usage: "The username to login to the docker registry when publishing images",
Required: true,
},
&cli.StringFlag{
Name: "password",
Usage: "The password to login to the docker registry when publishing images",
Required: true,
},
&cli.StringFlag{
Name: "repo",
Usage: "Overrides the repository of the images",
},
&cli.BoolFlag{
Name: "latest",
Usage: "Tags the published images as latest",
},
}
var FlagDistros = &cli.StringSliceFlag{
Name: "distro",
Usage: "See the list of distributions with 'go tool dist list'. For variations of the same distribution, like 'armv6' or 'armv7', append an extra path part. Example: 'linux/arm/v6', or 'linux/amd64/v3'",
Value: cli.NewStringSlice(flags.DefaultDistros...),
}
var ConcurrencyFlags = flags.ConcurrencyFlags
// PackageFlags are flags that are used when building packages or similar artifacts (like binaries) for different distributions
// from the grafana source code.
var PackageFlags = []cli.Flag{
FlagDistros,
&cli.StringFlag{
Name: "edition",
Usage: "Simply alters the naming of the '.tar.gz' package. The string set will override the '-{flavor}' part of the package name",
},
}
var ProImageFlags = []cli.Flag{
&cli.StringFlag{
Name: "github-token",
Usage: "Github token to use for git cloning, by default will be pulled from GitHub",
Required: false,
},
&cli.StringFlag{
Name: "grafana-repo",
Usage: "The Grafana repository",
Required: false,
Value: "https://github.com/grafana/grafana",
},
&cli.StringFlag{
Name: "grafana-version",
Usage: "The Grafana version",
Required: true,
},
&cli.StringFlag{
Name: "repo",
Usage: "The docker image repo",
Value: "hosted-grafana-pro",
Required: false,
},
&cli.StringFlag{
Name: "image-tag",
Usage: "The docker image tag",
Required: true,
},
&cli.StringFlag{
Name: "release-type",
Usage: "The Grafana release type",
Value: "prerelease",
},
&cli.BoolFlag{
Name: "push",
Usage: "Push the built image to the container registry",
Value: false,
},
&cli.StringFlag{
Name: "registry",
Usage: "The container registry that the image should be pushed to. Required if --push is set.",
Value: "docker.io",
},
}
var GCOMFlags = []cli.Flag{
&cli.StringFlag{
Name: "api-url",
Usage: "API URL used in requests to grafana.com",
Value: "https://grafana.com/api/grafana",
},
&cli.StringFlag{
Name: "api-key",
Usage: "API Key used in requests to grafana.com",
Required: true,
},
&cli.StringFlag{
Name: "download-url",
Usage: "URL used to download packages from grafana.com",
Required: true,
},
&cli.BoolFlag{
Name: "beta",
Usage: "Use when publishing a beta version",
},
&cli.BoolFlag{
Name: "nightly",
Usage: "Use when publishing a nightly version",
},
}
// JoinFlags combines several slices of flags into one slice of flags.
var JoinFlags = flags.Join
func JoinFlagsWithDefault(f ...[]cli.Flag) []cli.Flag {
// Kind of gross but ensures that DefaultFlags are registered before any others.
return JoinFlags(append([][]cli.Flag{flags.DefaultFlags}, f...)...)
}