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

76 lines
1.8 KiB
Go

package artifacts
import (
"sort"
"strings"
"log/slog"
"github.com/grafana/grafana/pkg/build/daggerbuild/cmd/flags"
"github.com/urfave/cli/v2"
)
func ArtifactFlags(r Registerer) []cli.Flag {
artifactsFlag := &cli.StringSliceFlag{
Name: "artifacts",
Aliases: []string{"a"},
}
buildFlag := &cli.BoolFlag{
Name: "build",
Value: true,
}
publishFlag := &cli.BoolFlag{
Name: "publish",
Usage: "If true, then the artifacts that are built will be published. If `--build=false` and the artifacts are found in the --destination, then those artifacts are not built and are published instead.",
Value: true,
}
verifyFlag := &cli.BoolFlag{
Name: "verify",
Usage: "If true, then the artifacts that are built will be verified with e2e tests or similar after being exported, depending on the artifact",
Value: false,
}
flags := flags.Join(
[]cli.Flag{
artifactsFlag,
buildFlag,
publishFlag,
verifyFlag,
flags.Platform,
},
flags.PublishFlags,
flags.ConcurrencyFlags,
[]cli.Flag{
flags.Verbose,
},
)
// All of these artifacts are the registered artifacts. These should mostly stay the same no matter what.
initializers := r.Initializers()
// Add all of the CLI flags that are defined by each artifact's arguments.
m := map[string]cli.Flag{}
// For artifact arguments that specify flags, we'll coalesce them here and add them to the list of flags.
for _, n := range initializers {
for _, arg := range n.Arguments {
for _, f := range arg.Flags {
fn := strings.Join(f.Names(), ",")
m[fn] = f
slog.Debug("global flag added by argument in artifact", "flag", fn, "arg", arg.Name)
}
}
}
for _, v := range m {
flags = append(flags, v)
}
sort.Slice(flags, func(i, j int) bool {
return strings.Compare(flags[i].Names()[0], flags[j].Names()[0]) <= 0
})
return flags
}