Skip to content

Commit 106fbe9

Browse files
committed
cmd/release: locate releaselet source in workspace
This allows the release command to be run from any directory. Change-Id: Ia0cac8ad32fb5a232bdf429ec2d8901ffd773d57 Reviewed-on: https://go-review.googlesource.com/12915 Reviewed-by: Andrew Gerrand <[email protected]>
1 parent d719d26 commit 106fbe9

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

cmd/release/release.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"compress/gzip"
1515
"flag"
1616
"fmt"
17+
gobuild "go/build"
1718
"io"
1819
"io/ioutil"
1920
"log"
@@ -46,8 +47,6 @@ var (
4647

4748
var coordClient *buildlet.CoordinatorClient
4849

49-
const releaselet = "releaselet.go"
50-
5150
func main() {
5251
flag.Parse()
5352

@@ -58,8 +57,8 @@ func main() {
5857
return
5958
}
6059

61-
if _, err := os.Stat(releaselet); err != nil {
62-
log.Fatalf("couldn't locate %q: %v", releaselet, err)
60+
if err := findReleaselet(); err != nil {
61+
log.Fatalf("couldn't find releaselet source: %v", err)
6362
}
6463

6564
if *rev == "" {
@@ -94,6 +93,28 @@ func main() {
9493
wg.Wait()
9594
}
9695

96+
var releaselet = "releaselet.go"
97+
98+
func findReleaselet() error {
99+
// First try the working directory.
100+
if _, err := os.Stat(releaselet); err == nil {
101+
return nil
102+
}
103+
104+
// Then, try to locate the release command in the workspace.
105+
const importPath = "golang.org/x/build/cmd/release"
106+
pkg, err := gobuild.Import(importPath, "", gobuild.FindOnly)
107+
if err != nil {
108+
return fmt.Errorf("finding %q: %v", importPath, err)
109+
}
110+
r := filepath.Join(pkg.Dir, releaselet)
111+
if _, err := os.Stat(r); err != nil {
112+
return err
113+
}
114+
releaselet = r
115+
return nil
116+
}
117+
97118
type Build struct {
98119
OS, Arch string
99120
Source bool
@@ -362,7 +383,6 @@ func (b *Build) make() error {
362383
}
363384

364385
b.logf("Pushing and running releaselet.")
365-
// TODO(adg): locate releaselet.go in GOPATH
366386
f, err := os.Open(releaselet)
367387
if err != nil {
368388
return err

0 commit comments

Comments
 (0)