diff --git a/cmd/coordinator/buildstatus.go b/cmd/coordinator/buildstatus.go index a21d1bbb17..60f00a6d70 100644 --- a/cmd/coordinator/buildstatus.go +++ b/cmd/coordinator/buildstatus.go @@ -1049,15 +1049,21 @@ func (st *buildStatus) runSubrepoTests() (remoteErr, err error) { env = append(env, st.conf.ModulesEnv(st.SubName)...) args := []string{"test"} - if !st.conf.IsLongTest() { - args = append(args, "-short") - } - if st.conf.IsRace() { - args = append(args, "-race") - } - if scale := st.conf.GoTestTimeoutScale(); scale != 1 { - const goTestDefaultTimeout = 10 * time.Minute // Default value taken from Go 1.20. - args = append(args, "-timeout="+(goTestDefaultTimeout*time.Duration(scale)).String()) + if st.conf.CompileOnly { + // Build all packages, but avoid running the binary by executing /bin/true for the tests. + // We assume for a compile-only build we're just running on a Linux system. + args = append(args, "-exec", "/bin/true") + } else { + if !st.conf.IsLongTest() { + args = append(args, "-short") + } + if st.conf.IsRace() { + args = append(args, "-race") + } + if scale := st.conf.GoTestTimeoutScale(); scale != 1 { + const goTestDefaultTimeout = 10 * time.Minute // Default value taken from Go 1.20. + args = append(args, "-timeout="+(goTestDefaultTimeout*time.Duration(scale)).String()) + } } var remoteErrors []error diff --git a/dashboard/builders.go b/dashboard/builders.go index ee9eac8359..84faf703ba 100644 --- a/dashboard/builders.go +++ b/dashboard/builders.go @@ -741,6 +741,9 @@ type BuildConfig struct { // Note that this will not prevent the test binary from running for tests // for the main Go repo, so this flag is insufficient for disabling // tests in a cross-compiled setting. See #58297. + // + // For subrepo tests however, this flag is sufficient to ensure that test + // binaries will only be built, not executed. CompileOnly bool // FlakyNet indicates that network tests are flaky on this builder. @@ -1222,10 +1225,6 @@ func (c *BuildConfig) buildsRepoAtAll(repo, branch, goBranch string) bool { return false } } - if repo != "go" && c.IsCrossCompileOnly() { - // Cross-compiling builders are explicitly disabled for subrepo builds for now. - return false - } if p := c.buildsRepo; p != nil { return p(repo, branch, goBranch) } @@ -1458,6 +1457,44 @@ func explicitTrySet(projs ...string) func(proj, branch, goBranch string) bool { } } +// crossCompileBuildSet returns a policy function that reports whether a project +// should use trybots based on the platform. +func crossCompileBuildSet(goos, goarch string) func(proj, branch, goBranch string) bool { + return func(proj, branch, goBranch string) bool { + if branch != "master" { + // TODO(#58163): Remove this once we finish testing misc-compile builders for subrepos. + return false + } + switch proj { + case "go": + // TODO(#58163): Remove this once we finish testing misc-compile builders for subrepos. + return false + case "benchmarks": + return goarch != "loong64" // #58306 + case "build": + return goarch != "riscv64" // #58307 + case "exp": + // exp fails to build most cross-compile platforms, partly because of x/mobile dependencies. + return false + case "mobile": + // mobile fails to build on all cross-compile platforms. This is somewhat expected + // given the nature of the repository. Leave this as a blanket policy for now. + return false + case "pkgsite-metrics": + return goos != "aix" && goos != "solaris" // #58301 + case "vuln": + // Failure to build because of a dependency not supported on plan9. + return goos != "plan9" + case "vulndb": + return goos != "aix" // #58308 + case "website": + // Failure to build because of a dependency not supported on plan9. + return goos != "plan9" + } + return true + } +} + func init() { addBuilder(BuildConfig{ Name: "freebsd-amd64-12_3", @@ -1569,7 +1606,7 @@ func init() { addBuilder(BuildConfig{ Name: "misc-compile-" + platform, HostType: "host-linux-amd64-bullseye", - tryBot: defaultTrySet(), + tryBot: onlyGo, env: append(extraEnv, "GO_DISABLE_OUTBOUND_NETWORK=1", "GOOS="+goos, "GOARCH="+goarch), tryOnly: true, MinimumGoVersion: v, @@ -1625,6 +1662,39 @@ func init() { addMiscCompileGo1(0, "linux", "arm", "-arm5", "GOARM=5") addMiscCompileGo1(20, "freebsd", "riscv64", "-go1.20") + tryNewMiscCompileForSubrepos("windows", "arm", "", 58163, nil) + tryNewMiscCompileForSubrepos("windows", "arm64", "", 58163, nil) + tryNewMiscCompileForSubrepos("darwin", "amd64", "", 58163, nil) + tryNewMiscCompileForSubrepos("darwin", "arm64", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "mips", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "mips64", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "mipsle", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "mips64le", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "ppc64", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "ppc64le", "", 58163, nil) + tryNewMiscCompileForSubrepos("aix", "ppc64", "", 58163, nil) + tryNewMiscCompileForSubrepos("freebsd", "386", "", 58163, nil) + tryNewMiscCompileForSubrepos("freebsd", "arm", "", 58163, nil) + tryNewMiscCompileForSubrepos("freebsd", "arm64", "", 58163, nil) + tryNewMiscCompileForSubrepos("netbsd", "386", "", 58163, nil) + tryNewMiscCompileForSubrepos("netbsd", "amd64", "", 58163, nil) + tryNewMiscCompileForSubrepos("netbsd", "arm", "", 58163, nil) + tryNewMiscCompileForSubrepos("netbsd", "arm64", "", 58163, nil) + tryNewMiscCompileForSubrepos("openbsd", "386", "", 58163, nil) + tryNewMiscCompileForSubrepos("openbsd", "arm", "", 58163, nil) + tryNewMiscCompileForSubrepos("openbsd", "arm64", "", 58163, nil) + tryNewMiscCompileForSubrepos("plan9", "386", "", 58163, nil) + tryNewMiscCompileForSubrepos("plan9", "amd64", "", 58163, nil) + tryNewMiscCompileForSubrepos("plan9", "arm", "", 58163, nil) + tryNewMiscCompileForSubrepos("solaris", "amd64", "", 58163, nil) + tryNewMiscCompileForSubrepos("illumos", "amd64", "", 58163, nil) + tryNewMiscCompileForSubrepos("dragonfly", "amd64", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "loong64", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "riscv64", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "s390x", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "arm", "", 58163, nil) + tryNewMiscCompileForSubrepos("linux", "arm", "-arm5", 58163, nil, "GOARM=5") + // TODO: Issue 25963, get the misc-compile trybots for Android/iOS. // Then consider subrepos too, so "mobile" can at least be included // as a misc-compile for ^android- and ^ios-. @@ -3033,25 +3103,30 @@ func addBuilder(c BuildConfig) { Builders[c.Name] = &c } -// tryNewMiscCompile is an intermediate step towards adding a real addMiscCompile TryBot. +// tryNewMiscCompileForSubrepos is an intermediate step towards adding a real addMiscCompile TryBot +// for only subrepos. +// // It adds a post-submit-only builder with KnownIssue, GoDeps set to the provided values, // and runs on a limited set of branches to get test results without potential disruption // for contributors. It can be modified as needed when onboarding a misc-compile builder. -func tryNewMiscCompile(goos, goarch, extraSuffix string, knownIssue int, goDeps []string, extraEnv ...string) { +// +// TODO(#58163): This function is supposed to be for all repos, but while we set up misc-compile +// builders for subrepos we first only want to add it as a post-submit builder. +func tryNewMiscCompileForSubrepos(goos, goarch, extraSuffix string, knownIssue int, goDeps []string, extraEnv ...string) { if knownIssue == 0 { panic("tryNewMiscCompile: knownIssue parameter must be non-zero") } platform := goos + "-" + goarch + extraSuffix addBuilder(BuildConfig{ - Name: "misc-compile-" + platform, + Name: "misc-compile-" + platform + "-subrepo", HostType: "host-linux-amd64-bullseye", - buildsRepo: func(repo, branch, goBranch string) bool { return repo == "go" && branch == "master" }, + buildsRepo: crossCompileBuildSet(goos, goarch), KnownIssues: []int{knownIssue}, GoDeps: goDeps, env: append(extraEnv, "GOOS="+goos, "GOARCH="+goarch, "GO_DISABLE_OUTBOUND_NETWORK=1"), CompileOnly: true, SkipSnapshot: true, - Notes: fmt.Sprintf("Tries make.bash for "+platform+" See go.dev/issue/%d.", knownIssue), + Notes: fmt.Sprintf("Tries make.bash (or compile-only go test) for "+platform+" See go.dev/issue/%d.", knownIssue), }) } diff --git a/dashboard/builders_test.go b/dashboard/builders_test.go index f64c000657..395d32d3e3 100644 --- a/dashboard/builders_test.go +++ b/dashboard/builders_test.go @@ -397,6 +397,38 @@ func TestPostSubmit(t *testing.T) { want: []string{ "linux-amd64", "linux-amd64-longtest", + + "misc-compile-windows-arm-subrepo", + "misc-compile-windows-arm64-subrepo", + "misc-compile-darwin-amd64-subrepo", + "misc-compile-darwin-arm64-subrepo", + "misc-compile-linux-mips-subrepo", + "misc-compile-linux-mips64-subrepo", + "misc-compile-linux-mipsle-subrepo", + "misc-compile-linux-mips64le-subrepo", + "misc-compile-linux-ppc64-subrepo", + "misc-compile-linux-ppc64le-subrepo", + "misc-compile-freebsd-386-subrepo", + "misc-compile-freebsd-arm-subrepo", + "misc-compile-freebsd-arm64-subrepo", + "misc-compile-netbsd-386-subrepo", + "misc-compile-netbsd-amd64-subrepo", + "misc-compile-netbsd-arm-subrepo", + "misc-compile-netbsd-arm64-subrepo", + "misc-compile-openbsd-386-subrepo", + "misc-compile-openbsd-arm-subrepo", + "misc-compile-openbsd-arm64-subrepo", + "misc-compile-plan9-386-subrepo", + "misc-compile-plan9-amd64-subrepo", + "misc-compile-plan9-arm-subrepo", + "misc-compile-solaris-amd64-subrepo", + "misc-compile-illumos-amd64-subrepo", + "misc-compile-dragonfly-amd64-subrepo", + "misc-compile-linux-loong64-subrepo", + "misc-compile-linux-riscv64-subrepo", + "misc-compile-linux-s390x-subrepo", + "misc-compile-linux-arm-subrepo", + "misc-compile-linux-arm-arm5-subrepo", }, }, }