@@ -14,6 +14,7 @@ import (
14
14
"compress/gzip"
15
15
"flag"
16
16
"fmt"
17
+ gobuild "go/build"
17
18
"io"
18
19
"io/ioutil"
19
20
"log"
46
47
47
48
var coordClient * buildlet.CoordinatorClient
48
49
49
- const releaselet = "releaselet.go"
50
-
51
50
func main () {
52
51
flag .Parse ()
53
52
@@ -58,8 +57,8 @@ func main() {
58
57
return
59
58
}
60
59
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 )
63
62
}
64
63
65
64
if * rev == "" {
@@ -94,6 +93,28 @@ func main() {
94
93
wg .Wait ()
95
94
}
96
95
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
+
97
118
type Build struct {
98
119
OS , Arch string
99
120
Source bool
@@ -362,7 +383,6 @@ func (b *Build) make() error {
362
383
}
363
384
364
385
b .logf ("Pushing and running releaselet." )
365
- // TODO(adg): locate releaselet.go in GOPATH
366
386
f , err := os .Open (releaselet )
367
387
if err != nil {
368
388
return err
0 commit comments