@@ -43,6 +43,7 @@ import (
43
43
"sync/atomic"
44
44
"time"
45
45
46
+ "go4.org/grpc"
46
47
"go4.org/syncutil"
47
48
48
49
"cloud.google.com/go/storage"
@@ -55,6 +56,7 @@ import (
55
56
"golang.org/x/build/internal/lru"
56
57
"golang.org/x/build/internal/singleflight"
57
58
"golang.org/x/build/livelog"
59
+ "golang.org/x/build/maintner/maintnerd/apipb"
58
60
"golang.org/x/build/types"
59
61
"golang.org/x/crypto/acme/autocert"
60
62
perfstorage "golang.org/x/perf/storage"
@@ -113,6 +115,8 @@ var (
113
115
subTryBuilders []dashboard.BuildConfig // for testing sub-repos
114
116
)
115
117
118
+ var maintnerClient apipb.MaintnerServiceClient
119
+
116
120
func initTryBuilders () {
117
121
for _ , name := range dashboard .TrybotBuilderNames () {
118
122
conf := dashboard .Builders [name ]
@@ -261,6 +265,12 @@ func main() {
261
265
log .Fatalf ("Unknown mode: %q" , * mode )
262
266
}
263
267
268
+ cc , err := grpc .NewClient (http .DefaultClient , "https://maintner.golang.org" )
269
+ if err != nil {
270
+ log .Fatal (err )
271
+ }
272
+ maintnerClient = apipb .NewMaintnerServiceClient (cc )
273
+
264
274
http .HandleFunc ("/" , handleStatus )
265
275
http .HandleFunc ("/debug/goroutines" , handleDebugGoroutines )
266
276
http .HandleFunc ("/debug/watcher/" , handleDebugWatcher )
@@ -1843,6 +1853,39 @@ func (st *buildStatus) runMake(bc *buildlet.Client, goroot string, w io.Writer)
1843
1853
// caller, runMake, per builder config).
1844
1854
// The idea is that this might find data races in cmd/compile.
1845
1855
func (st * buildStatus ) runConcurrentGoBuildStdCmd (bc * buildlet.Client ) (remoteErr , err error ) {
1856
+ // Only run this step if this rev has the cmd/compile -c flag.
1857
+ // See Issue 20222.
1858
+ qctx , cancel := context .WithTimeout (st .ctx , 30 * time .Second )
1859
+ defer cancel ()
1860
+ spanha := st .createSpan ("ask_maintner_has_ancestor" )
1861
+ for {
1862
+ const dashCRev = "22f1b56dab29d397d2bdbdd603d85e60fb678089"
1863
+ res , err := maintnerClient .HasAncestor (qctx , & apipb.HasAncestorRequest {
1864
+ Commit : st .rev ,
1865
+ Ancestor : dashCRev ,
1866
+ })
1867
+ if err != nil {
1868
+ log .Printf ("HasAncestor(%q, %q) error: %v" , st .rev , dashCRev , err )
1869
+ spanha .done (err )
1870
+ return nil , err
1871
+ }
1872
+ if res .UnknownCommit {
1873
+ select {
1874
+ case <- qctx .Done ():
1875
+ return qctx .Err (), nil
1876
+ case <- time .After (1 * time .Second ):
1877
+ }
1878
+ continue
1879
+ }
1880
+ spanha .done (nil )
1881
+ if ! res .HasAncestor {
1882
+ // Old commit (e.g. 1.8 branch). Don't test.
1883
+ return nil , nil
1884
+ }
1885
+ // Recent commit. Break & test.
1886
+ break
1887
+ }
1888
+
1846
1889
span := st .createSpan ("go_build_c128_std_cmd" )
1847
1890
remoteErr , err = bc .Exec ("go/bin/go" , buildlet.ExecOpts {
1848
1891
Output : st ,
0 commit comments