From 18e43afcad5fc3500ec73faee7698ebbf1caec4a Mon Sep 17 00:00:00 2001 From: tfrench Date: Mon, 13 Jan 2025 19:30:12 +0000 Subject: [PATCH] fix(releaser): add MODULE.bazel boilerplate --- go/tools/releaser/BUILD.bazel | 6 ++++- go/tools/releaser/boilerplate.go | 27 ++++++++++++++++---- go/tools/releaser/boilerplate_test.go | 29 +++++++++++++++++++++ go/tools/releaser/prepare.go | 3 +-- go/tools/releaser/testdata/boilerplate.md | 31 +++++++++++++++++++++++ 5 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 go/tools/releaser/boilerplate_test.go create mode 100644 go/tools/releaser/testdata/boilerplate.md diff --git a/go/tools/releaser/BUILD.bazel b/go/tools/releaser/BUILD.bazel index e750c67bd5..9cdc8ac017 100644 --- a/go/tools/releaser/BUILD.bazel +++ b/go/tools/releaser/BUILD.bazel @@ -31,7 +31,11 @@ go_library( go_test( name = "releaser_test", - srcs = ["upgradedep_test.go"], + srcs = [ + "boilerplate_test.go", + "upgradedep_test.go", + ], + data = glob(["testdata/**"]), embed = [":releaser_lib"], deps = ["@com_github_bazelbuild_buildtools//build:go_default_library"], ) diff --git a/go/tools/releaser/boilerplate.go b/go/tools/releaser/boilerplate.go index fa3df0feb9..5c69784a02 100644 --- a/go/tools/releaser/boilerplate.go +++ b/go/tools/releaser/boilerplate.go @@ -21,19 +21,35 @@ import ( "io" "net/http" "sort" + "strings" "golang.org/x/mod/semver" ) -func genBoilerplate(version, shasum, goVersion string) string { - return fmt.Sprintf(`load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +func genBoilerplate(version, shasum, goVersion, rnotesData string) string { + trimmedVersion := strings.TrimPrefix(version, "v") + return fmt.Sprintf(`%[4]s + +## `+"`MODULE.bazel`"+` code + +`+"```"+` +bazel_dep(name = "rules_go", version = "%[1]s") + +go_sdk = use_extension("@rules_go//go:extensions.bzl", "go_sdk") +go_sdk.download(version = "%[3]s") +`+"```"+` + +## `+"`WORKSPACE`"+` code + +`+"```"+` +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", sha256 = "%[2]s", urls = [ - "https://mirror.bazel.build/github.com/bazel-contrib/rules_go/releases/download/%[1]s/rules_go-%[1]s.zip", - "https://github.com/bazel-contrib/rules_go/releases/download/%[1]s/rules_go-%[1]s.zip", + "https://mirror.bazel.build/github.com/bazel-contrib/rules_go/releases/download/v%[1]s/rules_go-v%[1]s.zip", + "https://github.com/bazel-contrib/rules_go/releases/download/v%[1]s/rules_go-v%[1]s.zip", ], ) @@ -41,7 +57,8 @@ load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_depe go_rules_dependencies() -go_register_toolchains(version = "%[3]s")`, version, shasum, goVersion) +go_register_toolchains(version = "%[3]s") +`+"```\n", trimmedVersion, shasum, goVersion, rnotesData) } func findLatestGoVersion() (v string, err error) { diff --git a/go/tools/releaser/boilerplate_test.go b/go/tools/releaser/boilerplate_test.go new file mode 100644 index 0000000000..33c9d02307 --- /dev/null +++ b/go/tools/releaser/boilerplate_test.go @@ -0,0 +1,29 @@ +package main + +import ( + "os" + "path/filepath" + "strings" + "testing" +) + +func TestGenBoilerplate(t *testing.T) { + version := "v1.2.3" + shasum := "abcd1234" + goVersion := "1.23" + rnotesData := "Release notes" + + actual := genBoilerplate(version, shasum, goVersion, rnotesData) + + expectedPath := filepath.Join(".", "testdata", "boilerplate.md") + expectedBytes, err := os.ReadFile(expectedPath) + if err != nil { + t.Fatalf("failed to read expected boilerplate: %v", err) + } + expected := strings.TrimSpace(string(expectedBytes)) + actual = strings.TrimSpace(actual) + + if actual != expected { + t.Errorf("generated boilerplate does not match expected\nExpected:\n%s\nActual:\n%s", expected, actual) + } +} diff --git a/go/tools/releaser/prepare.go b/go/tools/releaser/prepare.go index 1dba9a095f..fc79b0bc1a 100644 --- a/go/tools/releaser/prepare.go +++ b/go/tools/releaser/prepare.go @@ -159,8 +159,7 @@ func runPrepare(ctx context.Context, stderr io.Writer, args []string) error { if err != nil { return err } - boilerplate := genBoilerplate(version, arcSum, goVersion) - rnotesStr := string(rnotesData) + "\n\n## `WORKSPACE` code\n\n```\n" + boilerplate + "\n```\n" + rnotesStr := genBoilerplate(version, arcSum, goVersion, string(rnotesData)) // Push the release branch. fmt.Fprintf(stderr, "pushing branch %s to origin...\n", branchName) diff --git a/go/tools/releaser/testdata/boilerplate.md b/go/tools/releaser/testdata/boilerplate.md new file mode 100644 index 0000000000..89e50bc0d7 --- /dev/null +++ b/go/tools/releaser/testdata/boilerplate.md @@ -0,0 +1,31 @@ +Release notes + +## `MODULE.bazel` code + +``` +bazel_dep(name = "rules_go", version = "1.2.3") + +go_sdk = use_extension("@rules_go//go:extensions.bzl", "go_sdk") +go_sdk.download(version = "1.23") +``` + +## `WORKSPACE` code + +``` +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "io_bazel_rules_go", + sha256 = "abcd1234", + urls = [ + "https://mirror.bazel.build/github.com/bazel-contrib/rules_go/releases/download/v1.2.3/rules_go-v1.2.3.zip", + "https://github.com/bazel-contrib/rules_go/releases/download/v1.2.3/rules_go-v1.2.3.zip", + ], +) + +load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") + +go_rules_dependencies() + +go_register_toolchains(version = "1.23") +```