--- /dev/null
+load("//bazel:go.bzl", "go_multi_library")
+
+go_multi_library(
+ name = "rollouts",
+ srcs = [
+ "rollouts.gen.go",
+ "types.go",
+ ],
+ importpath = "go.fuhry.dev/runtime/utils/rollout/rollouts",
+ visibility = ["//visibility:public"],
+)
--- /dev/null
+#!/bin/bash
+
+set -euo pipefail
+
+declare -r scriptdir="$(cd "$(dirname "$0")"; pwd)"
+declare -r repodir="$(cd "$scriptdir/../../.."; pwd)"
+declare -r trunc="$(( ${#repodir} + 1 ))"
+
+echo -n > "$scriptdir/rollouts.gen.go"
+
+out() {
+ echo -e "$@" >> "$scriptdir/rollouts.gen.go"
+}
+
+out "package rollouts"
+out ""
+out "var allRollouts = []string{"
+
+while read match; do
+ IFS=":" read f ro <<< "$match"
+
+ out "\t// from ${f:$trunc}"
+ out "\t${ro:12},"
+done < <(grep -roE --include="*.go" --exclude="*_test.go" --exclude="*.gen.go" --exclude="*.pb.go" 'rollout.New\("[a-z0-9_]+"' "$repodir")
+
+out "}"
--- /dev/null
+package rollouts
+
+var allRollouts = []string{
+ // from metrics/metricbus/mbclient/common.go
+ "metricbus_dbus_to_http",
+}
--- /dev/null
+package rollouts
+
+import "slices"
+
+//go:generate ./generate.sh
+
+func Rollouts() []string {
+ out := make([]string, len(allRollouts))
+ copy(out, allRollouts)
+ slices.Sort(out)
+ return out
+}