diff options
author | Spandan Das <spandandas@google.com> | 2023-06-14 22:37:33 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-06-14 22:37:33 +0000 |
commit | 6cf433ad1b548a8bd2d8fddce696af5e29cf950f (patch) | |
tree | d9fac15bb5a835ae6ba757dc5eaf6ef597ea44cf /go/tools/releaser/boilerplate.go | |
parent | 9803cf8403d7105bddc1d5304d6e694b781a6605 (diff) | |
parent | 711a453236752a1786e93fbde5929b92008fc7ff (diff) | |
download | bazelbuild-rules_go-6cf433ad1b548a8bd2d8fddce696af5e29cf950f.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into merge_rules_go am: 49dcd02124 am: 711a453236
Original change: https://android-review.googlesource.com/c/platform/external/bazelbuild-rules_go/+/2625353
Change-Id: Id7ea409a5954ab0efd0e8fe6c30ccfe507d9bf95
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'go/tools/releaser/boilerplate.go')
-rw-r--r-- | go/tools/releaser/boilerplate.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/go/tools/releaser/boilerplate.go b/go/tools/releaser/boilerplate.go new file mode 100644 index 00000000..828934a5 --- /dev/null +++ b/go/tools/releaser/boilerplate.go @@ -0,0 +1,78 @@ +// Copyright 2021 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "sort" + + "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") + +http_archive( + name = "io_bazel_rules_go", + sha256 = "%[2]s", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/%[1]s/rules_go-%[1]s.zip", + "https://github.com/bazelbuild/rules_go/releases/download/%[1]s/rules_go-%[1]s.zip", + ], +) + +load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") + +go_rules_dependencies() + +go_register_toolchains(version = "%[3]s")`, version, shasum, goVersion) +} + +func findLatestGoVersion() (v string, err error) { + defer func() { + if err != nil { + err = fmt.Errorf("finding latest go version: %w", err) + } + }() + resp, err := http.Get("https://golang.org/dl/?mode=json") + if err != nil { + return "", err + } + defer resp.Body.Close() + data, err := io.ReadAll(resp.Body) + if err != nil { + return "", err + } + type version struct { + Version string + } + var versions []version + if err := json.Unmarshal(data, &versions); err != nil { + return "", err + } + if len(versions) == 0 { + return "", errors.New("no versions found") + } + sort.Slice(versions, func(i, j int) bool { + vi := "v" + versions[i].Version[len("go"):] + vj := "v" + versions[j].Version[len("go"):] + return semver.Compare(vi, vj) > 0 + }) + return versions[0].Version[len("go"):], nil +} |