cmd/release: move releaselet into a package
+build ignore files are difficult to edit using gopls. Split the
releaselet into its own package, which can have real tests.
Change-Id: I0d74c7d624d6922a61da2283747451bc6b555c21
Reviewed-on: https://go-review.googlesource.com/c/build/+/385715
Trust: Heschi Kreinick <heschi@google.com>
Run-TryBot: Heschi Kreinick <heschi@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Auto-Submit: Heschi Kreinick <heschi@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/cmd/release/release.go b/cmd/release/release.go
index 9b6ea16..a8d83ba 100644
--- a/cmd/release/release.go
+++ b/cmd/release/release.go
@@ -33,7 +33,7 @@
"golang.org/x/build/dashboard"
)
-//go:embed releaselet.go
+//go:embed releaselet/releaselet.go
var releaselet string
var (
diff --git a/cmd/release/releaselet.go b/cmd/release/releaselet/releaselet.go
similarity index 95%
rename from cmd/release/releaselet.go
rename to cmd/release/releaselet/releaselet.go
index 7866162..1351736 100644
--- a/cmd/release/releaselet.go
+++ b/cmd/release/releaselet/releaselet.go
@@ -2,11 +2,9 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:build ignore
-// +build ignore
-
// Command releaselet does buildlet-side release construction tasks.
-// It is intended to be executed on the buildlet preparing a release.
+// It is intended to be executed on the buildlet preparing a release
+// using the version of Go to be released.
package main
import (
@@ -29,11 +27,6 @@
)
func main() {
- if v, _ := strconv.ParseBool(os.Getenv("RUN_RELEASELET_TESTS")); v {
- runSelfTests()
- return
- }
-
if dir := archDir(); dir != "" {
if err := cp("go/bin/go", "go/bin/"+dir+"/go"); err != nil {
log.Fatal(err)
@@ -636,26 +629,3 @@
"images/DialogLeft.jpg": storageBase + "windows/DialogLeft.jpg",
"images/gopher.ico": storageBase + "windows/gopher.ico",
}
-
-// runSelfTests contains the tests for this file, since this file
-// is +build ignore. This is called by releaselet_test.go with an
-// environment variable set, which func main above recognizes.
-func runSelfTests() {
- // Test splitVersion.
- for _, tt := range []struct {
- v string
- major, minor, patch int
- }{
- {"go1", 1, 0, 0},
- {"go1.34", 1, 34, 0},
- {"go1.34.7", 1, 34, 7},
- } {
- major, minor, patch := splitVersion(tt.v)
- if major != tt.major || minor != tt.minor || patch != tt.patch {
- log.Fatalf("splitVersion(%q) = %v, %v, %v; want %v, %v, %v",
- tt.v, major, minor, patch, tt.major, tt.minor, tt.patch)
- }
- }
-
- fmt.Println("ok")
-}
diff --git a/cmd/release/releaselet/releaselet_test.go b/cmd/release/releaselet/releaselet_test.go
new file mode 100644
index 0000000..0855052
--- /dev/null
+++ b/cmd/release/releaselet/releaselet_test.go
@@ -0,0 +1,41 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "io/ioutil"
+ "strings"
+ "testing"
+)
+
+func TestSplitVersion(t *testing.T) {
+ // Test splitVersion.
+ for _, tt := range []struct {
+ v string
+ major, minor, patch int
+ }{
+ {"go1", 1, 0, 0},
+ {"go1.34", 1, 34, 0},
+ {"go1.34.7", 1, 34, 7},
+ } {
+ major, minor, patch := splitVersion(tt.v)
+ if major != tt.major || minor != tt.minor || patch != tt.patch {
+ t.Errorf("splitVersion(%q) = %v, %v, %v; want %v, %v, %v",
+ tt.v, major, minor, patch, tt.major, tt.minor, tt.patch)
+ }
+ }
+}
+
+func TestSingleFile(t *testing.T) {
+ files, err := ioutil.ReadDir(".")
+ if err != nil {
+ t.Fatal(err)
+ }
+ for _, f := range files {
+ if !strings.HasSuffix(f.Name(), "_test.go") && f.Name() != "releaselet.go" {
+ t.Errorf("releaselet should be a single file, found %v", f.Name())
+ }
+ }
+}
diff --git a/cmd/release/releaselet_test.go b/cmd/release/releaselet_test.go
deleted file mode 100644
index 376814b..0000000
--- a/cmd/release/releaselet_test.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
- "bytes"
- "io/ioutil"
- "os/exec"
- "strings"
- "testing"
-
- "golang.org/x/build/internal/envutil"
-)
-
-func TestReleaselet(t *testing.T) {
- cmd := exec.Command("go", "run", "releaselet.go")
- envutil.SetEnv(cmd, "RUN_RELEASELET_TESTS=true")
- out, err := cmd.CombinedOutput()
- if err != nil {
- t.Fatalf("error running releaselet.go tests: %v, %s", err, out)
- }
- got := strings.TrimSpace(string(out))
- if got != "ok" {
- t.Errorf("got output %q; want ok", out)
- }
-}
-
-func TestReleaseletIsUpToDate(t *testing.T) {
- want, err := ioutil.ReadFile("releaselet.go")
- if err != nil {
- t.Fatalf("error while reading releaselet.go: %v", err)
- }
- got := []byte(releaselet)
- if !bytes.Equal(got, want) {
- t.Error(`The releaselet constant in static.go is stale. To see the difference, run:
- $ go generate golang.org/x/build/cmd/release
- $ git diff`)
- }
-}