2015-01-15 23:46:22 +03:00
// Copyright 2015 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 dashboard contains shared configuration and logic used by various
// pieces of the Go continuous build system.
package dashboard
2015-06-05 04:25:50 +03:00
import (
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
"fmt"
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
"os"
2017-04-12 03:35:37 +03:00
"sort"
2015-06-05 04:25:50 +03:00
"strconv"
"strings"
2019-02-14 05:18:06 +03:00
"time"
2016-02-15 02:59:59 +03:00
"golang.org/x/build/buildenv"
2019-03-07 20:44:41 +03:00
"golang.org/x/build/maintner/maintnerd/maintapi/version"
dashboard, cmd/coordinator, maintner/maintnerd: add support for BuildConfig.MinimumGoVersion field
The new BuildConfig.MinimumGoVersion field specifies the minimum
Go version the builder is allowed to use. It's useful when some
of the builders are too new, and do not support all of the supported
Go releases (e.g., openbsd-amd64-64 and freebsd-amd64-12_0 currently
require Go 1.11 and don't work on Go 1.10).
It only needs to be set when a builder doesn't support all supported
Go releases, since we don't typically test unsupported Go releases.
To allow cmd/coordinator to use this field and filter out work it
receives from maintner/maintnerd's GoFindTryWork RPC call,
we add a GoVersion slice to apipb.GerritTryWorkItem,
and populate it in maintapi.apiService.GoFindTryWork method.
For trybots on the Go repo, the GoVersion field is determined from
the branch name. For "release-branch.goX.Y" branches, it parses out
the major-minor Go version from the branch name. For master and
other branches, it assumes the latest Go release.
For trybots on subrepos, we already have the Go version information
available, so use it directly.
Afterwards, all that's left is to modify newTrySet in cmd/coordinator
to make use of BuildConfig.MinimumGoVersion and work.GoVersion to skip
builders that are too new for the Go version that needs to be tested.
Fixes golang/go#29265
Change-Id: I50b01830647e33e37e9eb8b89e0f2518812fa44f
Reviewed-on: https://go-review.googlesource.com/c/155463
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-01-12 00:44:01 +03:00
"golang.org/x/build/types"
2015-06-05 04:25:50 +03:00
)
2015-01-15 23:46:22 +03:00
2019-10-16 09:02:29 +03:00
// slowBotAliases maps short names from TRY= comments to which builder to run.
//
// TODO: we'll likely expand this, or move it, or change the matching
// syntax entirely. This is a first draft.
var slowBotAliases = map [ string ] string {
// Known missing builders:
2020-08-20 21:42:01 +03:00
"darwin-arm" : "" , // TODO(golang.org/issue/37611): Remove once port is removed.
"darwin-arm64" : "" , // TODO(golang.org/issue/39782): Add builder for darwin/arm64.
2020-10-24 01:02:06 +03:00
"ios-amd64" : "" , // There is no builder for the iOS Simulator. See issues 42100 and 42177.
2019-10-16 09:02:29 +03:00
"386" : "linux-386" ,
"aix" : "aix-ppc64" ,
"amd64" : "linux-amd64" ,
"android" : "android-amd64-emu" ,
"android-386" : "android-386-emu" ,
"android-amd64" : "android-amd64-emu" ,
"android-arm" : "android-arm-corellium" ,
"android-arm64" : "android-arm64-corellium" ,
"arm" : "linux-arm" ,
"arm64" : "linux-arm64-packet" ,
"darwin" : "darwin-amd64-10_14" ,
2020-04-04 06:21:35 +03:00
"darwin-386" : "darwin-386-10_14" , // TODO(golang.org/issue/37610): Remove when Go 1.14 is no longer supported.
2019-10-16 09:02:29 +03:00
"darwin-amd64" : "darwin-amd64-10_14" ,
2020-10-03 12:37:07 +03:00
"ios-arm64" : "ios-arm64-corellium" ,
2019-10-16 09:02:29 +03:00
"dragonfly" : "dragonfly-amd64" ,
"freebsd" : "freebsd-amd64-12_0" ,
"freebsd-386" : "freebsd-386-12_0" ,
"freebsd-amd64" : "freebsd-amd64-12_0" ,
"freebsd-arm" : "freebsd-arm-paulzhol" ,
2019-10-25 22:28:26 +03:00
"freebsd-arm64" : "freebsd-arm64-dmgk" ,
2019-10-16 09:02:29 +03:00
"illumos" : "illumos-amd64" ,
2020-10-03 12:37:07 +03:00
"ios" : "ios-arm64-corellium" ,
2019-10-16 09:02:29 +03:00
"js" : "js-wasm" ,
"linux" : "linux-amd64" ,
"linux-arm64" : "linux-arm64-packet" ,
2019-10-29 23:35:07 +03:00
"linux-mips" : "linux-mips-rtrk" ,
"linux-mips64" : "linux-mips64-rtrk" ,
2019-10-16 09:02:29 +03:00
"linux-mips64le" : "linux-mips64le-mengzhuo" ,
2019-10-29 23:35:07 +03:00
"linux-mipsle" : "linux-mipsle-rtrk" ,
2019-10-16 09:02:29 +03:00
"linux-ppc64" : "linux-ppc64-buildlet" ,
"linux-ppc64le" : "linux-ppc64le-buildlet" ,
2020-09-27 21:25:41 +03:00
"linux-riscv64" : "linux-riscv64-jsing" ,
2019-10-16 09:02:29 +03:00
"linux-s390x" : "linux-s390x-ibm" ,
2019-11-07 20:47:44 +03:00
"longtest" : "linux-amd64-longtest" ,
2019-10-16 09:02:29 +03:00
"mac" : "darwin-amd64-10_14" ,
"macos" : "darwin-amd64-10_14" ,
2019-10-29 23:35:07 +03:00
"mips" : "linux-mips-rtrk" ,
"mips64" : "linux-mips64-rtrk" ,
2019-10-16 09:02:29 +03:00
"mips64le" : "linux-mips64le-mengzhuo" ,
2019-10-29 23:35:07 +03:00
"mipsle" : "linux-mipsle-rtrk" ,
2020-04-09 14:59:16 +03:00
"netbsd" : "netbsd-amd64-9_0" ,
"netbsd-386" : "netbsd-386-9_0" ,
"netbsd-amd64" : "netbsd-amd64-9_0" ,
2019-10-16 09:02:29 +03:00
"netbsd-arm" : "netbsd-arm-bsiegert" ,
2020-08-18 21:42:30 +03:00
"netbsd-arm64" : "netbsd-arm64-bsiegert" ,
2020-10-23 23:18:30 +03:00
"nocgo" : "linux-amd64-nocgo" ,
2019-10-16 09:02:29 +03:00
"openbsd" : "openbsd-amd64-64" ,
"openbsd-386" : "openbsd-386-64" ,
"openbsd-amd64" : "openbsd-amd64-64" ,
2020-08-20 21:42:01 +03:00
"openbsd-arm" : "openbsd-arm-jsing" ,
"openbsd-arm64" : "openbsd-arm64-jsing" ,
2020-08-23 19:02:40 +03:00
"openbsd-mips64" : "openbsd-mips64-jsing" ,
2020-05-13 17:52:28 +03:00
"plan9" : "plan9-arm" ,
2019-10-16 09:02:29 +03:00
"plan9-386" : "plan9-386-0intro" ,
"plan9-amd64" : "plan9-amd64-9front" ,
"ppc64" : "linux-ppc64-buildlet" ,
"ppc64le" : "linux-ppc64le-buildlet" ,
2020-09-27 21:25:41 +03:00
"riscv64" : "linux-riscv64-jsing" ,
2019-10-16 09:02:29 +03:00
"s390x" : "linux-s390x-ibm" ,
"solaris" : "solaris-amd64-oraclerel" ,
"solaris-amd64" : "solaris-amd64-oraclerel" ,
"wasm" : "js-wasm" ,
"windows" : "windows-amd64-2016" ,
"windows-386" : "windows-386-2008" ,
"windows-amd64" : "windows-amd64-2016" ,
}
2015-01-15 23:46:22 +03:00
// Builders are the different build configurations.
// The keys are like "darwin-amd64" or "linux-386-387".
// This map should not be modified by other packages.
2017-04-12 03:35:37 +03:00
// Initialization happens below, via calls to addBuilder.
2018-10-26 20:52:25 +03:00
var Builders = map [ string ] * BuildConfig { }
2015-01-15 23:46:22 +03:00
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
// Hosts contains the names and configs of all the types of
// buildlets. They can be VMs, containers, or dedicated machines.
var Hosts = map [ string ] * HostConfig {
2018-05-14 20:22:45 +03:00
"host-linux-jessie" : & HostConfig {
2018-05-04 05:42:17 +03:00
Notes : "Debian Jessie, our standard Linux container image." ,
2018-05-14 20:22:45 +03:00
ContainerImage : "linux-x86-jessie:latest" ,
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
SSHUsername : "root" ,
} ,
"host-linux-stretch" : & HostConfig {
Notes : "Debian Stretch" ,
ContainerImage : "linux-x86-stretch:latest" ,
2019-03-14 19:06:57 +03:00
machineType : "n1-standard-4" , // 4 vCPUs, 15 GB mem
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
SSHUsername : "root" ,
} ,
"host-linux-stretch-morecpu" : & HostConfig {
2019-11-23 02:01:25 +03:00
Notes : "Debian Stretch, but on n1-highcpu-16" ,
2019-03-14 19:06:57 +03:00
ContainerImage : "linux-x86-stretch:latest" ,
2019-08-30 21:27:13 +03:00
machineType : "n1-highcpu-16" , // 16 vCPUs, 14.4 GB mem
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
SSHUsername : "root" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
} ,
2019-02-16 01:05:42 +03:00
"host-linux-stretch-vmx" : & HostConfig {
Notes : "Debian Stretch w/ Nested Virtualization (VMX CPU bit) enabled, for testing" ,
ContainerImage : "linux-x86-stretch:latest" ,
NestedVirt : true ,
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
SSHUsername : "root" ,
} ,
2016-09-23 23:44:43 +03:00
"host-linux-armhf-cross" : & HostConfig {
2019-10-19 07:02:04 +03:00
Notes : "Debian with armhf cross-compiler, built from env/crosscompile/linux-armhf" ,
ContainerImage : "linux-armhf-cross:latest" ,
2016-09-23 23:44:43 +03:00
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
} ,
2017-03-23 18:46:39 +03:00
"host-linux-armel-cross" : & HostConfig {
2019-10-19 07:02:04 +03:00
Notes : "Debian with armel cross-compiler, from env/crosscompile/linux-armel" ,
ContainerImage : "linux-armel-cross:latest" ,
2017-03-23 18:46:39 +03:00
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
} ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
"host-linux-amd64-localdev" : & HostConfig {
IsReverse : true ,
ExpectNum : 0 ,
Notes : "for localhost development of buildlets/gomote/coordinator only" ,
SSHUsername : os . Getenv ( "USER" ) ,
} ,
2018-05-11 08:54:32 +03:00
"host-js-wasm" : & HostConfig {
Notes : "Container with node.js for testing js/wasm." ,
ContainerImage : "js-wasm:latest" ,
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
2019-11-15 23:31:23 +03:00
SSHUsername : "root" ,
2018-05-11 08:54:32 +03:00
} ,
2019-12-05 00:27:28 +03:00
"host-s390x-cross" : & HostConfig {
2018-05-04 05:42:17 +03:00
Notes : "Container with s390x cross-compiler." ,
2019-10-19 07:02:04 +03:00
ContainerImage : "linux-s390x-cross:latest" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
} ,
2016-12-02 22:14:12 +03:00
"host-linux-x86-alpine" : & HostConfig {
2018-05-04 05:42:17 +03:00
Notes : "Alpine container" ,
2018-05-05 19:36:05 +03:00
ContainerImage : "linux-x86-alpine:latest" ,
2019-11-15 23:31:23 +03:00
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.linux-amd64-static" ,
2016-12-02 22:14:12 +03:00
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/lib/go" } ,
2019-11-15 23:31:23 +03:00
SSHUsername : "root" ,
2016-12-02 22:14:12 +03:00
} ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
"host-linux-clang" : & HostConfig {
2018-05-04 05:42:17 +03:00
Notes : "Container with clang." ,
2018-05-05 19:36:05 +03:00
ContainerImage : "linux-x86-clang:latest" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
2019-11-15 23:31:23 +03:00
SSHUsername : "root" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
} ,
"host-linux-sid" : & HostConfig {
2017-04-12 04:54:09 +03:00
Notes : "Debian sid, updated occasionally." ,
2018-05-05 19:36:05 +03:00
ContainerImage : "linux-x86-sid:latest" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
2019-11-15 23:31:23 +03:00
SSHUsername : "root" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
} ,
2019-05-08 19:25:38 +03:00
"host-linux-fedora" : & HostConfig {
Notes : "Fedora 30" ,
ContainerImage : "linux-x86-fedora:latest" ,
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/goboot" } ,
2019-11-15 23:31:23 +03:00
SSHUsername : "root" ,
2019-05-08 19:25:38 +03:00
} ,
2017-05-22 23:17:48 +03:00
"host-linux-arm-scaleway" : & HostConfig {
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
IsReverse : true ,
HermeticReverse : true ,
ExpectNum : 50 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go" } ,
SSHUsername : "root" ,
2017-05-22 23:17:48 +03:00
} ,
2017-03-22 23:53:27 +03:00
"host-linux-arm5spacemonkey" : & HostConfig {
2019-11-06 23:34:49 +03:00
IsReverse : true ,
ExpectNum : 3 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go" } ,
OwnerGithub : "esnolte" , // https://github.com/golang/go/issues/34973#issuecomment-543836871
2017-03-22 23:53:27 +03:00
} ,
2020-09-27 21:25:41 +03:00
"host-linux-riscv64-joelsing" : & HostConfig {
Notes : "SiFive HiFive Unleashed RISC-V board. 8 GB RAM, 4 cores." ,
IsReverse : true ,
ExpectNum : 1 ,
OwnerGithub : "4a6f656c" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/goboot" } ,
} ,
2019-11-12 09:19:21 +03:00
"host-linux-riscv64-unleashed" : & HostConfig {
Notes : "SiFive HiFive Unleashed RISC-V board. 8 GB RAM, 4 cores." ,
IsReverse : true ,
ExpectNum : 1 , // for now. Joel's board might join the party later.
OwnerGithub : "bradfitz" , // at home
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/goboot" } ,
} ,
2017-11-24 21:14:33 +03:00
"host-openbsd-amd64-62" : & HostConfig {
VMImage : "openbsd-amd64-62" ,
machineType : "n1-highcpu-4" ,
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.openbsd-amd64" ,
2019-03-06 22:45:35 +03:00
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/gobootstrap-openbsd-amd64-go1_12.tar.gz" ,
2017-11-24 21:14:33 +03:00
Notes : "OpenBSD 6.2; GCE VM is built from script in build/env/openbsd-amd64" ,
SSHUsername : "gopher" ,
} ,
2017-12-05 08:22:36 +03:00
"host-openbsd-386-62" : & HostConfig {
VMImage : "openbsd-386-62-a" ,
machineType : "n1-highcpu-4" ,
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.openbsd-386" ,
2019-03-06 22:45:35 +03:00
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/gobootstrap-openbsd-386-go1_12.tar.gz" ,
2017-12-05 08:22:36 +03:00
Notes : "OpenBSD 6.2; GCE VM is built from script in build/env/openbsd-386" ,
SSHUsername : "gopher" ,
} ,
2018-10-05 01:14:50 +03:00
"host-openbsd-amd64-64" : & HostConfig {
2019-01-30 08:01:54 +03:00
VMImage : "openbsd-amd64-64-190129a" ,
2019-01-30 20:13:07 +03:00
MinCPUPlatform : "Intel Skylake" , // for better TSC? Maybe? see Issue 29223. builds faster at least.
2018-10-05 01:14:50 +03:00
machineType : "n1-highcpu-4" ,
2019-11-15 20:46:02 +03:00
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.openbsd-amd64" ,
2019-03-06 22:45:35 +03:00
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/gobootstrap-openbsd-amd64-go1_12.tar.gz" ,
env/openbsd-amd64: enable SMT on OpenBSD 6.4
Disable Spectre/Meltdown mitigations and enable simultaneous
multithreading (SMT) on the OpenBSD 6.4 builder image.
This was done by setting hw.smt=1 in /etc/sysctl.conf when building
the image.
I considered an alternative approach of doing this at runtime via
a cmd/buildlet special case for OpenBSD. It would've likely been
faster to implement if I had the idea at the beginning. However,
by the time I saw it, I had already started to build a new OpenBSD 6.4
image with the /etc/sysctl.conf file, then tested it via debugnewvm.
At this point, there's no longer a time saving advantage, so I decided
to prefer the v2 image because it keeps OpenBSD-specific configuration
more contained in env/openbsd-* directory, rather than spreading it out
between there and the cmd/buildlet runtime code. It seems to be a
slightly better option.
The times to do a full build, as measured via cmd/debugnewvm, were:
6.2 = 19m25.218s
6.4 = 28m49.565s
6.4 with hw.smt=1 = 22m55.909s
That should translate to faster trybot runs, which is important
for open source project health.
The 386 environment doesn't need to be updated because it doesn't
support hw.smt:
sysctl: hw.smt: value is not available
Attempting to set it anyway should be harmless and okay to do,
in case it happens to get supported in the future.
We're only using amd64 environment for trybots, so it's okay
for the purposes of golang/go#28403.
Reference: https://man.openbsd.org/sysctl.2#HW_SMT_2
Fixes golang/go#28403
Change-Id: I7bc4cbf83ccbdb3aa9dd19eeabd88feb1c425811
Reviewed-on: https://go-review.googlesource.com/c/145022
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-10-26 20:05:59 +03:00
Notes : "OpenBSD 6.4 with hw.smt=1; GCE VM is built from script in build/env/openbsd-amd64" ,
2018-10-05 01:14:50 +03:00
SSHUsername : "gopher" ,
} ,
"host-openbsd-386-64" : & HostConfig {
2018-10-19 22:50:28 +03:00
VMImage : "openbsd-386-64" ,
2018-10-05 01:14:50 +03:00
machineType : "n1-highcpu-4" ,
2019-11-15 20:46:02 +03:00
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.openbsd-386" ,
2019-03-06 22:45:35 +03:00
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/gobootstrap-openbsd-386-go1_12.tar.gz" ,
2018-10-19 22:50:28 +03:00
Notes : "OpenBSD 6.4; GCE VM is built from script in build/env/openbsd-386" ,
2018-10-05 01:14:50 +03:00
SSHUsername : "gopher" ,
} ,
2019-08-30 20:09:05 +03:00
"host-openbsd-arm-joelsing" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go" } ,
OwnerGithub : "4a6f656c" ,
} ,
2020-08-20 21:42:01 +03:00
"host-openbsd-arm64-joelsing" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go" } ,
OwnerGithub : "4a6f656c" ,
} ,
2020-08-23 19:02:40 +03:00
"host-openbsd-mips64-joelsing" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go" } ,
OwnerGithub : "4a6f656c" ,
} ,
dashboard, env/freebsd-amd64: update to FreeBSD 10.3 and 11.1.
freebsd.org says that the current supported releases are:
> Production: 11.1, 11.0, 10.4, 10.3
Previously we had builders for 9.3, 10.1, and 11.0.
We'll keep FreeBSD 9.3 for now (as it's still supported by the last
two released Go versions), but we'll stop testing FreeBSD 9.3 at tip
shortly here (that will be a separate change).
This CL updates our builders from 11.0 to 11.1 and 10.1 to 10.3,
spanning the range from the old to newest supported release. We'll
stop testing 10.4 and 11.0, as that's a bit overkill.
Another reason we're doing 10.3 instead of 10.4 is because the Go 1.9
release notes (https://golang.org/doc/go1.9#freebsd) said that future
Go releases (Go 1.10) will require FreeBSD 10.3+, so we need to test
FreeBSD 10.3, being the oldest. (Go has historically "supported"
FreeBSD releases a bit longer than they're officially supported by
FreeBSD, partly due to our out-of-sync release cycles.)
Fixes golang/go#19303
Fixes golang/go#22854
Change-Id: I69589000b1c87aecf054857f514cc48ccedf752f
Reviewed-on: https://go-review.googlesource.com/80297
Reviewed-by: Andrew Bonventre <andybons@golang.org>
2017-11-28 20:51:41 +03:00
"host-freebsd-11_1" : & HostConfig {
2017-11-29 01:07:29 +03:00
VMImage : "freebsd-amd64-111-b" ,
dashboard, env/freebsd-amd64: update to FreeBSD 10.3 and 11.1.
freebsd.org says that the current supported releases are:
> Production: 11.1, 11.0, 10.4, 10.3
Previously we had builders for 9.3, 10.1, and 11.0.
We'll keep FreeBSD 9.3 for now (as it's still supported by the last
two released Go versions), but we'll stop testing FreeBSD 9.3 at tip
shortly here (that will be a separate change).
This CL updates our builders from 11.0 to 11.1 and 10.1 to 10.3,
spanning the range from the old to newest supported release. We'll
stop testing 10.4 and 11.0, as that's a bit overkill.
Another reason we're doing 10.3 instead of 10.4 is because the Go 1.9
release notes (https://golang.org/doc/go1.9#freebsd) said that future
Go releases (Go 1.10) will require FreeBSD 10.3+, so we need to test
FreeBSD 10.3, being the oldest. (Go has historically "supported"
FreeBSD releases a bit longer than they're officially supported by
FreeBSD, partly due to our out-of-sync release cycles.)
Fixes golang/go#19303
Fixes golang/go#22854
Change-Id: I69589000b1c87aecf054857f514cc48ccedf752f
Reviewed-on: https://go-review.googlesource.com/80297
Reviewed-by: Andrew Bonventre <andybons@golang.org>
2017-11-28 20:51:41 +03:00
Notes : "FreeBSD 11.1; GCE VM is built from script in build/env/freebsd-amd64" ,
2017-02-27 19:05:25 +03:00
machineType : "n1-highcpu-4" ,
2020-01-13 19:26:43 +03:00
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.freebsd-amd64" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/go1.4-freebsd-amd64.tar.gz" ,
env : [ ] string { "CC=clang" } ,
SSHUsername : "gopher" ,
} ,
"host-freebsd-11_1-big" : & HostConfig {
VMImage : "freebsd-amd64-111-b" ,
2020-04-10 18:47:55 +03:00
Notes : "Same as host-freebsd-11_1, but on n1-highcpu-16" ,
machineType : "n1-highcpu-16" , // 16 vCPUs, 14.4 GB mem
2020-01-13 19:26:43 +03:00
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.freebsd-amd64" ,
2017-02-27 19:05:25 +03:00
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/go1.4-freebsd-amd64.tar.gz" ,
env : [ ] string { "CC=clang" } ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
SSHUsername : "gopher" ,
2017-02-27 19:05:25 +03:00
} ,
2018-09-28 02:43:25 +03:00
"host-freebsd-11_2" : & HostConfig {
VMImage : "freebsd-amd64-112" ,
Notes : "FreeBSD 11.2; GCE VM is built from script in build/env/freebsd-amd64" ,
machineType : "n1-highcpu-4" ,
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.freebsd-amd64" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/go1.4-freebsd-amd64.tar.gz" ,
SSHUsername : "gopher" ,
} ,
2018-10-05 23:57:29 +03:00
"host-freebsd-12_0" : & HostConfig {
2018-12-29 20:53:25 +03:00
VMImage : "freebsd-amd64-120-v1" ,
Notes : "FreeBSD 12.0; GCE VM is built from script in build/env/freebsd-amd64" ,
2018-10-05 23:57:29 +03:00
machineType : "n1-highcpu-4" ,
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.freebsd-amd64" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/go1.4-freebsd-amd64.tar.gz" ,
SSHUsername : "gopher" ,
} ,
2020-04-02 15:55:30 +03:00
"host-netbsd-amd64-9_0" : & HostConfig {
VMImage : "netbsd-amd64-9-0-2019q4" ,
Notes : "NetBSD 9.0; GCE VM is built from script in build/env/netbsd-amd64" ,
machineType : "n1-highcpu-4" ,
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.netbsd-amd64" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/gobootstrap-netbsd-amd64-2da6b33.tar.gz" ,
SSHUsername : "root" ,
} ,
"host-netbsd-386-9_0" : & HostConfig {
VMImage : "netbsd-i386-9-0-2019q4" ,
Notes : "NetBSD 9.0; GCE VM is built from script in build/env/netbsd-386" ,
machineType : "n1-highcpu-4" ,
buildletURLTmpl : "https://storage.googleapis.com/$BUCKET/buildlet.netbsd-386" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/gobootstrap-netbsd-386-0b3b511.tar.gz" ,
SSHUsername : "root" ,
} ,
2019-03-19 16:28:04 +03:00
"host-netbsd-arm-bsiegert" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/pkg/go112" } ,
OwnerGithub : "bsiegert" ,
} ,
2020-08-18 21:42:30 +03:00
"host-netbsd-arm64-bsiegert" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/pkg/go114" } ,
OwnerGithub : "bsiegert" ,
} ,
2020-04-04 13:40:16 +03:00
"host-dragonfly-amd64-5_8" : & HostConfig {
2019-10-21 18:00:32 +03:00
IsReverse : true ,
ExpectNum : 1 ,
2019-11-25 16:28:27 +03:00
Notes : "DragonFly BSD release version, run by DragonFly team" ,
2019-10-21 18:00:32 +03:00
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go" } ,
2020-05-05 22:18:12 +03:00
SSHUsername : "root" ,
2019-11-25 16:28:27 +03:00
OwnerGithub : "tuxillo" ,
2019-10-21 18:00:32 +03:00
} ,
2019-11-05 21:55:17 +03:00
"host-dragonfly-amd64-master" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
Notes : "DragonFly BSD master, run by DragonFly team" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go" } ,
2020-05-05 22:18:12 +03:00
SSHUsername : "root" ,
2019-11-05 21:55:17 +03:00
OwnerGithub : "tuxillo" ,
2017-08-06 01:56:18 +03:00
} ,
"host-freebsd-arm-paulzhol" : & HostConfig {
2019-11-06 23:34:49 +03:00
IsReverse : true ,
ExpectNum : 1 ,
Notes : "Cubiboard2 1Gb RAM dual-core Cortex-A7 (Allwinner A20), FreeBSD 11.1-RELEASE" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/home/paulzhol/go1.4" } ,
OwnerGithub : "paulzhol" ,
2017-08-06 01:56:18 +03:00
} ,
2019-10-03 15:56:19 +03:00
"host-freebsd-arm64-dmgk" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
Notes : "AWS EC2 a1.large 2 vCPU 4GiB RAM, FreeBSD 12.1-STABLE" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/home/builder/gobootstrap" } ,
OwnerGithub : "dmgk" ,
} ,
2017-08-06 18:57:06 +03:00
"host-plan9-arm-0intro" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
Notes : "Raspberry Pi 3 Model B, Plan 9 from Bell Labs" ,
OwnerGithub : "0intro" ,
} ,
"host-plan9-amd64-0intro" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
OwnerGithub : "0intro" ,
} ,
2019-05-09 19:52:40 +03:00
"host-plan9-386-0intro" : & HostConfig {
IsReverse : true ,
ExpectNum : 1 ,
OwnerGithub : "0intro" ,
} ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
"host-plan9-386-gce" : & HostConfig {
2019-01-19 01:19:58 +03:00
VMImage : "plan9-386-v7" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
Notes : "Plan 9 from 0intro; GCE VM is built from script in build/env/plan9-386" ,
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.plan9-386" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/gobootstrap-plan9-386.tar.gz" ,
2015-01-15 23:46:22 +03:00
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
// We *were* using n1-standard-1 because Plan 9 can only
// reliably use a single CPU. Using 2 or 4 and we see
// test failures. See:
// https://golang.org/issue/8393
// https://golang.org/issue/9491
// n1-standard-1 has 3.6 GB of memory which WAS (see below)
// overkill (userspace probably only sees 2GB anyway),
// but it's the cheapest option. And plenty to keep
// our ~250 MB of inputs+outputs in its ramfs.
//
// But the docs says "For the n1 series of machine
// types, a virtual CPU is implemented as a single
// hyperthread on a 2.6GHz Intel Sandy Bridge Xeon or
// Intel Ivy Bridge Xeon (or newer) processor. This
// means that the n1-standard-2 machine type will see
// a whole physical core."
//
// ... so we used n1-highcpu-2 (1.80 RAM, still
// plenty), just so we can get 1 whole core for the
// single-core Plan 9. It will see 2 virtual cores and
// only use 1, but we hope that 1 will be more powerful
// and we'll stop timing out on tests.
machineType : "n1-highcpu-4" ,
2019-01-18 19:14:12 +03:00
env : [ ] string { "GO_TEST_TIMEOUT_SCALE=3" } ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
} ,
2017-04-21 22:35:28 +03:00
"host-windows-amd64-2008" : & HostConfig {
2018-07-02 20:49:55 +03:00
VMImage : "windows-amd64-server-2008r2-v7" ,
2019-11-23 02:01:25 +03:00
machineType : "n1-highcpu-4" , // 4 vCPUs, 3.6 GB mem
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.windows-amd64" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/go1.4-windows-amd64.tar.gz" ,
SSHUsername : "gopher" ,
} ,
2017-04-21 22:35:28 +03:00
"host-windows-amd64-2012" : & HostConfig {
2018-07-02 20:49:55 +03:00
VMImage : "windows-amd64-server-2012r2-v7" ,
2019-11-23 02:01:25 +03:00
machineType : "n1-highcpu-4" , // 4 vCPUs, 3.6 GB mem
2017-04-21 22:35:28 +03:00
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.windows-amd64" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/go1.4-windows-amd64.tar.gz" ,
2017-08-01 02:55:28 +03:00
SSHUsername : "gopher" ,
2017-04-21 22:35:28 +03:00
} ,
"host-windows-amd64-2016" : & HostConfig {
2018-07-02 20:49:55 +03:00
VMImage : "windows-amd64-server-2016-v7" ,
2019-11-23 02:01:25 +03:00
machineType : "n1-highcpu-4" , // 4 vCPUs, 3.6 GB mem
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.windows-amd64" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/go1.4-windows-amd64.tar.gz" ,
SSHUsername : "gopher" ,
} ,
"host-windows-amd64-2016-big" : & HostConfig {
2020-01-07 07:55:13 +03:00
Notes : "Same as host-windows-amd64-2016, but on n1-highcpu-16" ,
2019-11-23 02:01:25 +03:00
VMImage : "windows-amd64-server-2016-v7" ,
2020-01-07 07:55:13 +03:00
machineType : "n1-highcpu-16" , // 16 vCPUs, 14.4 GB mem
2017-04-21 22:35:28 +03:00
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.windows-amd64" ,
goBootstrapURLTmpl : "https://storage.googleapis.com/$BUCKET/go1.4-windows-amd64.tar.gz" ,
2017-08-01 02:55:28 +03:00
SSHUsername : "gopher" ,
2017-04-21 22:35:28 +03:00
} ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
"host-darwin-10_11" : & HostConfig {
IsReverse : true ,
2019-11-19 17:55:01 +03:00
ExpectNum : 3 ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
Notes : "MacStadium OS X 10.11 VM under VMWare ESXi" ,
env : [ ] string {
"GOROOT_BOOTSTRAP=/Users/gopher/go1.4" ,
} ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
SSHUsername : "gopher" ,
HermeticReverse : false , // TODO: make it so, like 10.12
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
} ,
2017-01-19 01:45:12 +03:00
"host-darwin-10_12" : & HostConfig {
IsReverse : true ,
2020-03-06 20:14:44 +03:00
ExpectNum : 4 ,
2017-01-19 01:45:12 +03:00
Notes : "MacStadium OS X 10.12 VM under VMWare ESXi" ,
env : [ ] string {
"GOROOT_BOOTSTRAP=/Users/gopher/go1.4" ,
} ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
SSHUsername : "gopher" ,
HermeticReverse : true , // we destroy the VM when done & let cmd/makemac recreate
2017-01-19 01:45:12 +03:00
} ,
2019-03-27 02:04:31 +03:00
"host-darwin-10_14" : & HostConfig {
IsReverse : true ,
2020-03-06 20:14:44 +03:00
ExpectNum : 6 ,
2019-03-27 02:04:31 +03:00
Notes : "MacStadium macOS Mojave (10.14) VM under VMWare ESXi" ,
env : [ ] string {
"GOROOT_BOOTSTRAP=/Users/gopher/goboot" , // Go 1.12.1
} ,
SSHUsername : "gopher" ,
HermeticReverse : true , // we destroy the VM when done & let cmd/makemac recreate
} ,
2019-11-19 17:55:01 +03:00
"host-darwin-10_15" : & HostConfig {
IsReverse : true ,
2020-03-06 20:14:44 +03:00
ExpectNum : 7 ,
2019-11-19 17:55:01 +03:00
Notes : "MacStadium macOS Catalina (10.15) VM under VMWare ESXi" ,
env : [ ] string {
"GOROOT_BOOTSTRAP=/Users/gopher/goboot" , // Go 1.12.1
} ,
SSHUsername : "gopher" ,
HermeticReverse : true , // we destroy the VM when done & let cmd/makemac recreate
} ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
"host-linux-s390x" : & HostConfig {
2019-11-06 23:34:49 +03:00
Notes : "run by IBM" ,
OwnerGithub : "mundaym" ,
IsReverse : true ,
env : [ ] string { "GOROOT_BOOTSTRAP=/var/buildlet/go-linux-s390x-bootstrap" } ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
} ,
2016-10-06 23:30:58 +03:00
"host-linux-ppc64-osu" : & HostConfig {
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
Notes : "Debian jessie; run by Go team on osuosl.org" ,
IsReverse : true ,
ExpectNum : 5 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go-bootstrap" } ,
2019-10-10 20:44:44 +03:00
SSHUsername : "root" ,
2019-10-17 08:08:40 +03:00
HermeticReverse : false , // TODO: run in chroots with overlayfs? https://github.com/golang/go/issues/34830#issuecomment-543386764
2016-10-06 23:30:58 +03:00
} ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
"host-linux-ppc64le-osu" : & HostConfig {
2019-10-17 08:08:40 +03:00
Notes : "Debian Buster; run by Go team on osuosl.org; see x/build/env/linux-ppc64le/osuosl" ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
IsReverse : true ,
ExpectNum : 5 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go-bootstrap" } ,
2019-10-10 20:44:44 +03:00
SSHUsername : "root" ,
2019-10-17 08:08:40 +03:00
HermeticReverse : true ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
} ,
2019-02-25 23:05:12 +03:00
"host-linux-ppc64le-power9-osu" : & HostConfig {
2019-10-17 08:08:40 +03:00
Notes : "Debian Buster; run by Go team on osuosl.org; see x/build/env/linux-ppc64le/osuosl" ,
2019-02-25 23:05:12 +03:00
IsReverse : true ,
2020-01-27 21:28:06 +03:00
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go-bootstrap" , "GOPPC64=power9" } ,
2019-10-10 22:48:15 +03:00
SSHUsername : "root" ,
2019-10-17 08:08:40 +03:00
HermeticReverse : true ,
2019-02-25 23:05:12 +03:00
} ,
2017-04-07 01:16:28 +03:00
"host-linux-arm64-packet" : & HostConfig {
2019-10-15 07:44:49 +03:00
Notes : "On 96 core packet.net host (Xenial) in Docker containers (Debian Buster); run by Go team. See x/build/env/linux-arm64/packet" ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
IsReverse : true ,
HermeticReverse : true ,
2019-12-17 01:14:27 +03:00
ExpectNum : 8 ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go-bootstrap" } ,
SSHUsername : "root" ,
2017-04-07 01:16:28 +03:00
} ,
2020-05-04 20:13:17 +03:00
"host-linux-arm64-aws" : & HostConfig {
2020-05-13 20:27:15 +03:00
Notes : "Debian Buster, EC2 arm64 instance. See x/build/env/linux-arm64/aws" ,
2020-10-29 00:23:17 +03:00
VMImage : "ami-03089323a1d38e652" ,
2020-05-20 00:26:14 +03:00
ContainerImage : "gobuilder-arm64-aws:latest" ,
machineType : "m6g.xlarge" ,
2020-05-13 20:27:15 +03:00
isEC2 : true ,
2020-05-04 20:13:17 +03:00
env : [ ] string { "GOROOT_BOOTSTRAP=/usr/local/go-bootstrap" } ,
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
2020-09-28 22:42:57 +03:00
SSHUsername : "root" ,
2020-05-04 20:13:17 +03:00
} ,
2019-10-17 11:48:13 +03:00
"host-illumos-amd64-jclulow" : & HostConfig {
Notes : "SmartOS base64@19.1.0 zone" ,
Owner : "josh@sysmgr.org" ,
OwnerGithub : "jclulow" ,
IsReverse : true ,
ExpectNum : 1 ,
SSHUsername : "gobuild" ,
} ,
2017-07-07 23:41:20 +03:00
"host-solaris-oracle-amd64-oraclerel" : & HostConfig {
Notes : "Oracle Solaris amd64 Release System" ,
2019-11-06 19:59:20 +03:00
Owner : "" ,
OwnerGithub : "rorth" , // https://github.com/golang/go/issues/15581#issuecomment-550368581
2017-06-27 20:11:15 +03:00
IsReverse : true ,
ExpectNum : 1 ,
2017-07-31 23:58:19 +03:00
env : [ ] string { "GOROOT_BOOTSTRAP=/opt/golang/go-solaris-amd64-bootstrap" } ,
2017-06-27 20:11:15 +03:00
} ,
2019-09-10 02:21:11 +03:00
"host-linux-mipsle-mengzhuo" : & HostConfig {
2019-10-29 23:35:07 +03:00
Notes : "Loongson 3A Box hosted by Meng Zhuo; actually MIPS64 despite the name" ,
2019-09-10 02:21:11 +03:00
OwnerGithub : "mengzhuo" ,
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string {
"GOROOT_BOOTSTRAP=/usr/lib/golang" ,
"GOMIPS64=hardfloat" ,
} ,
} ,
2019-10-29 23:35:07 +03:00
"host-linux-mips64le-rtrk" : & HostConfig {
Notes : "cavium,rhino_utm8 board hosted at RT-RK.com; quad-core cpu, 8GB of ram and 240GB ssd disks." ,
OwnerGithub : "bogojevic" , // and @milanknezevic. https://github.com/golang/go/issues/31217#issuecomment-547004892
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string {
"GOROOT_BOOTSTRAP=/usr/local/go-bootstrap" ,
} ,
} ,
"host-linux-mips64-rtrk" : & HostConfig {
Notes : "cavium,rhino_utm8 board hosted at RT-RK.com; quad-core cpu, 8GB of ram and 240GB ssd disks." ,
OwnerGithub : "bogojevic" , // and @milanknezevic. https://github.com/golang/go/issues/31217#issuecomment-547004892
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string {
"GOROOT_BOOTSTRAP=/usr/local/go-bootstrap" ,
} ,
} ,
2020-10-03 12:37:07 +03:00
"host-ios-arm64-corellium-ios" : & HostConfig {
2020-08-19 20:15:55 +03:00
Notes : "Virtual iOS devices hosted by Zenly on Corellium; see issues 31722 and 40523" ,
2019-05-01 21:33:26 +03:00
OwnerGithub : "znly" ,
IsReverse : true ,
2020-10-29 21:04:57 +03:00
ExpectNum : 3 ,
2019-05-01 21:33:26 +03:00
env : [ ] string {
2020-10-03 12:37:07 +03:00
"GOROOT_BOOTSTRAP=/var/mobile/go-ios-arm64-bootstrap" ,
2019-05-01 21:33:26 +03:00
} ,
} ,
2019-05-01 23:28:43 +03:00
"host-android-arm64-corellium-android" : & HostConfig {
2020-08-19 20:15:55 +03:00
Notes : "Virtual Android devices hosted by Zenly on Corellium; see issues 31722 and 40523" ,
2019-05-01 23:28:43 +03:00
OwnerGithub : "znly" ,
IsReverse : true ,
2020-10-29 21:04:57 +03:00
ExpectNum : 3 ,
2019-05-01 23:28:43 +03:00
env : [ ] string {
"GOROOT_BOOTSTRAP=/data/data/com.termux/files/home/go-android-arm64-bootstrap" ,
} ,
} ,
2018-08-24 21:41:05 +03:00
"host-aix-ppc64-osuosl" : & HostConfig {
Notes : "AIX 7.2 VM on OSU; run by Tony Reix" ,
OwnerGithub : "trex58" ,
IsReverse : true ,
ExpectNum : 1 ,
env : [ ] string { "GOROOT_BOOTSTRAP=/opt/freeware/lib/golang" } ,
} ,
2019-02-25 23:35:29 +03:00
"host-android-amd64-emu" : & HostConfig {
Notes : "Debian Buster w/ Android SDK + emulator (use nested virt)" ,
2019-03-01 13:21:20 +03:00
ContainerImage : "android-amd64-emu:bff27c0c9263" ,
2019-02-25 23:35:29 +03:00
KonletVMImage : "android-amd64-emu" ,
NestedVirt : true ,
buildletURLTmpl : "http://storage.googleapis.com/$BUCKET/buildlet.linux-amd64" ,
env : [ ] string { "GOROOT_BOOTSTRAP=/go1.4" } ,
SSHUsername : "root" ,
} ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
}
2019-10-19 05:49:53 +03:00
// CrossCompileConfig describes how to cross-compile a build on a
// faster host.
type CrossCompileConfig struct {
// CompileHostType is the host type to use for compilation
CompileHostType string
// CCForTarget is the CC_FOR_TARGET environment variable.
CCForTarget string
// GOARM is any GOARM= environment variable.
GOARM string
// AlwaysCrossCompile controls whether this builder always
// cross compiles. Otherwise it's only done for trybot runs.
AlwaysCrossCompile bool
}
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
func init ( ) {
for key , c := range Hosts {
if key == "" {
panic ( "empty string key in Hosts" )
}
if c . HostType == "" {
c . HostType = key
}
if c . HostType != key {
panic ( fmt . Sprintf ( "HostType %q != key %q" , c . HostType , key ) )
}
nSet := 0
2020-05-20 00:26:14 +03:00
if c . VMImage != "" && ! c . isEC2 {
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
nSet ++
}
2018-05-05 19:36:05 +03:00
if c . ContainerImage != "" {
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
nSet ++
}
if c . IsReverse {
nSet ++
}
if nSet != 1 {
2018-05-05 19:36:05 +03:00
panic ( fmt . Sprintf ( "exactly one of VMImage, ContainerImage, IsReverse must be set for host %q; got %v" , key , nSet ) )
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
}
2018-05-05 19:36:05 +03:00
if c . buildletURLTmpl == "" && ( c . VMImage != "" || c . ContainerImage != "" ) {
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
panic ( fmt . Sprintf ( "missing buildletURLTmpl for host type %q" , key ) )
}
}
}
// A HostConfig describes the available ways to obtain buildlets of
2020-04-07 00:34:17 +03:00
// different types. Some host configs can serve multiple
2018-05-14 20:22:45 +03:00
// builders. For example, a host config of "host-linux-jessie" can
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
// serve linux-amd64, linux-amd64-race, linux-386, linux-386-387, etc.
type HostConfig struct {
// HostType is the unique name of this host config. It is also
// the key in the Hosts map.
HostType string
// buildletURLTmpl is the URL "template" ($BUCKET is auto-expanded)
// for the URL to the buildlet binary.
2018-05-04 05:42:17 +03:00
// This field is required for VM and Container builders. It's not
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
// needed for reverse buildlets because in that case, the buildlets
// are already running and their stage0 should know how to update it
// it automatically.
buildletURLTmpl string
2020-08-18 20:32:05 +03:00
// Exactly 1 of these must be set (with the exception of EC2 instances).
// An EC2 instance may run a container inside a VM. In that case, a VMImage
// and ContainerImage will both be set.
2018-05-05 19:36:05 +03:00
VMImage string // e.g. "openbsd-amd64-60"
ContainerImage string // e.g. "linux-buildlet-std:latest" (suffix after "gcr.io/<PROJ>/")
IsReverse bool // if true, only use the reverse buildlet pool
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
// GCE options, if VMImage != ""
2019-01-30 20:13:07 +03:00
machineType string // optional GCE instance type
RegularDisk bool // if true, use spinning disk instead of SSD
MinCPUPlatform string // optional; https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
2020-05-13 20:27:15 +03:00
// EC2 options
isEC2 bool // if true, the instance is configured to run on EC2
2017-02-24 20:50:49 +03:00
// ReverseOptions:
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
ExpectNum int // expected number of reverse buildlets of this type
HermeticReverse bool // whether reverse buildlet has fresh env per conn
2017-02-24 20:50:49 +03:00
2019-02-16 01:05:42 +03:00
// Container image options, if ContainerImage != "":
2019-02-22 00:10:54 +03:00
NestedVirt bool // container requires VMX nested virtualization
KonletVMImage string // optional VM image (containing konlet) to use instead of default
2019-02-16 01:05:42 +03:00
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
// Optional base env. GOROOT_BOOTSTRAP should go here if the buildlet
// has Go 1.4+ baked in somewhere.
env [ ] string
2016-03-22 01:05:52 +03:00
// These template URLs may contain $BUCKET which is expanded to the
// relevant Cloud Storage bucket as specified by the build environment.
goBootstrapURLTmpl string // optional URL to a built Go 1.4+ tar.gz
2015-01-15 23:46:22 +03:00
2017-04-13 22:38:46 +03:00
Owner string // optional email of owner; "bradfitz@golang.org", empty means golang-dev
OwnerGithub string // optional GitHub username of owner
Notes string // notes for humans
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
SSHUsername string // username to ssh as, empty means not supported
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
}
// A BuildConfig describes how to run a builder.
type BuildConfig struct {
// Name is the unique name of the builder, in the form of
// "GOOS-GOARCH" or "GOOS-GOARCH-suffix". For example,
// "darwin-386", "linux-386-387", "linux-amd64-race". Some
// suffixes are well-known and carry special meaning, such as
// "-race".
Name string
// HostType is the required key into the Hosts map, describing
// the type of host this build will run on.
2018-05-14 20:22:45 +03:00
// For example, "host-linux-jessie".
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
HostType string
2020-04-07 00:34:17 +03:00
// KnownIssue is a non-zero golang.org/issue/nnn number for a builder
2020-09-25 18:52:04 +03:00
// that may fail due to a known issue, such as because it is a new
// builder still in development/testing, or because the feature
2020-04-07 00:34:17 +03:00
// or port that it's meant to test hasn't been added yet, etc.
//
// A non-zero value here means that failures on this builder should not
// be considered a serious regression and don't need investigation beyond
// what is already in scope of the listed issue.
KnownIssue int
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
Notes string // notes for humans
2019-03-07 20:44:41 +03:00
// tryBot optionally specifies a policy func for whether trybots are enabled.
// nil means off. Even if tryBot returns true, BuildConfig.BuildsRepo must also
// return true. See the implementation of BuildConfig.BuildsRepoTryBot.
// The proj is "go", "net", etc. The branch is proj's branch.
// The goBranch is the same as branch for proj "go", else it's the go branch
// ("master, "release-branch.go1.12", etc).
tryBot func ( proj , branch , goBranch string ) bool
tryOnly bool // only used for trybots, and not regular builds
CompileOnly bool // if true, compile tests, but don't run them
FlakyNet bool // network tests are flaky (try anyway, but ignore some failures)
2020-07-01 21:45:10 +03:00
// buildsRepo optionally specifies whether this builder does
// builds (of any type) for the given repo ("go", "net", etc.)
// and its branch ("master", "release-branch.go1.12", "dev.link", etc.).
// goBranch is the branch of "go" to build against. If repo == "go",
// goBranch == branch.
2020-03-19 17:34:11 +03:00
//
2020-07-01 21:45:10 +03:00
// If nil, a default set of repos as reported by buildRepoByDefault
// is built. See buildsRepoAtAll method for details.
2020-03-19 17:34:11 +03:00
//
// To implement a minor change to the default policy, create a
2020-07-01 21:45:10 +03:00
// function that uses buildRepoByDefault. For example:
2020-03-19 17:34:11 +03:00
//
// buildsRepo: func(repo, branch, goBranch string) bool {
2020-07-01 21:45:10 +03:00
// b := buildRepoByDefault(repo)
2020-03-19 17:34:11 +03:00
// // ... modify b from the default value as needed ...
// return b
// }
//
2019-03-07 20:44:41 +03:00
buildsRepo func ( repo , branch , goBranch string ) bool
2019-03-01 19:54:25 +03:00
dashboard, cmd/coordinator, maintner/maintnerd: add support for BuildConfig.MinimumGoVersion field
The new BuildConfig.MinimumGoVersion field specifies the minimum
Go version the builder is allowed to use. It's useful when some
of the builders are too new, and do not support all of the supported
Go releases (e.g., openbsd-amd64-64 and freebsd-amd64-12_0 currently
require Go 1.11 and don't work on Go 1.10).
It only needs to be set when a builder doesn't support all supported
Go releases, since we don't typically test unsupported Go releases.
To allow cmd/coordinator to use this field and filter out work it
receives from maintner/maintnerd's GoFindTryWork RPC call,
we add a GoVersion slice to apipb.GerritTryWorkItem,
and populate it in maintapi.apiService.GoFindTryWork method.
For trybots on the Go repo, the GoVersion field is determined from
the branch name. For "release-branch.goX.Y" branches, it parses out
the major-minor Go version from the branch name. For master and
other branches, it assumes the latest Go release.
For trybots on subrepos, we already have the Go version information
available, so use it directly.
Afterwards, all that's left is to modify newTrySet in cmd/coordinator
to make use of BuildConfig.MinimumGoVersion and work.GoVersion to skip
builders that are too new for the Go version that needs to be tested.
Fixes golang/go#29265
Change-Id: I50b01830647e33e37e9eb8b89e0f2518812fa44f
Reviewed-on: https://go-review.googlesource.com/c/155463
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-01-12 00:44:01 +03:00
// MinimumGoVersion optionally specifies the minimum Go version
// this builder is allowed to use. It can be useful for skipping
// builders that are too new and no longer support some supported
// Go versions. It doesn't need to be set for builders that support
// all supported Go versions.
//
// Note: This field currently has effect on trybot runs only.
2019-03-07 20:44:41 +03:00
//
// TODO: unexport this and make buildsRepoAtAll return false on too-old
// of repos. The callers in coordinator will need updating.
dashboard, cmd/coordinator, maintner/maintnerd: add support for BuildConfig.MinimumGoVersion field
The new BuildConfig.MinimumGoVersion field specifies the minimum
Go version the builder is allowed to use. It's useful when some
of the builders are too new, and do not support all of the supported
Go releases (e.g., openbsd-amd64-64 and freebsd-amd64-12_0 currently
require Go 1.11 and don't work on Go 1.10).
It only needs to be set when a builder doesn't support all supported
Go releases, since we don't typically test unsupported Go releases.
To allow cmd/coordinator to use this field and filter out work it
receives from maintner/maintnerd's GoFindTryWork RPC call,
we add a GoVersion slice to apipb.GerritTryWorkItem,
and populate it in maintapi.apiService.GoFindTryWork method.
For trybots on the Go repo, the GoVersion field is determined from
the branch name. For "release-branch.goX.Y" branches, it parses out
the major-minor Go version from the branch name. For master and
other branches, it assumes the latest Go release.
For trybots on subrepos, we already have the Go version information
available, so use it directly.
Afterwards, all that's left is to modify newTrySet in cmd/coordinator
to make use of BuildConfig.MinimumGoVersion and work.GoVersion to skip
builders that are too new for the Go version that needs to be tested.
Fixes golang/go#29265
Change-Id: I50b01830647e33e37e9eb8b89e0f2518812fa44f
Reviewed-on: https://go-review.googlesource.com/c/155463
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-01-12 00:44:01 +03:00
MinimumGoVersion types . MajorMinor
2017-04-13 07:34:42 +03:00
// SkipSnapshot, if true, means to not fetch a tarball
// snapshot of the world post-make.bash from the buildlet (and
// thus to not write it to Google Cloud Storage). This is
// incompatible with sharded tests, and should only be used
// for very slow builders or networks, unable to transfer
// the tarball in under ~5 minutes.
SkipSnapshot bool
2017-03-15 23:18:30 +03:00
// RunBench causes the coordinator to run benchmarks on this buildlet type.
RunBench bool
2016-09-23 02:29:31 +03:00
// StopAfterMake causes the build to stop after the make
// script completes, returning its result as the result of the
// whole build. It does not run or compile any of the tests,
// nor does it write a snapshot of the world to cloud
// storage. This option is only supported for builders whose
// BuildConfig.SplitMakeRun returns true.
StopAfterMake bool
2019-03-07 20:44:41 +03:00
// needsGoProxy is whether this builder should have GOPROXY set.
// Currently this is only for the longtest builder, which needs
// to run cmd/go tests fetching from the network.
needsGoProxy bool
2017-04-22 02:41:12 +03:00
// InstallRacePackages controls which packages to "go install
// -race <pkgs>" after running make.bash (or equivalent). If
// the builder ends in "-race", the default if non-nil is just
// "std".
InstallRacePackages [ ] string
2017-05-20 00:23:14 +03:00
// GoDeps is a list of of git sha1 commits that must be in the
// commit to be tested's history. If absent, this builder is
// not run for that commit.
GoDeps [ ] string
2019-10-19 05:49:53 +03:00
// CrossCompileConfig optionally specifies whether and how
// this build is cross compiled.
CrossCompileConfig * CrossCompileConfig
2020-04-09 19:47:03 +03:00
// distTestAdjust optionally specifies a function that can
// adjust the cmd/dist test policy for this builder.
//
// The BuildConfig.ShouldRunDistTest method implements the
// default cmd/dist test policy, and then calls distTestAdjust
// to adjust that decision further, if distTestAdjust is not nil.
//
// The initial value of the run parameter is what the default
// policy said. The returned value from distTestAdjust is what
// BuildConfig.ShouldRunDistTest reports to the caller.
//
// For example:
//
2020-04-09 23:24:30 +03:00
// distTestAdjust: func(run bool, distTest string, isNormalTry bool) bool {
2020-04-09 19:47:03 +03:00
// // ... modify run from the initial value as needed ...
// return run
// }
//
2020-04-09 23:24:30 +03:00
distTestAdjust func ( run bool , distTest string , isNormalTry bool ) bool
2017-12-07 03:40:40 +03:00
cmd/coordinator, dashboard: remove some trybots, shard others wider
I'm aiming to have trybot runs finish in under 5 minutes.
This CL removes openbsd-386-gce58 and freebsd-386-gce101 from the trybot set.
openbsd-386-gce58 is the slowest builder. It has an average speed of
722 seconds (and 95 percentile of 923 seconds) over the past week, and
that's sharded over 4 machines. Too slow. It's not worth the resources
to keep it as a trybot. It hasn't caught any interesting bugs. This
builder will still run, but not as a pre-submit trybot.
freebsd-386-gce101 is not slow, but we're removing it to shift its
resources to shard other builders wider.
The coordinator now supports varying the build sharding width based on
whether a build is for a trybot or not. This CL defines separate
numbers for each, sharding builds wider as needed for some trybots.
freebsd-amd64-gce101 goes from 4 to 5 machines in try runs, and down
to 3 when not in try runs.
linux-amd64-race gets one more machine during try runs, and one fewer
in regular runs.
linux-arm goes from 7 machines always, to 3 or 8, depending on whether
it's a try run.
openbsd-amd64-58 goes from 4 to 3 or 6.
windows-amd64-gce goes from 4 to 2 or 6.
windows-amd64-race goes from 4 to 2 or 6.
darwin-amd64-10_11 goes from 3 to 3 or 4.
I'll see how these do over the next few days and readjust as needed.
Also in this CL: fix the constants for the expected duration of
make.bash, which impact when we schedule the creation of test sharding
helper buildlets. We were creating them too early before, wasting
resources.
Change-Id: I38a9b24841e196f1eb668de058c49af8c1d1c64f
Reviewed-on: https://go-review.googlesource.com/29116
Reviewed-by: Quentin Smith <quentin@golang.org>
2016-09-14 01:45:48 +03:00
// numTestHelpers is the number of _additional_ buildlets
// past the first one to help out with sharded tests.
2020-11-06 15:55:36 +03:00
// For TryBots and SlowBots, the numTryHelpers value is used,
// unless it's zero, in which case numTestHelpers is used.
cmd/coordinator, dashboard: remove some trybots, shard others wider
I'm aiming to have trybot runs finish in under 5 minutes.
This CL removes openbsd-386-gce58 and freebsd-386-gce101 from the trybot set.
openbsd-386-gce58 is the slowest builder. It has an average speed of
722 seconds (and 95 percentile of 923 seconds) over the past week, and
that's sharded over 4 machines. Too slow. It's not worth the resources
to keep it as a trybot. It hasn't caught any interesting bugs. This
builder will still run, but not as a pre-submit trybot.
freebsd-386-gce101 is not slow, but we're removing it to shift its
resources to shard other builders wider.
The coordinator now supports varying the build sharding width based on
whether a build is for a trybot or not. This CL defines separate
numbers for each, sharding builds wider as needed for some trybots.
freebsd-amd64-gce101 goes from 4 to 5 machines in try runs, and down
to 3 when not in try runs.
linux-amd64-race gets one more machine during try runs, and one fewer
in regular runs.
linux-arm goes from 7 machines always, to 3 or 8, depending on whether
it's a try run.
openbsd-amd64-58 goes from 4 to 3 or 6.
windows-amd64-gce goes from 4 to 2 or 6.
windows-amd64-race goes from 4 to 2 or 6.
darwin-amd64-10_11 goes from 3 to 3 or 4.
I'll see how these do over the next few days and readjust as needed.
Also in this CL: fix the constants for the expected duration of
make.bash, which impact when we schedule the creation of test sharding
helper buildlets. We were creating them too early before, wasting
resources.
Change-Id: I38a9b24841e196f1eb668de058c49af8c1d1c64f
Reviewed-on: https://go-review.googlesource.com/29116
Reviewed-by: Quentin Smith <quentin@golang.org>
2016-09-14 01:45:48 +03:00
numTestHelpers int
2020-11-06 15:55:36 +03:00
numTryTestHelpers int // For TryBots/SlowBots. If 0, numTestHelpers is used.
2015-05-28 07:51:25 +03:00
2015-06-05 04:25:50 +03:00
env [ ] string // extra environment ("key=value") pairs
allScriptArgs [ ] string
2019-02-14 05:18:06 +03:00
testHostConf * HostConfig // override HostConfig for testing, at least for now
2015-01-15 23:46:22 +03:00
}
2019-03-07 20:44:41 +03:00
// Env returns the environment variables this builder should run with.
2015-08-04 05:19:02 +03:00
func ( c * BuildConfig ) Env ( ) [ ] string {
2016-05-06 21:55:26 +03:00
env := [ ] string { "GO_BUILDER_NAME=" + c . Name }
if c . FlakyNet {
env = append ( env , "GO_BUILDER_FLAKY_NET=1" )
}
2020-05-13 21:30:25 +03:00
if c . IsLongTest ( ) {
// Set a private hook in cmd/dist to run main Go repository tests
// without the default -short flag. See golang.org/issue/12508.
env = append ( env , "GO_TEST_SHORT=0" )
}
2019-10-30 06:59:13 +03:00
env = append ( env , c . HostConfig ( ) . env ... )
2016-05-06 21:55:26 +03:00
return append ( env , c . env ... )
2015-08-04 05:19:02 +03:00
}
2015-01-22 02:15:48 +03:00
2019-03-07 20:44:41 +03:00
// ModulesEnv returns the extra module-specific environment variables
// to append to this builder as a function of the repo being built
// ("go", "oauth2", "net", etc).
func ( c * BuildConfig ) ModulesEnv ( repo string ) ( env [ ] string ) {
2020-08-20 18:53:58 +03:00
// EC2 and reverse builders should set the public module proxy
// address instead of the internal proxy.
if ( c . HostConfig ( ) . isEC2 || c . IsReverse ( ) ) && repo != "go" {
2019-05-02 23:32:40 +03:00
env = append ( env , "GOPROXY=https://proxy.golang.org" )
2019-03-07 20:44:41 +03:00
}
switch repo {
2019-03-13 07:44:17 +03:00
case "go" :
if ! c . OutboundNetworkAllowed ( ) {
env = append ( env , "GOPROXY=off" )
}
2019-08-29 21:26:25 +03:00
case "oauth2" , "build" , "perf" , "website" :
2019-03-07 20:44:41 +03:00
env = append ( env , "GO111MODULE=on" )
}
2019-09-09 23:48:08 +03:00
return env
}
// ShouldTestPackageInGOPATHMode is used to control whether the package
// with the specified import path should be tested in GOPATH mode.
//
// When running tests for all golang.org/* repositories in GOPATH mode,
// this method is called repeatedly with the full import path of each
// package that is found and is being considered for testing in GOPATH
// mode. It's not used and has no effect on import paths in the main
// "go" repository. It has no effect on tests done in module mode.
//
// When considering making changes here, keep the release policy in mind:
//
// https://golang.org/doc/devel/release.html#policy
//
func ( * BuildConfig ) ShouldTestPackageInGOPATHMode ( importPath string ) bool {
if importPath == "golang.org/x/tools/gopls" ||
strings . HasPrefix ( importPath , "golang.org/x/tools/gopls/" ) {
// Don't test golang.org/x/tools/gopls/... in GOPATH mode.
return false
}
2019-09-18 03:44:48 +03:00
if importPath == "golang.org/x/net/http2/h2demo" {
// Don't test golang.org/x/net/http2/h2demo in GOPATH mode.
//
// It was never tested before golang.org/issue/34361 because it
// had a +build h2demo constraint. But that build constraint is
// being removed, so explicitly skip testing it in GOPATH mode.
//
// The package is supported only in module mode now, since
// it requires third-party dependencies.
return false
}
2019-09-09 23:48:08 +03:00
// Test everything else in GOPATH mode as usual.
return true
2019-03-07 20:44:41 +03:00
}
2019-10-30 06:59:13 +03:00
func ( c * BuildConfig ) IsReverse ( ) bool { return c . HostConfig ( ) . IsReverse }
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
2019-10-30 06:59:13 +03:00
func ( c * BuildConfig ) IsContainer ( ) bool { return c . HostConfig ( ) . IsContainer ( ) }
2018-05-05 19:36:05 +03:00
func ( c * HostConfig ) IsContainer ( ) bool { return c . ContainerImage != "" }
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
2019-10-30 06:59:13 +03:00
func ( c * BuildConfig ) IsVM ( ) bool { return c . HostConfig ( ) . IsVM ( ) }
2020-08-18 20:32:05 +03:00
// IsVM reports whether the instance running the job is ultimately a VM. Hosts where
// a VM is used only to initiate a container are considered a container, not a VM.
// EC2 instances may be configured to run in containers that are running
// on custom AMIs.
func ( c * HostConfig ) IsVM ( ) bool {
if c . isEC2 {
return c . VMImage != "" && c . ContainerImage == ""
}
return c . VMImage != ""
}
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
2015-01-16 03:29:16 +03:00
func ( c * BuildConfig ) GOOS ( ) string { return c . Name [ : strings . Index ( c . Name , "-" ) ] }
func ( c * BuildConfig ) GOARCH ( ) string {
arch := c . Name [ strings . Index ( c . Name , "-" ) + 1 : ]
i := strings . Index ( arch , "-" )
if i == - 1 {
return arch
}
return arch [ : i ]
}
2019-10-16 09:02:29 +03:00
// MatchesSlowBotTerm reports whether some provided term from a
// TRY=... comment on a Run-TryBot+1 vote on Gerrit should match this
// build config.
func ( c * BuildConfig ) MatchesSlowBotTerm ( term string ) bool {
return term != "" && ( term == c . Name || slowBotAliases [ term ] == c . Name )
}
2015-05-28 07:51:25 +03:00
// FilePathJoin is mostly like filepath.Join (without the cleaning) except
// it uses the path separator of c.GOOS instead of the host system's.
func ( c * BuildConfig ) FilePathJoin ( x ... string ) string {
if c . GOOS ( ) == "windows" {
return strings . Join ( x , "\\" )
}
return strings . Join ( x , "/" )
}
2019-02-14 05:18:06 +03:00
// DistTestsExecTimeout returns how long the coordinator should wait
// for a cmd/dist test execution to run the provided dist test names.
func ( c * BuildConfig ) DistTestsExecTimeout ( distTests [ ] string ) time . Duration {
// TODO: consider using distTests? We never did before, but
// now we have the TestStats in the coordinator. Pass in a
// *buildstats.TestStats and use historical data times some
// fudge factor? For now just use the old 20 minute limit
// we've used since 2014, but scale it by the
// GO_TEST_TIMEOUT_SCALE for the super slow builders which
// struggle with, say, the cgo tests. (which should be broken
// up into separate dist tests or shards, like the test/ dir
// was)
d := 20 * time . Minute
d *= time . Duration ( c . timeoutScale ( ) )
return d
}
// timeoutScale returns this builder's GO_TEST_TIMEOUT_SCALE value, or 1.
func ( c * BuildConfig ) timeoutScale ( ) int {
const pfx = "GO_TEST_TIMEOUT_SCALE="
2019-10-30 06:59:13 +03:00
for _ , env := range [ ] [ ] string { c . env , c . HostConfig ( ) . env } {
2019-02-14 05:18:06 +03:00
for _ , kv := range env {
if strings . HasPrefix ( kv , pfx ) {
if n , err := strconv . Atoi ( kv [ len ( pfx ) : ] ) ; err == nil && n > 0 {
return n
}
}
}
}
return 1
}
2019-10-30 06:59:13 +03:00
// HostConfig returns the host configuration of c.
func ( c * BuildConfig ) HostConfig ( ) * HostConfig {
2019-02-14 05:18:06 +03:00
if c . testHostConf != nil {
return c . testHostConf
}
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
if c , ok := Hosts [ c . HostType ] ; ok {
return c
}
panic ( fmt . Sprintf ( "missing buildlet config for buildlet %q" , c . Name ) )
}
2019-03-26 20:45:16 +03:00
// GoBootstrapURL returns the URL of a built Go 1.4+ tar.gz for the
// build configuration type c, or empty string if there isn't one.
2016-03-22 01:05:52 +03:00
func ( c * BuildConfig ) GoBootstrapURL ( e * buildenv . Environment ) string {
2019-10-30 06:59:13 +03:00
return strings . Replace ( c . HostConfig ( ) . goBootstrapURLTmpl , "$BUCKET" , e . BuildletBucket , 1 )
2016-03-22 01:05:52 +03:00
}
2015-01-28 01:22:21 +03:00
// BuildletBinaryURL returns the public URL of this builder's buildlet.
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
func ( c * HostConfig ) BuildletBinaryURL ( e * buildenv . Environment ) string {
2016-03-22 01:05:52 +03:00
tmpl := c . buildletURLTmpl
2016-02-15 02:59:59 +03:00
return strings . Replace ( tmpl , "$BUCKET" , e . BuildletBucket , 1 )
2015-01-28 01:22:21 +03:00
}
2015-06-17 18:22:14 +03:00
func ( c * BuildConfig ) IsRace ( ) bool {
return strings . HasSuffix ( c . Name , "-race" )
}
2020-05-13 21:30:25 +03:00
// IsLongTest reports whether this is a longtest builder.
// A longtest builder runs tests without the -short flag.
//
// A builder is considered to be a longtest builder
// if and only if its name ends with "-longtest".
2019-03-11 21:49:56 +03:00
func ( c * BuildConfig ) IsLongTest ( ) bool {
return strings . HasSuffix ( c . Name , "-longtest" )
}
2019-03-13 07:44:17 +03:00
// OutboundNetworkAllowed reports whether this builder should be
// allowed to make outbound network requests. This is only enforced
// on some builders. (Currently most Linux ones)
func ( c * BuildConfig ) OutboundNetworkAllowed ( ) bool {
2019-05-10 22:28:40 +03:00
return c . IsLongTest ( )
2019-03-13 07:44:17 +03:00
}
2017-04-22 02:41:12 +03:00
func ( c * BuildConfig ) GoInstallRacePackages ( ) [ ] string {
if c . InstallRacePackages != nil {
return append ( [ ] string ( nil ) , c . InstallRacePackages ... )
}
if c . IsRace ( ) {
return [ ] string { "std" }
}
return nil
}
2015-01-16 20:54:03 +03:00
// AllScript returns the relative path to the operating system's script to
// do the build and run its standard set of tests.
// Example values are "src/all.bash", "src/all.bat", "src/all.rc".
func ( c * BuildConfig ) AllScript ( ) string {
2017-04-13 00:37:13 +03:00
if c . Name == "" {
panic ( "bogus BuildConfig" )
}
2015-06-17 18:22:14 +03:00
if c . IsRace ( ) {
2015-01-22 02:15:48 +03:00
if strings . HasPrefix ( c . Name , "windows-" ) {
return "src/race.bat"
}
return "src/race.bash"
}
2015-01-16 20:54:03 +03:00
if strings . HasPrefix ( c . Name , "windows-" ) {
return "src/all.bat"
}
if strings . HasPrefix ( c . Name , "plan9-" ) {
return "src/all.rc"
}
2016-05-05 03:42:49 +03:00
if strings . HasPrefix ( c . Name , "misc-compile" ) {
2015-04-30 00:44:46 +03:00
return "src/buildall.bash"
}
2015-01-16 20:54:03 +03:00
return "src/all.bash"
}
2015-05-27 21:51:27 +03:00
// SplitMakeRun reports whether the coordinator should first compile
// (using c.MakeScript), then snapshot, then run the tests (ideally
2019-03-07 20:44:41 +03:00
// sharded) using cmd/dist test.
2015-05-27 21:51:27 +03:00
// Eventually this function should always return true (and then be deleted)
// but for now we've only set up the scripts and verified that the main
// configurations work.
func ( c * BuildConfig ) SplitMakeRun ( ) bool {
switch c . AllScript ( ) {
2016-05-04 20:47:12 +03:00
case "src/all.bash" , "src/all.bat" ,
"src/race.bash" , "src/race.bat" ,
2020-10-07 18:12:00 +03:00
"src/all.rc" :
2015-05-27 21:51:27 +03:00
// These we've verified to work.
return true
}
2020-10-03 12:22:43 +03:00
// TODO(bradfitz): buildall.bash should really just be N small container
// jobs instead of a "buildall.bash". Then we can delete this whole method.
2015-05-27 21:51:27 +03:00
return false
}
2019-03-07 20:44:41 +03:00
func ( c * BuildConfig ) IsTryOnly ( ) bool { return c . tryOnly }
func ( c * BuildConfig ) NeedsGoProxy ( ) bool { return c . needsGoProxy }
2019-03-26 20:45:16 +03:00
// BuildsRepoPostSubmit reports whether the build configuration type c
2019-03-07 20:44:41 +03:00
// should build the given repo ("go", "net", etc) and branch
// ("master", "release-branch.go1.12") as a post-submit build
// that shows up on https://build.golang.org/.
func ( c * BuildConfig ) BuildsRepoPostSubmit ( repo , branch , goBranch string ) bool {
if c . tryOnly {
2015-06-11 20:01:24 +03:00
return false
}
2019-03-07 20:44:41 +03:00
return c . buildsRepoAtAll ( repo , branch , goBranch )
2015-06-05 02:45:17 +03:00
}
2019-03-07 20:44:41 +03:00
// BuildsRepoTryBot reports whether the build configuration type c
// should build the given repo ("go", "net", etc) and branch
// ("master", "release-branch.go1.12") as a trybot.
func ( c * BuildConfig ) BuildsRepoTryBot ( repo , branch , goBranch string ) bool {
return c . tryBot != nil && c . tryBot ( repo , branch , goBranch ) && c . buildsRepoAtAll ( repo , branch , goBranch )
2018-10-26 22:21:58 +03:00
}
2019-03-19 20:17:23 +03:00
// ShouldRunDistTest reports whether the named cmd/dist test should be
2020-04-09 23:24:30 +03:00
// run for this build config. The isNormalTry parameter is whether this
// is for a normal TryBot (non-SlowBot) run.
2019-03-19 20:17:23 +03:00
//
2020-04-09 23:24:30 +03:00
// In general, this returns true. When in normal trybot mode,
// some slow portable tests are only run on the fastest builder.
2020-04-09 19:47:03 +03:00
//
// Individual builders can adjust this policy to fit their needs.
2020-04-09 23:24:30 +03:00
func ( c * BuildConfig ) ShouldRunDistTest ( distTest string , isNormalTry bool ) bool {
2020-04-09 19:47:03 +03:00
run := true
// This section implements the default cmd/dist test policy.
// Any changes here will affect test coverage on all builders.
2020-04-09 23:24:30 +03:00
if isNormalTry {
2020-04-09 19:47:03 +03:00
slowPortableTest := distTest == "api" // Whether a test is slow and has the same behavior everywhere.
fastestBuilder := c . Name == "linux-amd64"
if slowPortableTest && ! fastestBuilder {
// Don't run the test on this builder.
run = false
}
2019-03-19 20:17:23 +03:00
}
2020-04-09 19:47:03 +03:00
// Let individual builders adjust the cmd/dist test policy.
if c . distTestAdjust != nil {
2020-04-09 23:24:30 +03:00
run = c . distTestAdjust ( run , distTest , isNormalTry )
2019-03-19 20:17:23 +03:00
}
2020-04-09 19:47:03 +03:00
return run
2019-03-19 20:17:23 +03:00
}
2019-03-07 20:44:41 +03:00
// buildsRepoAtAll reports whether we should do builds of the provided
// repo ("go", "sys", "net", etc). This applies to both post-submit
// and trybot builds. Use BuildsRepoPostSubmit for only post-submit
// or BuildsRepoTryBot for trybots.
2019-03-11 21:49:56 +03:00
//
// The branch is the branch of repo ("master",
// "release-branch.go1.12", etc); it is required. The goBranch is the
// branch of Go itself. It's required if repo != "go". When repo ==
// "go", the goBranch defaults to the value of branch.
2019-03-07 20:44:41 +03:00
func ( c * BuildConfig ) buildsRepoAtAll ( repo , branch , goBranch string ) bool {
2019-03-11 21:49:56 +03:00
if goBranch == "" {
if repo == "go" {
goBranch = branch
} else {
panic ( "missing goBranch" )
}
}
if branch == "" {
panic ( "missing branch" )
}
if repo == "" {
panic ( "missing repo" )
}
2019-03-01 02:20:41 +03:00
// Don't build old branches.
const minGo1x = 11
2019-03-13 11:29:15 +03:00
for _ , b := range [ ] string { branch , goBranch } {
if bmaj , bmin , ok := version . ParseReleaseBranch ( b ) ; ok {
if bmaj != 1 || bmin < minGo1x {
return false
}
bmm := types . MajorMinor { bmaj , bmin }
if bmm . Less ( c . MinimumGoVersion ) {
return false
}
2019-04-03 07:45:29 +03:00
if repo == "exp" {
// Don't test exp against release branches; it's experimental.
return false
}
2019-03-13 11:29:15 +03:00
}
2018-11-15 08:55:22 +03:00
}
2019-03-01 02:20:41 +03:00
2019-03-07 20:44:41 +03:00
// Build dev.boringcrypto branches only on linux/amd64 and windows/386 (see golang.org/issue/26791).
if repo == "go" && ( branch == "dev.boringcrypto" || strings . HasPrefix ( branch , "dev.boringcrypto." ) ) {
if c . Name != "linux-amd64" && c . Name != "windows-386-2008" {
2018-11-15 08:55:22 +03:00
return false
}
}
2019-04-05 08:26:05 +03:00
if repo != "go" && ! c . SplitMakeRun ( ) {
return false
}
2019-03-07 20:44:41 +03:00
if p := c . buildsRepo ; p != nil {
return p ( repo , branch , goBranch )
}
2020-07-01 21:45:10 +03:00
return buildRepoByDefault ( repo )
2019-04-05 08:26:05 +03:00
}
2020-07-01 21:45:10 +03:00
// buildRepoByDefault reports whether builders should do builds
// for the given repo ("go", "net", etc.) by default.
//
// It's used directly by BuildConfig.buildsRepoAtAll method for
// builders with a nil BuildConfig.buildsRepo value.
// It's also used by many builders that provide a custom build
// repo policy (a non-nil BuildConfig.buildsRepo value) as part
// of making the decision of whether to build a given repo.
//
// As a result, it effectively implements the default build repo policy.
// Any changes here will affect repo coverage of many builders.
func buildRepoByDefault ( repo string ) bool {
2019-03-14 23:35:32 +03:00
switch repo {
case "go" :
2020-07-01 21:45:10 +03:00
// Build the main Go repository by default.
2019-03-14 23:35:32 +03:00
return true
2019-12-07 08:14:28 +03:00
case "mobile" , "exp" , "build" :
2020-07-01 21:45:10 +03:00
// Don't build x/mobile, x/exp, x/build by default.
//
// Builders need to explicitly opt-in to build these repos.
2019-03-11 07:20:46 +03:00
return false
2020-07-01 21:45:10 +03:00
default :
// Build all other golang.org/x repositories by default.
return true
2019-03-11 07:20:46 +03:00
}
2018-11-15 08:55:22 +03:00
}
2019-04-05 08:26:05 +03:00
func defaultPlusExp ( repo , branch , goBranch string ) bool {
if repo == "exp" {
return true
}
2020-07-01 21:45:10 +03:00
return buildRepoByDefault ( repo )
2019-04-05 08:26:05 +03:00
}
2019-12-07 08:14:28 +03:00
func defaultPlusExpBuild ( repo , branch , goBranch string ) bool {
if repo == "exp" || repo == "build" {
return true
}
2020-07-01 21:45:10 +03:00
return buildRepoByDefault ( repo )
2019-12-07 08:14:28 +03:00
}
2015-05-21 07:02:38 +03:00
// AllScriptArgs returns the set of arguments that should be passed to the
2015-04-29 15:54:19 +03:00
// all.bash-equivalent script. Usually empty.
func ( c * BuildConfig ) AllScriptArgs ( ) [ ] string {
2015-06-05 04:25:50 +03:00
return append ( [ ] string ( nil ) , c . allScriptArgs ... )
2015-04-29 15:54:19 +03:00
}
2015-02-02 15:05:01 +03:00
// MakeScript returns the relative path to the operating system's script to
// do the build.
// Example values are "src/make.bash", "src/make.bat", "src/make.rc".
func ( c * BuildConfig ) MakeScript ( ) string {
if strings . HasPrefix ( c . Name , "windows-" ) {
return "src/make.bat"
}
if strings . HasPrefix ( c . Name , "plan9-" ) {
return "src/make.rc"
}
return "src/make.bash"
}
2015-05-21 07:02:38 +03:00
// MakeScriptArgs returns the set of arguments that should be passed to the
// make.bash-equivalent script. Usually empty.
func ( c * BuildConfig ) MakeScriptArgs ( ) [ ] string {
return c . AllScriptArgs ( )
}
2015-02-02 15:05:01 +03:00
// GorootFinal returns the default install location for
// releases for this platform.
func ( c * BuildConfig ) GorootFinal ( ) string {
if strings . HasPrefix ( c . Name , "windows-" ) {
return "c:\\go"
}
return "/usr/local/go"
}
2015-01-15 23:46:22 +03:00
// MachineType returns the GCE machine type to use for this builder.
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
func ( c * HostConfig ) MachineType ( ) string {
2015-01-15 23:46:22 +03:00
if v := c . machineType ; v != "" {
return v
}
2018-05-04 05:42:17 +03:00
if c . IsContainer ( ) {
// Set a higher default machine size for containers,
// so their /workdir tmpfs can be larger. The COS
// image has no swap, so we want to make sure the
// /workdir fits completely in memory.
2019-11-23 02:01:25 +03:00
return "n1-standard-4" // 4 vCPUs, 15 GB mem
2018-05-04 05:42:17 +03:00
}
2015-01-15 23:46:22 +03:00
return "n1-highcpu-2"
}
2020-05-13 20:27:15 +03:00
// IsEC2 returns true if the machine type is an EC2 arm64 type.
func ( c * HostConfig ) IsEC2 ( ) bool {
return c . isEC2
}
2015-05-01 03:03:01 +03:00
// ShortOwner returns a short human-readable owner.
func ( c BuildConfig ) ShortOwner ( ) string {
2019-10-30 06:59:13 +03:00
owner := c . HostConfig ( ) . Owner
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
if owner == "" {
2015-05-01 03:03:01 +03:00
return "go-dev"
}
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
return strings . TrimSuffix ( owner , "@golang.org" )
2015-05-01 03:03:01 +03:00
}
2017-04-13 22:38:46 +03:00
// OwnerGithub returns the Github handle of the owner.
func ( c BuildConfig ) OwnerGithub ( ) string {
2019-10-30 06:59:13 +03:00
return c . HostConfig ( ) . OwnerGithub
2017-04-13 22:38:46 +03:00
}
2016-09-23 03:06:28 +03:00
// PoolName returns a short summary of the builder's host type for the
2017-04-03 17:51:28 +03:00
// https://farmer.golang.org/builders page.
2016-09-23 03:06:28 +03:00
func ( c * HostConfig ) PoolName ( ) string {
switch {
case c . IsReverse :
return "Reverse (dedicated machine/VM)"
2020-05-13 20:27:15 +03:00
case c . IsEC2 ( ) :
2020-05-20 00:26:14 +03:00
return "EC2 VM Container"
2018-05-05 19:36:05 +03:00
case c . IsVM ( ) :
2016-09-23 03:06:28 +03:00
return "GCE VM"
2018-05-05 19:36:05 +03:00
case c . IsContainer ( ) :
2018-05-04 05:42:17 +03:00
return "Container"
2016-09-23 03:06:28 +03:00
}
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
panic ( "unknown builder type" )
}
2019-02-22 00:10:54 +03:00
// ContainerVMImage returns the base VM name (not the fully qualified
// URL resource name of the VM) that starts the konlet program that
2019-05-17 23:08:13 +03:00
// pulls & runs a container.
// The empty string means that no particular VM image is required
// and the caller can run this container in any host.
//
// This method is only applicable when c.IsContainer() is true.
2019-02-22 00:10:54 +03:00
func ( c * HostConfig ) ContainerVMImage ( ) string {
if c . KonletVMImage != "" {
return c . KonletVMImage
}
2019-05-17 23:08:13 +03:00
if c . NestedVirt {
return "debian-stretch-vmx"
}
2020-05-20 00:26:14 +03:00
if c . isEC2 && c . ContainerImage != "" {
return fmt . Sprintf ( "gcr.io/%s/%s" , buildenv . Production . ProjectName , c . ContainerImage )
}
2019-05-17 23:08:13 +03:00
return ""
2019-02-22 00:10:54 +03:00
}
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
// IsHermetic reports whether this host config gets a fresh
// environment (including /usr, /var, etc) for each execution. This is
// true for VMs, GKE, and reverse buildlets running their containers
// running in Docker, but false on some reverse buildlets.
func ( c * HostConfig ) IsHermetic ( ) bool {
switch {
case c . IsReverse :
return c . HermeticReverse
2020-05-13 20:27:15 +03:00
case c . IsEC2 ( ) :
return true
2018-05-05 19:36:05 +03:00
case c . IsVM ( ) :
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
return true
2018-05-05 19:36:05 +03:00
case c . IsContainer ( ) :
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
return true
}
panic ( "unknown builder type" )
2016-09-23 03:06:28 +03:00
}
2015-06-05 04:25:50 +03:00
// GCENumCPU reports the number of GCE CPUs this buildlet requires.
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
func ( c * HostConfig ) GCENumCPU ( ) int {
2015-06-05 04:25:50 +03:00
t := c . MachineType ( )
n , _ := strconv . Atoi ( t [ strings . LastIndex ( t , "-" ) + 1 : ] )
return n
}
2020-11-06 15:55:36 +03:00
// NumTestHelpers reports how many additional buildlets
// past the first one to help out with sharded tests.
//
// isTry specifies whether it's for a pre-submit test
// run (a TryBot or SlowBot) where speed matters more.
cmd/coordinator, dashboard: remove some trybots, shard others wider
I'm aiming to have trybot runs finish in under 5 minutes.
This CL removes openbsd-386-gce58 and freebsd-386-gce101 from the trybot set.
openbsd-386-gce58 is the slowest builder. It has an average speed of
722 seconds (and 95 percentile of 923 seconds) over the past week, and
that's sharded over 4 machines. Too slow. It's not worth the resources
to keep it as a trybot. It hasn't caught any interesting bugs. This
builder will still run, but not as a pre-submit trybot.
freebsd-386-gce101 is not slow, but we're removing it to shift its
resources to shard other builders wider.
The coordinator now supports varying the build sharding width based on
whether a build is for a trybot or not. This CL defines separate
numbers for each, sharding builds wider as needed for some trybots.
freebsd-amd64-gce101 goes from 4 to 5 machines in try runs, and down
to 3 when not in try runs.
linux-amd64-race gets one more machine during try runs, and one fewer
in regular runs.
linux-arm goes from 7 machines always, to 3 or 8, depending on whether
it's a try run.
openbsd-amd64-58 goes from 4 to 3 or 6.
windows-amd64-gce goes from 4 to 2 or 6.
windows-amd64-race goes from 4 to 2 or 6.
darwin-amd64-10_11 goes from 3 to 3 or 4.
I'll see how these do over the next few days and readjust as needed.
Also in this CL: fix the constants for the expected duration of
make.bash, which impact when we schedule the creation of test sharding
helper buildlets. We were creating them too early before, wasting
resources.
Change-Id: I38a9b24841e196f1eb668de058c49af8c1d1c64f
Reviewed-on: https://go-review.googlesource.com/29116
Reviewed-by: Quentin Smith <quentin@golang.org>
2016-09-14 01:45:48 +03:00
func ( c * BuildConfig ) NumTestHelpers ( isTry bool ) int {
if isTry && c . numTryTestHelpers != 0 {
return c . numTryTestHelpers
}
return c . numTestHelpers
}
2018-10-26 22:21:58 +03:00
// defaultTrySet returns a trybot policy function that reports whether
// a project should use trybots. All the default projects are included,
// plus any given in extraProj.
2019-03-07 20:44:41 +03:00
func defaultTrySet ( extraProj ... string ) func ( proj , branch , goBranch string ) bool {
return func ( proj , branch , goBranch string ) bool {
2018-10-26 22:21:58 +03:00
if proj == "go" {
return true
}
for _ , p := range extraProj {
if proj == p {
return true
}
}
switch proj {
2019-03-14 23:35:32 +03:00
case "grpc-review" :
2018-10-26 22:21:58 +03:00
return false
}
return true
}
}
// explicitTrySet returns a trybot policy function that reports
// whether a project should use trybots. Only the provided projects in
// projs are enabled.
2019-03-07 20:44:41 +03:00
func explicitTrySet ( projs ... string ) func ( proj , branch , goBranch string ) bool {
return func ( proj , branch , goBranch string ) bool {
2018-10-26 22:21:58 +03:00
for _ , p := range projs {
if proj == p {
return true
}
}
return false
}
}
2015-01-15 23:46:22 +03:00
func init ( ) {
2017-02-27 19:05:25 +03:00
addBuilder ( BuildConfig {
2019-03-07 20:44:41 +03:00
Name : "freebsd-amd64-11_1" ,
HostType : "host-freebsd-11_1" ,
tryBot : nil ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-08-04 18:53:43 +03:00
// This builder is unfortunately still used by Go 1.14 and 1.13,
// so keep it around a bit longer. See golang.org/issue/40563.
// Test relevant Go versions so that we're better informed.
return atMostGo1 ( goBranch , 14 ) && buildRepoByDefault ( repo )
2019-03-07 20:44:41 +03:00
} ,
2020-04-09 19:47:03 +03:00
distTestAdjust : fasterTrybots ,
2017-07-27 07:52:12 +03:00
numTryTestHelpers : 4 ,
2017-02-27 19:05:25 +03:00
} )
2018-09-28 02:43:25 +03:00
addBuilder ( BuildConfig {
Name : "freebsd-amd64-11_2" ,
HostType : "host-freebsd-11_2" ,
2018-10-26 22:21:58 +03:00
tryBot : explicitTrySet ( "sys" ) ,
2020-04-09 19:47:03 +03:00
distTestAdjust : fasterTrybots ,
2018-09-28 02:43:25 +03:00
numTryTestHelpers : 4 ,
} )
2018-10-05 23:57:29 +03:00
addBuilder ( BuildConfig {
2019-03-07 20:44:41 +03:00
Name : "freebsd-amd64-12_0" ,
HostType : "host-freebsd-12_0" ,
MinimumGoVersion : types . MajorMinor { 1 , 11 } ,
tryBot : defaultTrySet ( "sys" ) ,
2020-04-09 19:47:03 +03:00
distTestAdjust : fasterTrybots , // If changing this policy, update TestShouldRunDistTest accordingly.
2018-10-05 23:57:29 +03:00
numTryTestHelpers : 4 ,
} )
2019-03-13 00:13:50 +03:00
addBuilder ( BuildConfig {
Name : "freebsd-386-12_0" ,
HostType : "host-freebsd-12_0" ,
env : [ ] string { "GOARCH=386" , "GOHOSTARCH=386" } ,
2020-04-09 19:47:03 +03:00
distTestAdjust : fasterTrybots ,
2019-03-13 00:13:50 +03:00
numTryTestHelpers : 4 ,
} )
2015-01-22 02:15:48 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "freebsd-amd64-race" ,
2020-08-04 18:53:43 +03:00
HostType : "host-freebsd-11_1-big" , // TODO(golang.org/issue/40562): Update to newer FreeBSD.
2015-01-22 02:15:48 +03:00
} )
2017-02-27 19:05:25 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "freebsd-386-11_1" ,
HostType : "host-freebsd-11_1" ,
distTestAdjust : noTestDirAndNoReboot ,
2019-03-07 20:44:41 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-08-04 18:53:43 +03:00
// This builder is unfortunately still used by Go 1.14 and 1.13,
// so keep it around a bit longer. See golang.org/issue/40563.
// Test relevant Go versions so that we're better informed.
return atMostGo1 ( goBranch , 14 ) && buildRepoByDefault ( repo )
2019-03-07 20:44:41 +03:00
} ,
2019-11-14 18:43:33 +03:00
env : [ ] string { "GOARCH=386" , "GOHOSTARCH=386" } ,
2017-02-27 19:05:25 +03:00
} )
2018-09-28 02:43:25 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "freebsd-386-11_2" ,
HostType : "host-freebsd-11_2" ,
distTestAdjust : noTestDirAndNoReboot ,
tryBot : explicitTrySet ( "sys" ) ,
env : [ ] string { "GOARCH=386" , "GOHOSTARCH=386" } ,
2018-09-28 02:43:25 +03:00
} )
2015-01-28 01:22:21 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "linux-386" ,
HostType : "host-linux-jessie" ,
distTestAdjust : fasterTrybots ,
tryBot : defaultTrySet ( ) ,
2019-03-06 05:06:17 +03:00
env : [ ] string {
"GOARCH=386" ,
"GOHOSTARCH=386" ,
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-06 05:06:17 +03:00
} ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
numTestHelpers : 1 ,
numTryTestHelpers : 3 ,
2015-01-28 01:22:21 +03:00
} )
2020-10-07 18:24:42 +03:00
addBuilder ( BuildConfig {
Name : "linux-386-softfloat" ,
Notes : "GO386=softfloat" ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
// GO386=softfloat is added in Go 1.16 (golang.org/issue/41848).
return atLeastGo1 ( goBranch , 16 ) && ( repo == "go" || repo == "crypto" )
} ,
GoDeps : [ ] string {
"04b8a9fea57e37589d82410281f22ebde0027808" , // CL 260017, "all: implement GO386=softfloat".
} ,
HostType : "host-linux-stretch" ,
env : [ ] string { "GOARCH=386" , "GOHOSTARCH=386" , "GO386=softfloat" } ,
} )
2015-01-28 01:22:21 +03:00
addBuilder ( BuildConfig {
2019-03-11 07:20:46 +03:00
Name : "linux-386-387" ,
Notes : "GO386=387" ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-10-05 19:20:33 +03:00
// GO386=387 is removed in Go 1.16 (golang.org/issue/40255).
// It's still supported in Go 1.15 and 1.14.
return atMostGo1 ( goBranch , 15 ) && ( repo == "go" || repo == "crypto" )
2019-03-11 07:20:46 +03:00
} ,
2018-05-14 20:22:45 +03:00
HostType : "host-linux-jessie" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
env : [ ] string { "GOARCH=386" , "GOHOSTARCH=386" , "GO386=387" } ,
2015-01-28 01:22:21 +03:00
} )
addBuilder ( BuildConfig {
2019-04-05 08:26:05 +03:00
Name : "linux-amd64" ,
HostType : "host-linux-stretch" ,
tryBot : defaultTrySet ( ) ,
2019-12-07 08:14:28 +03:00
buildsRepo : defaultPlusExpBuild ,
2019-03-06 05:06:17 +03:00
env : [ ] string {
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-06 05:06:17 +03:00
} ,
2018-05-04 05:42:17 +03:00
numTestHelpers : 1 ,
numTryTestHelpers : 4 ,
RunBench : true ,
2015-11-20 21:00:06 +03:00
} )
2019-02-16 01:05:42 +03:00
addBuilder ( BuildConfig {
2019-03-27 02:04:31 +03:00
Name : "linux-amd64-vmx" ,
HostType : "host-linux-stretch-vmx" ,
buildsRepo : disabledBuilder ,
2019-02-16 01:05:42 +03:00
} )
2017-11-18 06:31:35 +03:00
const testAlpine = false // Issue 22689 (hide all red builders), Issue 19938 (get Alpine passing)
if testAlpine {
addBuilder ( BuildConfig {
Name : "linux-amd64-alpine" ,
HostType : "host-linux-x86-alpine" ,
} )
}
2020-11-03 06:25:51 +03:00
// addMiscCompileGo1 adds a misc-compile TryBot that runs
2019-05-10 22:28:40 +03:00
// buildall.bash on a subset of platforms matching the egrep
// pattern rx. The pattern is matched against the "go tool
// dist list" name, but with hyphens instead of forward
// slashes ("linux-amd64", etc).
2020-11-03 06:25:51 +03:00
// If min is non-zero, it specifies the minimum Go 1.x version.
addMiscCompileGo1 := func ( min int , suffix , rx string ) {
var v types . MajorMinor
var alsoNote string
if min != 0 {
v = types . MajorMinor { 1 , min }
alsoNote = fmt . Sprintf ( " Applies to Go 1.%d and newer." , min )
}
2016-05-05 03:42:49 +03:00
addBuilder ( BuildConfig {
2019-03-06 08:20:12 +03:00
Name : "misc-compile" + suffix ,
HostType : "host-linux-jessie" ,
tryBot : defaultTrySet ( ) ,
env : [ ] string {
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-06 08:20:12 +03:00
} ,
2020-11-03 06:25:51 +03:00
tryOnly : true ,
MinimumGoVersion : v ,
CompileOnly : true ,
Notes : "Runs buildall.bash to cross-compile & vet std+cmd packages for " + rx + ", but doesn't run any tests." + alsoNote ,
2016-05-05 03:42:49 +03:00
allScriptArgs : [ ] string {
// Filtering pattern to buildall.bash:
rx ,
} ,
} )
}
2020-11-03 06:25:51 +03:00
// addMiscCompile adds a misc-compile TryBot
// for all supported Go versions.
addMiscCompile := func ( suffix , rx string ) { addMiscCompileGo1 ( 0 , suffix , rx ) }
2020-11-02 20:41:26 +03:00
2019-11-07 16:15:55 +03:00
addMiscCompile ( "-linuxarm" , "^linux-arm" ) // 2: arm, arm64
2020-09-28 18:04:35 +03:00
addMiscCompile ( "-darwin" , "^darwin-(386|amd64)$" ) // 1: amd64 (in Go 1.14: 386, amd64)
2020-11-03 06:25:51 +03:00
addMiscCompileGo1 ( 16 , "-darwinarm64" , "^darwin-arm64$" ) // 1: arm64 (for Go 1.16 and newer)
2019-11-07 16:15:55 +03:00
addMiscCompile ( "-mips" , "^linux-mips" ) // 4: mips, mipsle, mips64, mips64le
addMiscCompile ( "-ppc" , "^(linux-ppc64|aix-)" ) // 3: linux-ppc64{,le}, aix-ppc64
addMiscCompile ( "-solaris" , "^(solaris|illumos)" ) // 2: both amd64
addMiscCompile ( "-plan9" , "^plan9-" ) // 3: amd64, 386, arm
addMiscCompile ( "-freebsd" , ` ^freebsd-(386|arm|arm64)\b ` ) // 3: 386, arm, arm64 (amd64 already trybot)
addMiscCompile ( "-netbsd" , "^netbsd-" ) // 4: amd64, 386, arm, arm64
addMiscCompile ( "-openbsd" , "^openbsd-" ) // 4: amd64, 386, arm, arm64
2019-11-15 07:29:29 +03:00
2020-04-23 01:52:59 +03:00
// And 3 that don't fit above:
addMiscCompile ( "-other" , "^(linux-s390x|linux-riscv64|dragonfly-amd64)$" )
2020-09-28 18:04:35 +03:00
// 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-.
2016-05-05 03:42:49 +03:00
2015-01-28 01:22:21 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-amd64-nocgo" ,
HostType : "host-linux-jessie" ,
Notes : "cgo disabled" ,
2019-03-14 23:35:32 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
switch repo {
case "perf" :
// Requires sqlite, which requires cgo.
return false
case "mobile" :
return false
2019-12-12 20:43:59 +03:00
case "build" :
return false
2019-03-14 23:35:32 +03:00
}
return true
} ,
2015-01-28 01:22:21 +03:00
env : [ ] string {
"CGO_ENABLED=0" ,
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2015-01-28 01:22:21 +03:00
// This USER=root was required for Docker-based builds but probably isn't required
// in the VM anymore, since the buildlet probably already has this in its environment.
// (It was required because without cgo, it couldn't find the username)
"USER=root" ,
} ,
} )
addBuilder ( BuildConfig {
2019-03-11 07:20:46 +03:00
Name : "linux-amd64-noopt" ,
Notes : "optimizations and inlining disabled" ,
HostType : "host-linux-jessie" ,
buildsRepo : onlyGo ,
2019-03-06 08:20:12 +03:00
env : [ ] string {
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-06 08:20:12 +03:00
"GO_GCFLAGS=-N -l" ,
} ,
2015-01-28 01:22:21 +03:00
} )
2016-03-19 01:30:38 +03:00
addBuilder ( BuildConfig {
2016-05-04 20:47:12 +03:00
Name : "linux-amd64-ssacheck" ,
2018-05-14 20:22:45 +03:00
HostType : "host-linux-jessie" ,
2019-03-11 07:20:46 +03:00
buildsRepo : onlyGo ,
2018-10-26 22:21:58 +03:00
tryBot : nil , // TODO: add a func to conditionally run this trybot if compiler dirs are touched
2016-05-04 20:47:12 +03:00
CompileOnly : true ,
Notes : "SSA internal checks enabled" ,
2019-03-06 08:20:12 +03:00
env : [ ] string {
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-06 08:20:12 +03:00
"GO_GCFLAGS=-d=ssa/check/on,dclstack" ,
} ,
2017-05-20 00:23:14 +03:00
GoDeps : [ ] string {
"f65abf6ddc8d1f3d403a9195fd74eaffa022b07f" , // adds dclstack
} ,
2016-03-19 01:30:38 +03:00
} )
2020-03-19 17:34:11 +03:00
addBuilder ( BuildConfig {
2020-04-08 19:13:38 +03:00
Name : "linux-amd64-staticlockranking" ,
HostType : "host-linux-stretch" ,
Notes : "builder with GOEXPERIMENT=staticlockranking, see golang.org/issue/37937" ,
2020-03-19 17:34:11 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
return repo == "go" && atLeastGo1 ( goBranch , 15 )
} ,
env : [ ] string {
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
"GOEXPERIMENT=staticlockranking" ,
} ,
GoDeps : [ ] string {
"02057906f7272a4787b8a0b5b7cafff8ad3024f0" , // A master commit from 2020/03/19, just before CL 222925 and CL 207619 have landed.
} ,
} )
2017-04-22 02:41:12 +03:00
addBuilder ( BuildConfig {
Name : "linux-amd64-racecompile" ,
2018-05-14 20:22:45 +03:00
HostType : "host-linux-jessie" ,
2018-10-26 22:21:58 +03:00
tryBot : nil , // TODO: add a func to conditionally run this trybot if compiler dirs are touched
2017-04-22 02:41:12 +03:00
CompileOnly : true ,
2017-04-25 00:14:05 +03:00
SkipSnapshot : true ,
StopAfterMake : true ,
2020-03-30 18:20:59 +03:00
InstallRacePackages : [ ] string { "cmd/compile" , "cmd/link" } ,
Notes : "race-enabled cmd/compile and cmd/link" ,
2019-03-06 08:20:12 +03:00
env : [ ] string {
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-06 08:20:12 +03:00
} ,
2017-05-20 00:23:14 +03:00
GoDeps : [ ] string {
"22f1b56dab29d397d2bdbdd603d85e60fb678089" , // adds cmd/compile -c; Issue 20222
} ,
2017-04-22 02:41:12 +03:00
} )
2015-01-28 01:22:21 +03:00
addBuilder ( BuildConfig {
cmd/coordinator, dashboard: remove some trybots, shard others wider
I'm aiming to have trybot runs finish in under 5 minutes.
This CL removes openbsd-386-gce58 and freebsd-386-gce101 from the trybot set.
openbsd-386-gce58 is the slowest builder. It has an average speed of
722 seconds (and 95 percentile of 923 seconds) over the past week, and
that's sharded over 4 machines. Too slow. It's not worth the resources
to keep it as a trybot. It hasn't caught any interesting bugs. This
builder will still run, but not as a pre-submit trybot.
freebsd-386-gce101 is not slow, but we're removing it to shift its
resources to shard other builders wider.
The coordinator now supports varying the build sharding width based on
whether a build is for a trybot or not. This CL defines separate
numbers for each, sharding builds wider as needed for some trybots.
freebsd-amd64-gce101 goes from 4 to 5 machines in try runs, and down
to 3 when not in try runs.
linux-amd64-race gets one more machine during try runs, and one fewer
in regular runs.
linux-arm goes from 7 machines always, to 3 or 8, depending on whether
it's a try run.
openbsd-amd64-58 goes from 4 to 3 or 6.
windows-amd64-gce goes from 4 to 2 or 6.
windows-amd64-race goes from 4 to 2 or 6.
darwin-amd64-10_11 goes from 3 to 3 or 4.
I'll see how these do over the next few days and readjust as needed.
Also in this CL: fix the constants for the expected duration of
make.bash, which impact when we schedule the creation of test sharding
helper buildlets. We were creating them too early before, wasting
resources.
Change-Id: I38a9b24841e196f1eb668de058c49af8c1d1c64f
Reviewed-on: https://go-review.googlesource.com/29116
Reviewed-by: Quentin Smith <quentin@golang.org>
2016-09-14 01:45:48 +03:00
Name : "linux-amd64-race" ,
2018-05-14 20:22:45 +03:00
HostType : "host-linux-jessie" ,
2018-10-26 22:21:58 +03:00
tryBot : defaultTrySet ( ) ,
2019-12-07 08:14:28 +03:00
buildsRepo : defaultPlusExpBuild ,
2020-04-09 19:47:03 +03:00
distTestAdjust : fasterTrybots ,
2018-05-04 05:42:17 +03:00
numTestHelpers : 1 ,
cmd/coordinator, dashboard: remove some trybots, shard others wider
I'm aiming to have trybot runs finish in under 5 minutes.
This CL removes openbsd-386-gce58 and freebsd-386-gce101 from the trybot set.
openbsd-386-gce58 is the slowest builder. It has an average speed of
722 seconds (and 95 percentile of 923 seconds) over the past week, and
that's sharded over 4 machines. Too slow. It's not worth the resources
to keep it as a trybot. It hasn't caught any interesting bugs. This
builder will still run, but not as a pre-submit trybot.
freebsd-386-gce101 is not slow, but we're removing it to shift its
resources to shard other builders wider.
The coordinator now supports varying the build sharding width based on
whether a build is for a trybot or not. This CL defines separate
numbers for each, sharding builds wider as needed for some trybots.
freebsd-amd64-gce101 goes from 4 to 5 machines in try runs, and down
to 3 when not in try runs.
linux-amd64-race gets one more machine during try runs, and one fewer
in regular runs.
linux-arm goes from 7 machines always, to 3 or 8, depending on whether
it's a try run.
openbsd-amd64-58 goes from 4 to 3 or 6.
windows-amd64-gce goes from 4 to 2 or 6.
windows-amd64-race goes from 4 to 2 or 6.
darwin-amd64-10_11 goes from 3 to 3 or 4.
I'll see how these do over the next few days and readjust as needed.
Also in this CL: fix the constants for the expected duration of
make.bash, which impact when we schedule the creation of test sharding
helper buildlets. We were creating them too early before, wasting
resources.
Change-Id: I38a9b24841e196f1eb668de058c49af8c1d1c64f
Reviewed-on: https://go-review.googlesource.com/29116
Reviewed-by: Quentin Smith <quentin@golang.org>
2016-09-14 01:45:48 +03:00
numTryTestHelpers : 5 ,
2019-03-06 08:20:12 +03:00
env : [ ] string {
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-06 08:20:12 +03:00
} ,
2015-01-22 02:15:48 +03:00
} )
2015-02-13 06:45:02 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-386-clang" ,
HostType : "host-linux-clang" ,
Notes : "Debian jessie + clang 3.9 instead of gcc" ,
env : [ ] string { "CC=/usr/bin/clang" , "GOHOSTARCH=386" } ,
2015-02-13 06:45:02 +03:00
} )
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-amd64-clang" ,
HostType : "host-linux-clang" ,
Notes : "Debian jessie + clang 3.9 instead of gcc" ,
env : [ ] string { "CC=/usr/bin/clang" } ,
2015-02-13 06:45:02 +03:00
} )
2015-02-14 06:01:32 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-386-sid" ,
HostType : "host-linux-sid" ,
Notes : "Debian sid (unstable)" ,
env : [ ] string { "GOHOSTARCH=386" } ,
2015-02-14 06:01:32 +03:00
} )
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-amd64-sid" ,
HostType : "host-linux-sid" ,
Notes : "Debian sid (unstable)" ,
2015-02-14 06:01:32 +03:00
} )
2019-05-08 19:25:38 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-amd64-fedora" ,
HostType : "host-linux-fedora" ,
Notes : "Fedora" ,
2019-05-08 19:25:38 +03:00
} )
2019-03-01 19:54:25 +03:00
addBuilder ( BuildConfig {
Name : "linux-amd64-androidemu" ,
HostType : "host-android-amd64-emu" ,
env : [ ] string {
"GOARCH=amd64" ,
"GOOS=linux" ,
"CGO_ENABLED=1" ,
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-01 19:54:25 +03:00
} ,
2019-03-07 20:44:41 +03:00
tryBot : func ( repo , branch , goBranch string ) bool {
2019-03-01 19:54:25 +03:00
// Only for mobile repo for now, not "go":
2019-03-07 20:44:41 +03:00
return repo == "mobile" && branch == "master" && goBranch == "master"
2019-03-01 19:54:25 +03:00
} ,
2019-03-07 20:44:41 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
return repo == "mobile" && branch == "master" && goBranch == "master"
2019-03-01 19:54:25 +03:00
} ,
Notes : "Runs GOOS=linux but with the Android emulator attached, for running x/mobile host tests." ,
} )
2018-05-14 20:22:45 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-amd64-jessie" ,
HostType : "host-linux-jessie" ,
Notes : "Debian Jessie. The normal 'linux-amd64' builder is stretch. We use Jessie for our release builds due to https://golang.org/issue/31293" ,
2019-03-06 08:20:12 +03:00
env : [ ] string {
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2019-03-06 08:20:12 +03:00
} ,
2018-05-14 20:22:45 +03:00
} )
2018-05-16 22:50:39 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-amd64-longtest" ,
HostType : "host-linux-stretch-morecpu" ,
Notes : "Debian Stretch with go test -short=false" ,
2020-05-27 01:19:05 +03:00
tryBot : func ( repo , branch , goBranch string ) bool {
onReleaseBranch := strings . HasPrefix ( branch , "release-branch." )
return repo == "go" && onReleaseBranch // See issue 37827.
} ,
2019-03-11 21:49:56 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-07-01 21:45:10 +03:00
// Test all repos, ignoring buildRepoByDefault.
// For golang.org/x repos, don't test non-latest versions.
2019-03-11 21:49:56 +03:00
return repo == "go" || ( branch == "master" && goBranch == "master" )
} ,
2019-03-07 20:44:41 +03:00
needsGoProxy : true , // for cmd/go module tests
2018-05-29 22:03:23 +03:00
env : [ ] string {
2019-03-14 19:06:57 +03:00
"GO_TEST_TIMEOUT_SCALE=5" , // give them lots of time
2018-05-29 22:03:23 +03:00
} ,
2020-11-06 15:55:36 +03:00
// TODO(golang.org/issue/37439): Decide whether it's worth it
// to go for 3~9 extra helpers for -longtest SlowBot requests
// based on how well having more helpers scales. Try 3, 5, 9.
numTryTestHelpers : 9 ,
2018-05-16 22:50:39 +03:00
} )
2019-10-21 19:58:47 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "linux-386-longtest" ,
HostType : "host-linux-stretch-morecpu" ,
Notes : "Debian Stretch with go test -short=false; to get 32-bit coverage" ,
2020-05-27 01:19:05 +03:00
tryBot : func ( repo , branch , goBranch string ) bool {
onReleaseBranch := strings . HasPrefix ( branch , "release-branch." )
return repo == "go" && onReleaseBranch // See issue 37827.
} ,
2019-10-21 19:58:47 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-07-01 21:45:10 +03:00
b := buildRepoByDefault ( repo )
if repo != "go" && ! ( branch == "master" && goBranch == "master" ) {
// For golang.org/x repos, don't test non-latest versions.
b = false
2019-12-12 20:43:59 +03:00
}
2020-07-01 21:45:10 +03:00
return b
2019-10-21 19:58:47 +03:00
} ,
needsGoProxy : true , // for cmd/go module tests
env : [ ] string {
2020-05-19 02:34:15 +03:00
"GOARCH=386" ,
"GOHOSTARCH=386" ,
2019-10-21 19:58:47 +03:00
"GO_TEST_TIMEOUT_SCALE=5" , // give them lots of time
} ,
2020-11-06 15:55:36 +03:00
// TODO(golang.org/issue/37439): Decide whether it's worth it
// to go for 3~9 extra helpers for -longtest SlowBot requests
// based on how well having more helpers scales. Try 3, 5, 9.
numTryTestHelpers : 5 ,
2019-10-21 19:58:47 +03:00
} )
2015-03-01 20:23:57 +03:00
addBuilder ( BuildConfig {
2019-10-19 05:49:53 +03:00
Name : "linux-arm" ,
HostType : "host-linux-arm-scaleway" ,
CrossCompileConfig : & CrossCompileConfig {
CompileHostType : "host-linux-armhf-cross" ,
CCForTarget : "arm-linux-gnueabihf-gcc" ,
GOARM : "7" ,
AlwaysCrossCompile : false ,
} ,
2020-08-20 02:15:20 +03:00
tryBot : nil , // Issues #22748, #22749, #35628, #40872.
KnownIssue : 35628 ,
cmd/coordinator, dashboard: remove some trybots, shard others wider
I'm aiming to have trybot runs finish in under 5 minutes.
This CL removes openbsd-386-gce58 and freebsd-386-gce101 from the trybot set.
openbsd-386-gce58 is the slowest builder. It has an average speed of
722 seconds (and 95 percentile of 923 seconds) over the past week, and
that's sharded over 4 machines. Too slow. It's not worth the resources
to keep it as a trybot. It hasn't caught any interesting bugs. This
builder will still run, but not as a pre-submit trybot.
freebsd-386-gce101 is not slow, but we're removing it to shift its
resources to shard other builders wider.
The coordinator now supports varying the build sharding width based on
whether a build is for a trybot or not. This CL defines separate
numbers for each, sharding builds wider as needed for some trybots.
freebsd-amd64-gce101 goes from 4 to 5 machines in try runs, and down
to 3 when not in try runs.
linux-amd64-race gets one more machine during try runs, and one fewer
in regular runs.
linux-arm goes from 7 machines always, to 3 or 8, depending on whether
it's a try run.
openbsd-amd64-58 goes from 4 to 3 or 6.
windows-amd64-gce goes from 4 to 2 or 6.
windows-amd64-race goes from 4 to 2 or 6.
darwin-amd64-10_11 goes from 3 to 3 or 4.
I'll see how these do over the next few days and readjust as needed.
Also in this CL: fix the constants for the expected duration of
make.bash, which impact when we schedule the creation of test sharding
helper buildlets. We were creating them too early before, wasting
resources.
Change-Id: I38a9b24841e196f1eb668de058c49af8c1d1c64f
Reviewed-on: https://go-review.googlesource.com/29116
Reviewed-by: Quentin Smith <quentin@golang.org>
2016-09-14 01:45:48 +03:00
FlakyNet : true ,
numTestHelpers : 2 ,
numTryTestHelpers : 7 ,
2020-04-09 23:24:30 +03:00
distTestAdjust : func ( run bool , distTest string , isNormalTry bool ) bool {
2019-11-12 21:28:02 +03:00
switch distTest {
case "api" , "reboot" :
return false
}
2020-04-09 19:47:03 +03:00
return run
2019-11-12 21:28:02 +03:00
} ,
2015-05-14 23:39:58 +03:00
} )
2015-05-07 21:36:25 +03:00
addBuilder ( BuildConfig {
2016-09-23 02:29:31 +03:00
Name : "linux-arm-nativemake" ,
Notes : "runs make.bash on real ARM hardware, but does not run tests" ,
2017-06-23 17:02:38 +03:00
HostType : "host-linux-arm-scaleway" ,
2019-10-19 05:49:53 +03:00
tryOnly : true ,
tryBot : nil ,
2016-09-23 02:29:31 +03:00
StopAfterMake : true ,
} )
2017-03-22 23:53:27 +03:00
addBuilder ( BuildConfig {
Name : "linux-arm-arm5spacemonkey" ,
HostType : "host-linux-arm5spacemonkey" ,
2019-10-19 05:49:53 +03:00
CrossCompileConfig : & CrossCompileConfig {
CompileHostType : "host-linux-armel-cross" ,
CCForTarget : "arm-linux-gnueabi-gcc" ,
GOARM : "5" ,
AlwaysCrossCompile : true ,
} ,
2017-12-08 20:39:57 +03:00
env : [ ] string {
"GOARM=5" ,
"GO_TEST_TIMEOUT_SCALE=4" , // arm is normally 2; double that.
} ,
2019-03-11 07:20:46 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-07-01 21:45:10 +03:00
return branch == "master" && goBranch == "master" && buildRepoByDefault ( repo )
2019-03-11 07:20:46 +03:00
} ,
2020-04-09 23:24:30 +03:00
distTestAdjust : func ( run bool , distTest string , isNormalTry bool ) bool {
2017-12-14 21:28:16 +03:00
if strings . Contains ( distTest , "vendor/github.com/google/pprof" ) {
// Not worth it. And broken.
return false
}
2018-04-10 23:03:26 +03:00
if distTest == "api" {
// Broken on this build config (Issue
// 24754), and not worth it on slow
// builder. It's covered by other
// builders anyway.
return false
}
if strings . HasPrefix ( distTest , "test:" ) {
// Slow, and not worth it on slow builder.
return false
}
2020-04-09 19:47:03 +03:00
return run
2017-12-14 21:28:16 +03:00
} ,
2017-03-22 23:53:27 +03:00
} )
2018-05-11 08:54:32 +03:00
addBuilder ( BuildConfig {
2018-06-28 23:30:35 +03:00
Name : "js-wasm" ,
HostType : "host-js-wasm" ,
2018-10-26 22:21:58 +03:00
tryBot : explicitTrySet ( "go" ) ,
2019-03-11 07:20:46 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2019-03-11 21:49:56 +03:00
switch repo {
case "go" :
return true
2019-12-12 20:43:59 +03:00
case "build" , "mobile" , "exp" , "benchmarks" , "debug" , "perf" , "talks" , "tools" , "tour" , "website" :
2019-03-11 21:49:56 +03:00
return false
default :
return branch == "master" && goBranch == "master"
}
2019-03-11 07:20:46 +03:00
} ,
2020-04-09 23:24:30 +03:00
distTestAdjust : func ( run bool , distTest string , isNormalTry bool ) bool {
if isNormalTry {
2018-06-28 23:30:35 +03:00
if strings . Contains ( distTest , "/internal/" ) ||
strings . Contains ( distTest , "vendor/golang.org/x/arch" ) {
return false
}
switch distTest {
case "cmd/go" , "nolibgcc:crypto/x509" :
return false
}
}
2020-04-09 19:47:03 +03:00
return run
2018-06-28 23:30:35 +03:00
} ,
2019-10-10 22:09:40 +03:00
numTryTestHelpers : 5 ,
2018-05-11 08:54:32 +03:00
env : [ ] string {
"GOOS=js" , "GOARCH=wasm" , "GOHOSTOS=linux" , "GOHOSTARCH=amd64" ,
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/workdir/go/misc/wasm" ,
2019-08-29 21:28:01 +03:00
"GO_DISABLE_OUTBOUND_NETWORK=1" ,
2018-05-11 08:54:32 +03:00
} ,
} )
2017-12-05 08:22:36 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "openbsd-386-62" ,
HostType : "host-openbsd-386-62" ,
distTestAdjust : noTestDirAndNoReboot ,
2017-12-14 21:28:16 +03:00
env : [ ] string {
// cmd/go takes ~192 seconds on openbsd-386
// now, which is over the 180 second default
// dist test timeout. So, bump this builder
// up:
"GO_TEST_TIMEOUT_SCALE=2" ,
} ,
2017-12-05 08:22:36 +03:00
} )
2017-11-24 21:14:33 +03:00
addBuilder ( BuildConfig {
Name : "openbsd-amd64-62" ,
HostType : "host-openbsd-amd64-62" ,
2020-04-09 19:47:03 +03:00
distTestAdjust : noTestDirAndNoReboot ,
2018-10-26 02:07:13 +03:00
tryBot : nil ,
2017-11-24 21:14:33 +03:00
numTestHelpers : 0 ,
numTryTestHelpers : 5 ,
} )
2018-10-05 01:14:50 +03:00
addBuilder ( BuildConfig {
Name : "openbsd-amd64-64" ,
HostType : "host-openbsd-amd64-64" ,
dashboard, cmd/coordinator, maintner/maintnerd: add support for BuildConfig.MinimumGoVersion field
The new BuildConfig.MinimumGoVersion field specifies the minimum
Go version the builder is allowed to use. It's useful when some
of the builders are too new, and do not support all of the supported
Go releases (e.g., openbsd-amd64-64 and freebsd-amd64-12_0 currently
require Go 1.11 and don't work on Go 1.10).
It only needs to be set when a builder doesn't support all supported
Go releases, since we don't typically test unsupported Go releases.
To allow cmd/coordinator to use this field and filter out work it
receives from maintner/maintnerd's GoFindTryWork RPC call,
we add a GoVersion slice to apipb.GerritTryWorkItem,
and populate it in maintapi.apiService.GoFindTryWork method.
For trybots on the Go repo, the GoVersion field is determined from
the branch name. For "release-branch.goX.Y" branches, it parses out
the major-minor Go version from the branch name. For master and
other branches, it assumes the latest Go release.
For trybots on subrepos, we already have the Go version information
available, so use it directly.
Afterwards, all that's left is to modify newTrySet in cmd/coordinator
to make use of BuildConfig.MinimumGoVersion and work.GoVersion to skip
builders that are too new for the Go version that needs to be tested.
Fixes golang/go#29265
Change-Id: I50b01830647e33e37e9eb8b89e0f2518812fa44f
Reviewed-on: https://go-review.googlesource.com/c/155463
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-01-12 00:44:01 +03:00
MinimumGoVersion : types . MajorMinor { 1 , 11 } ,
2020-04-09 19:47:03 +03:00
distTestAdjust : noTestDirAndNoReboot ,
2018-10-26 02:07:13 +03:00
tryBot : defaultTrySet ( ) ,
2018-10-05 01:14:50 +03:00
numTestHelpers : 0 ,
numTryTestHelpers : 5 ,
} )
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "openbsd-386-64" ,
HostType : "host-openbsd-386-64" ,
tryBot : explicitTrySet ( "sys" ) ,
distTestAdjust : noTestDirAndNoReboot ,
2018-10-05 01:14:50 +03:00
} )
2019-08-30 20:09:05 +03:00
addBuilder ( BuildConfig {
2020-04-16 18:47:53 +03:00
Name : "openbsd-arm-jsing" ,
HostType : "host-openbsd-arm-joelsing" ,
SkipSnapshot : true ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
switch repo {
2020-08-20 21:42:01 +03:00
case "go" , "net" , "sys" :
return branch == "master" && goBranch == "master"
default :
return false
}
} ,
distTestAdjust : noTestDirAndNoReboot ,
tryBot : nil ,
env : [ ] string {
// The machine is slow.
"GO_TEST_TIMEOUT_SCALE=5" ,
} ,
} )
addBuilder ( BuildConfig {
Name : "openbsd-arm64-jsing" ,
HostType : "host-openbsd-arm64-joelsing" ,
SkipSnapshot : true ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
switch repo {
2020-08-23 19:02:40 +03:00
case "go" , "net" , "sys" :
return branch == "master" && goBranch == "master"
default :
return false
}
} ,
distTestAdjust : noTestDirAndNoReboot ,
tryBot : nil ,
env : [ ] string {
// The machine is slow.
"GO_TEST_TIMEOUT_SCALE=5" ,
} ,
} )
addBuilder ( BuildConfig {
Name : "openbsd-mips64-jsing" ,
HostType : "host-openbsd-mips64-joelsing" ,
SkipSnapshot : true ,
KnownIssue : 40995 ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
switch repo {
2020-04-16 18:47:53 +03:00
case "go" , "net" , "sys" :
return branch == "master" && goBranch == "master"
default :
return false
}
} ,
2020-04-09 19:47:03 +03:00
distTestAdjust : noTestDirAndNoReboot ,
tryBot : nil ,
2019-08-30 20:09:05 +03:00
env : [ ] string {
// The machine is slow.
"GO_TEST_TIMEOUT_SCALE=5" ,
} ,
} )
2020-04-02 15:55:30 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "netbsd-amd64-9_0" ,
HostType : "host-netbsd-amd64-9_0" ,
distTestAdjust : noTestDirAndNoReboot ,
tryBot : explicitTrySet ( "sys" ) ,
2020-04-02 15:55:30 +03:00
} )
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "netbsd-386-9_0" ,
HostType : "host-netbsd-386-9_0" ,
distTestAdjust : noTestDirAndNoReboot ,
2020-04-02 15:55:30 +03:00
} )
2019-03-19 16:28:04 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "netbsd-arm-bsiegert" ,
HostType : "host-netbsd-arm-bsiegert" ,
distTestAdjust : noTestDirAndNoReboot ,
tryBot : nil ,
2019-03-19 16:28:04 +03:00
env : [ ] string {
// The machine is slow.
"GO_TEST_TIMEOUT_SCALE=10" ,
} ,
} )
2020-08-18 21:42:30 +03:00
addBuilder ( BuildConfig {
2020-09-28 11:28:32 +03:00
Name : "netbsd-arm64-bsiegert" ,
HostType : "host-netbsd-arm64-bsiegert" ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
return atLeastGo1 ( goBranch , 16 ) && buildRepoByDefault ( repo )
} ,
2020-08-18 21:42:30 +03:00
distTestAdjust : noTestDirAndNoReboot ,
tryBot : nil ,
env : [ ] string {
// The machine is slow.
"GO_TEST_TIMEOUT_SCALE=10" ,
} ,
} )
2015-01-15 23:46:22 +03:00
addBuilder ( BuildConfig {
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
Name : "plan9-386" ,
HostType : "host-plan9-386-gce" ,
2019-04-03 08:03:37 +03:00
numTestHelpers : 1 ,
2019-04-18 22:33:19 +03:00
tryOnly : true , // disable it for now; Issue 31261, Issue 29801
2020-04-09 23:24:30 +03:00
distTestAdjust : func ( run bool , distTest string , isNormalTry bool ) bool {
2020-04-09 19:47:03 +03:00
switch distTest {
2019-01-19 01:19:58 +03:00
case "api" ,
"go_test:cmd/go" : // takes over 20 minutes without working SMP
return false
}
2020-04-09 19:47:03 +03:00
return run
2019-01-19 01:19:58 +03:00
} ,
2019-11-28 13:33:00 +03:00
buildsRepo : onlyMasterDefault ,
2015-01-15 23:46:22 +03:00
} )
2017-04-21 22:35:28 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "windows-amd64-2008" ,
HostType : "host-windows-amd64-2008" ,
distTestAdjust : noTestDirAndNoReboot ,
buildsRepo : onlyGo ,
2018-05-01 00:16:33 +03:00
env : [ ] string {
"GOARCH=amd64" ,
"GOHOSTARCH=amd64" ,
// cmd/go takes ~188 seconds on windows-amd64
// now, which is over the 180 second default
// dist test timeout. So, bump this builder
// up:
"GO_TEST_TIMEOUT_SCALE=2" ,
} ,
2017-04-21 22:35:28 +03:00
} )
2017-04-27 23:12:08 +03:00
addBuilder ( BuildConfig {
Name : "windows-386-2008" ,
HostType : "host-windows-amd64-2008" ,
2019-12-07 08:14:28 +03:00
buildsRepo : defaultPlusExpBuild ,
2020-04-09 19:47:03 +03:00
distTestAdjust : fasterTrybots ,
2017-04-27 23:12:08 +03:00
env : [ ] string { "GOARCH=386" , "GOHOSTARCH=386" } ,
2018-10-26 22:21:58 +03:00
tryBot : defaultTrySet ( ) ,
2017-12-07 03:40:40 +03:00
numTryTestHelpers : 4 ,
2017-04-27 23:12:08 +03:00
} )
2017-04-21 22:35:28 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "windows-amd64-2012" ,
HostType : "host-windows-amd64-2012" ,
distTestAdjust : noTestDirAndNoReboot ,
buildsRepo : onlyGo ,
2018-05-01 00:16:33 +03:00
env : [ ] string {
"GOARCH=amd64" ,
"GOHOSTARCH=amd64" ,
// cmd/go takes ~188 seconds on windows-amd64
// now, which is over the 180 second default
// dist test timeout. So, bump this builder
// up:
"GO_TEST_TIMEOUT_SCALE=2" ,
} ,
2017-04-21 22:35:28 +03:00
} )
2015-02-07 04:32:15 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "windows-amd64-2016" ,
HostType : "host-windows-amd64-2016" ,
buildsRepo : defaultPlusExpBuild ,
distTestAdjust : fasterTrybots ,
2018-05-01 00:16:33 +03:00
env : [ ] string {
"GOARCH=amd64" ,
"GOHOSTARCH=amd64" ,
// cmd/go takes ~188 seconds on windows-amd64
// now, which is over the 180 second default
// dist test timeout. So, bump this builder
// up:
"GO_TEST_TIMEOUT_SCALE=2" ,
} ,
2018-10-26 22:21:58 +03:00
tryBot : defaultTrySet ( ) ,
2017-07-27 07:52:12 +03:00
numTryTestHelpers : 5 ,
2015-02-07 04:32:15 +03:00
} )
2019-10-21 19:58:47 +03:00
addBuilder ( BuildConfig {
2019-11-14 18:43:33 +03:00
Name : "windows-amd64-longtest" ,
2019-11-23 02:01:25 +03:00
HostType : "host-windows-amd64-2016-big" ,
2019-11-14 18:43:33 +03:00
Notes : "Windows Server 2016 with go test -short=false" ,
2020-05-27 01:19:05 +03:00
tryBot : func ( repo , branch , goBranch string ) bool {
onReleaseBranch := strings . HasPrefix ( branch , "release-branch." )
return repo == "go" && onReleaseBranch // See issue 37827.
} ,
2019-10-21 19:58:47 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-07-01 21:45:10 +03:00
b := defaultPlusExpBuild ( repo , branch , goBranch )
if repo != "go" && ! ( branch == "master" && goBranch == "master" ) {
// For golang.org/x repos, don't test non-latest versions.
b = false
2019-10-28 23:16:36 +03:00
}
2020-07-01 21:45:10 +03:00
return b
2019-10-21 19:58:47 +03:00
} ,
needsGoProxy : true , // for cmd/go module tests
env : [ ] string {
"GO_TEST_TIMEOUT_SCALE=5" , // give them lots of time
} ,
2020-11-06 15:55:36 +03:00
// TODO(golang.org/issue/37439): Decide whether it's worth it
// to go for 3~9 extra helpers for -longtest SlowBot requests
// based on how well having more helpers scales. Try 3, 5, 9.
numTryTestHelpers : 3 ,
2019-10-21 19:58:47 +03:00
} )
2015-02-07 04:32:15 +03:00
addBuilder ( BuildConfig {
2019-03-11 21:49:56 +03:00
Name : "windows-amd64-race" ,
2020-05-27 18:58:11 +03:00
HostType : "host-windows-amd64-2016-big" ,
2019-03-11 21:49:56 +03:00
Notes : "Only runs -race tests (./race.bat)" ,
2018-05-01 00:16:33 +03:00
env : [ ] string {
"GOARCH=amd64" ,
"GOHOSTARCH=amd64" ,
// cmd/go takes ~188 seconds on windows-amd64
// now, which is over the 180 second default
// dist test timeout. So, bump this builder
// up:
"GO_TEST_TIMEOUT_SCALE=2" } ,
2015-02-07 04:32:15 +03:00
} )
2016-09-07 08:41:02 +03:00
addBuilder ( BuildConfig {
2020-03-10 20:26:20 +03:00
Name : "darwin-amd64-10_11" ,
HostType : "host-darwin-10_11" ,
tryBot : nil , // disabled until Macs fixed; https://golang.org/issue/23859
buildsRepo : func ( repo , branch , goBranch string ) bool {
// Go 1.14 is the last release that will run on macOS 10.11 El Capitan.
// (See https://golang.org/doc/go1.14#darwin.)
return repo == "go" && atMostGo1 ( branch , 14 )
} ,
2020-04-09 19:47:03 +03:00
distTestAdjust : macTestPolicy ,
2018-02-16 02:43:31 +03:00
numTryTestHelpers : 3 ,
2016-09-07 08:41:02 +03:00
} )
2017-04-25 02:03:42 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "darwin-386-10_14" ,
HostType : "host-darwin-10_14" ,
distTestAdjust : macTestPolicy ,
2019-08-26 23:40:35 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-04-04 06:21:35 +03:00
// Go 1.14 is the last release that will support 32-bit binaries on macOS (darwin/386).
// (See https://golang.org/doc/go1.14#darwin.)
return repo == "go" && atMostGo1 ( branch , 14 )
2019-08-26 23:40:35 +03:00
} ,
2019-11-14 18:43:33 +03:00
env : [ ] string { "GOARCH=386" , "GOHOSTARCH=386" } ,
2017-12-07 03:40:40 +03:00
} )
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "darwin-amd64-10_12" ,
HostType : "host-darwin-10_12" ,
distTestAdjust : macTestPolicy ,
2017-04-25 02:03:42 +03:00
} )
2019-03-27 02:04:31 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "darwin-amd64-10_14" ,
HostType : "host-darwin-10_14" ,
distTestAdjust : macTestPolicy ,
buildsRepo : defaultPlusExp ,
2019-03-27 02:04:31 +03:00
} )
2019-11-19 17:55:01 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "darwin-amd64-10_15" ,
HostType : "host-darwin-10_15" ,
distTestAdjust : macTestPolicy ,
buildsRepo : defaultPlusExpBuild ,
2019-11-19 17:55:01 +03:00
} )
2019-05-01 01:37:31 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "darwin-amd64-nocgo" ,
HostType : "host-darwin-10_15" ,
distTestAdjust : noTestDirAndNoReboot ,
env : [ ] string { "CGO_ENABLED=0" } ,
2019-05-01 01:37:31 +03:00
} )
2017-01-19 01:45:12 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "darwin-amd64-race" ,
HostType : "host-darwin-10_15" ,
distTestAdjust : macTestPolicy ,
buildsRepo : onlyGo ,
2017-01-19 01:45:12 +03:00
} )
2019-05-01 21:33:26 +03:00
addBuilder ( BuildConfig {
2020-10-03 12:37:07 +03:00
Name : "ios-arm64-corellium" ,
HostType : "host-ios-arm64-corellium-ios" ,
2019-05-01 21:33:26 +03:00
Notes : "Virtual iPhone SE running on Corellium; owned by zenly" ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
2019-05-01 23:28:43 +03:00
return repo == "go" && branch == "master" && goBranch == "master"
} ,
} )
addBuilder ( BuildConfig {
Name : "android-arm64-corellium" ,
HostType : "host-android-arm64-corellium-android" ,
Notes : "Virtual Android running on Corellium; owned by zenly" ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
2019-05-01 21:33:26 +03:00
return repo == "go" && branch == "master" && goBranch == "master"
} ,
} )
2019-05-02 01:54:54 +03:00
addBuilder ( BuildConfig {
Name : "android-arm-corellium" ,
HostType : "host-android-arm64-corellium-android" ,
Notes : "Virtual Android running on Corellium; owned by zenly" ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
return repo == "go" && branch == "master" && goBranch == "master"
} ,
env : [ ] string {
"CGO_ENABLED=1" ,
"GOARCH=arm" ,
} ,
} )
2019-02-25 23:35:29 +03:00
addBuilder ( BuildConfig {
Name : "android-386-emu" ,
HostType : "host-android-amd64-emu" , // same amd64 host is used for 386 builder
Notes : "Android emulator on GCE" ,
2019-03-07 20:44:41 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2019-03-01 19:54:25 +03:00
switch repo {
2019-12-12 20:43:59 +03:00
case "build" , "blog" , "talks" , "review" , "tour" , "website" :
2019-03-01 19:54:25 +03:00
return false
}
2019-03-07 20:44:41 +03:00
return atLeastGo1 ( branch , 13 ) && atLeastGo1 ( goBranch , 13 )
2019-03-01 19:54:25 +03:00
} ,
2019-02-25 23:35:29 +03:00
env : [ ] string {
"GOARCH=386" ,
"GOOS=android" ,
"GOHOSTARCH=amd64" ,
"GOHOSTOS=linux" ,
"CGO_ENABLED=1" ,
} ,
} )
addBuilder ( BuildConfig {
2019-04-18 22:45:32 +03:00
Name : "android-amd64-emu" ,
HostType : "host-android-amd64-emu" ,
Notes : "Android emulator on GCE" ,
numTryTestHelpers : 3 ,
2019-03-07 20:44:41 +03:00
tryBot : func ( repo , branch , goBranch string ) bool {
2019-04-26 17:04:00 +03:00
switch repo {
case "go" , "mobile" , "sys" , "net" , "tools" , "crypto" , "sync" , "text" , "time" :
return atLeastGo1 ( branch , 13 ) && atLeastGo1 ( goBranch , 13 )
}
return false
2019-02-28 20:32:45 +03:00
} ,
2019-03-07 20:44:41 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2019-03-01 19:54:25 +03:00
switch repo {
2019-12-12 20:43:59 +03:00
case "build" , "blog" , "talks" , "review" , "tour" , "website" :
2019-03-01 19:54:25 +03:00
return false
}
2019-03-07 20:44:41 +03:00
return atLeastGo1 ( branch , 13 ) && atLeastGo1 ( goBranch , 13 )
2019-03-01 19:54:25 +03:00
} ,
2019-02-25 23:35:29 +03:00
env : [ ] string {
"GOARCH=amd64" ,
"GOOS=android" ,
"GOHOSTARCH=amd64" ,
"GOHOSTOS=linux" ,
"CGO_ENABLED=1" ,
} ,
} )
2019-10-17 11:48:13 +03:00
addBuilder ( BuildConfig {
Name : "illumos-amd64" ,
HostType : "host-illumos-amd64-jclulow" ,
MinimumGoVersion : types . MajorMinor { 1 , 13 } ,
} )
2017-07-07 23:41:20 +03:00
addBuilder ( BuildConfig {
Name : "solaris-amd64-oraclerel" ,
HostType : "host-solaris-oracle-amd64-oraclerel" ,
Notes : "Oracle Solaris release version" ,
} )
2016-10-06 23:30:58 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "linux-ppc64-buildlet" ,
HostType : "host-linux-ppc64-osu" ,
FlakyNet : true ,
distTestAdjust : ppc64DistTestPolicy ,
2016-10-06 23:30:58 +03:00
} )
2016-03-01 07:49:24 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "linux-ppc64le-buildlet" ,
HostType : "host-linux-ppc64le-osu" ,
FlakyNet : true ,
distTestAdjust : ppc64DistTestPolicy ,
2016-04-07 22:27:15 +03:00
} )
2019-02-25 23:05:12 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "linux-ppc64le-power9osu" ,
HostType : "host-linux-ppc64le-power9-osu" ,
FlakyNet : true ,
distTestAdjust : ppc64DistTestPolicy ,
2019-02-25 23:05:12 +03:00
} )
2017-04-07 01:16:28 +03:00
addBuilder ( BuildConfig {
Name : "linux-arm64-packet" ,
HostType : "host-linux-arm64-packet" ,
2019-03-07 08:16:49 +03:00
FlakyNet : true , // maybe not flaky, but here conservatively
2017-04-07 01:16:28 +03:00
} )
2020-08-18 20:32:05 +03:00
addBuilder ( BuildConfig {
Name : "linux-arm64-aws" ,
HostType : "host-linux-arm64-aws" ,
} )
2019-09-10 02:21:11 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
FlakyNet : true ,
HostType : "host-linux-mipsle-mengzhuo" ,
Name : "linux-mips64le-mengzhuo" ,
SkipSnapshot : true ,
distTestAdjust : mipsDistTestPolicy ,
buildsRepo : mipsBuildsRepoPolicy ,
2019-10-29 23:35:07 +03:00
env : [ ] string {
"GOARCH=mips64le" ,
"GOHOSTARCH=mips64le" ,
} ,
} )
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
FlakyNet : true ,
HostType : "host-linux-mips64le-rtrk" ,
Name : "linux-mips64le-rtrk" ,
SkipSnapshot : true ,
distTestAdjust : mipsDistTestPolicy ,
buildsRepo : mipsBuildsRepoPolicy ,
2019-10-29 23:35:07 +03:00
env : [ ] string {
"GOARCH=mips64le" ,
"GOHOSTARCH=mips64le" ,
} ,
} )
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
FlakyNet : true ,
HostType : "host-linux-mips64le-rtrk" ,
Name : "linux-mipsle-rtrk" ,
SkipSnapshot : true ,
distTestAdjust : mipsDistTestPolicy ,
buildsRepo : mipsBuildsRepoPolicy ,
2019-10-29 23:35:07 +03:00
env : [ ] string {
"GOARCH=mipsle" ,
"GOHOSTARCH=mipsle" ,
} ,
} )
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
FlakyNet : true ,
HostType : "host-linux-mips64-rtrk" ,
Name : "linux-mips64-rtrk" ,
SkipSnapshot : true ,
distTestAdjust : mipsDistTestPolicy ,
buildsRepo : mipsBuildsRepoPolicy ,
2019-10-29 23:35:07 +03:00
env : [ ] string {
"GOARCH=mips64" ,
"GOHOSTARCH=mips64" ,
} ,
} )
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
FlakyNet : true ,
HostType : "host-linux-mips64-rtrk" ,
Name : "linux-mips-rtrk" ,
SkipSnapshot : true ,
distTestAdjust : mipsDistTestPolicy ,
buildsRepo : mipsBuildsRepoPolicy ,
2019-10-29 23:35:07 +03:00
env : [ ] string {
"GOARCH=mips" ,
"GOHOSTARCH=mips" ,
2019-09-10 02:21:11 +03:00
} ,
2020-09-27 21:25:41 +03:00
} )
addBuilder ( BuildConfig {
HostType : "host-linux-riscv64-joelsing" ,
Name : "linux-riscv64-jsing" ,
SkipSnapshot : true ,
env : [ ] string { "GO_TEST_TIMEOUT_SCALE=4" } ,
distTestAdjust : func ( run bool , distTest string , isNormalTry bool ) bool {
switch distTest {
case "api" , "reboot" :
return false
}
return run
} ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
switch repo {
case "go" , "net" , "sys" :
return branch == "master" && goBranch == "master"
default :
return false
}
} ,
2019-09-10 02:21:11 +03:00
} )
2019-11-12 09:19:21 +03:00
addBuilder ( BuildConfig {
HostType : "host-linux-riscv64-unleashed" ,
Name : "linux-riscv64-unleashed" ,
SkipSnapshot : true ,
2020-02-04 20:04:12 +03:00
env : [ ] string { "GO_TEST_TIMEOUT_SCALE=4" } ,
2020-04-09 23:24:30 +03:00
distTestAdjust : func ( run bool , distTest string , isNormalTry bool ) bool {
2019-11-12 09:19:21 +03:00
switch distTest {
case "api" , "reboot" :
return false
}
2020-04-09 19:47:03 +03:00
return run
2019-11-12 09:19:21 +03:00
} ,
buildsRepo : func ( repo , branch , goBranch string ) bool {
switch repo {
case "go" , "net" , "sys" :
return branch == "master" && goBranch == "master"
default :
return false
}
} ,
} )
2016-03-01 07:49:24 +03:00
addBuilder ( BuildConfig {
Name : "linux-s390x-ibm" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
HostType : "host-linux-s390x" ,
cmd/coordinator, dashboard: remove some trybots, shard others wider
I'm aiming to have trybot runs finish in under 5 minutes.
This CL removes openbsd-386-gce58 and freebsd-386-gce101 from the trybot set.
openbsd-386-gce58 is the slowest builder. It has an average speed of
722 seconds (and 95 percentile of 923 seconds) over the past week, and
that's sharded over 4 machines. Too slow. It's not worth the resources
to keep it as a trybot. It hasn't caught any interesting bugs. This
builder will still run, but not as a pre-submit trybot.
freebsd-386-gce101 is not slow, but we're removing it to shift its
resources to shard other builders wider.
The coordinator now supports varying the build sharding width based on
whether a build is for a trybot or not. This CL defines separate
numbers for each, sharding builds wider as needed for some trybots.
freebsd-amd64-gce101 goes from 4 to 5 machines in try runs, and down
to 3 when not in try runs.
linux-amd64-race gets one more machine during try runs, and one fewer
in regular runs.
linux-arm goes from 7 machines always, to 3 or 8, depending on whether
it's a try run.
openbsd-amd64-58 goes from 4 to 3 or 6.
windows-amd64-gce goes from 4 to 2 or 6.
windows-amd64-race goes from 4 to 2 or 6.
darwin-amd64-10_11 goes from 3 to 3 or 4.
I'll see how these do over the next few days and readjust as needed.
Also in this CL: fix the constants for the expected duration of
make.bash, which impact when we schedule the creation of test sharding
helper buildlets. We were creating them too early before, wasting
resources.
Change-Id: I38a9b24841e196f1eb668de058c49af8c1d1c64f
Reviewed-on: https://go-review.googlesource.com/29116
Reviewed-by: Quentin Smith <quentin@golang.org>
2016-09-14 01:45:48 +03:00
numTestHelpers : 0 ,
2016-03-01 07:49:24 +03:00
} )
2016-08-30 23:32:33 +03:00
addBuilder ( BuildConfig {
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
Name : "linux-s390x-crosscompile" ,
2019-12-05 00:27:28 +03:00
HostType : "host-s390x-cross" ,
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
Notes : "s390x cross-compile builder for releases; doesn't run tests" ,
CompileOnly : true ,
2019-03-07 20:44:41 +03:00
tryOnly : true , // but not in trybot set for now
2016-08-30 23:32:33 +03:00
env : [ ] string {
"CGO_ENABLED=1" ,
"GOARCH=s390x" ,
"GOHOSTARCH=amd64" ,
"CC_FOR_TARGET=s390x-linux-gnu-gcc" ,
} ,
} )
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
addBuilder ( BuildConfig {
Name : "linux-amd64-localdev" ,
HostType : "host-linux-amd64-localdev" ,
Notes : "for localhost development only" ,
2019-03-07 20:44:41 +03:00
tryOnly : true ,
cmd/coordinator, cmd/buildlet, cmd/gomote: add SSH support
This adds an SSH server to farmer.golang.org on port 2222 that proxies
SSH connections to users' gomote-created buildlet instances.
For example:
$ gomote create openbsd-amd64-60
user-bradfitz-openbsd-amd64-60-1
$ gomote ssh user-bradfitz-openbsd-amd64-60-1
Warning: Permanently added '[localhost]:33351' (ECDSA) to the list of known hosts.
OpenBSD 6.0 (GENERIC.MP) golang/go#2319: Tue Jul 26 13:00:43 MDT 2016
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
$
As before, if the coordinator process is restarted (or crashes, is
evicted, etc), all gomote instances die.
Not yet supported:
* scp (help wanted)
* not all host types are configured. most are. some will need slight
config tweaks to the Docker image (e.g. adding openssh-server)
Supports currently:
* linux-amd64 (host type shared by 386, nacl)
* linux-arm
* linux-arm64
* darwin
* freebsd
* openbsd
* plan9-386
* windows
Implementation details:
* the ssh server process listens on port 2222 in the coordinator
(farmer.golang.org), which is behind a GKE TCP load balancer.
* the ssh server library is github.com/gliderlabs/ssh
* authentication is done via Github users' public keys. It's assumed
that gomote user == github user. But there's a mapping in the code
for known exceptions.
* we can't give out access to this too widely. too many things are
accessible from within the host environment if you look in the right
places. Details omitted. But the Go team and other trusted gomote
users can use this.
* the buildlet binary has a new /connect-ssh handler that acts like a
CONNECT request but instead of taking an explicit host:port, just
says "give me your machine's SSH connection". The buildlet can also
start sshd if needed for the environment. The /connect-ssh handler
also installs the coordinator's public key.
* a new buildlet client library method "ConnectSSH" hits the /connect-ssh
handler and returns a net.Conn.
* the coordinator's ssh.Handler is just running the OpenSSH ssh client.
* because the OpenSSH ssh child process can't connect to a net.Conn,
an emphemeral localhost port is created on the coordinator to proxy
between the ssh client and the net.Conn returned by ConnectSSH.
* The /connect-ssh handler requires http.Hijacker, which requires
fully compliant net.Conn implementations as of Go 1.8. So I needed
to flesh out revdial too, testing it with the
golang.org/x/net/nettest package.
* plan9 doesn't have an ssh server, so we use 0intro's new conterm
program (drawterm without GUI support) to connect to plan9 from the
coordinator ssh proxy instead of using the OpenSSH ssh client
binary.
* windows doesn't have an ssh server, so we enable the telnet service
and the coordinator ssh proxy uses telnet instead on the backend
on the private network. (There is a Windows ssh server but only in
new versions.)
Happy debugging over ssh!
Fixes golang/go#19956
Change-Id: I80a62064c5f85af1f195f980c862ba29af4015f0
Reviewed-on: https://go-review.googlesource.com/50750
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Jessie Frazelle <me@jessfraz.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-07-22 22:15:56 +03:00
} )
2017-08-06 01:56:18 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "dragonfly-amd64" ,
HostType : "host-dragonfly-amd64-master" ,
Notes : "DragonFly BSD master, run by DragonFly team" ,
distTestAdjust : noTestDirAndNoReboot ,
SkipSnapshot : true ,
2019-08-29 19:37:31 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-07-01 21:45:10 +03:00
return atLeastGo1 ( goBranch , 14 ) && buildRepoByDefault ( repo )
2019-08-29 19:37:31 +03:00
} ,
2017-08-06 01:56:18 +03:00
} )
2019-10-21 18:00:32 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "dragonfly-amd64-5_8" ,
HostType : "host-dragonfly-amd64-5_8" ,
Notes : "DragonFly BSD 5.8 release" ,
distTestAdjust : noTestDirAndNoReboot ,
SkipSnapshot : true ,
2019-10-21 18:00:32 +03:00
} )
2017-08-06 01:56:18 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "freebsd-arm-paulzhol" ,
HostType : "host-freebsd-arm-paulzhol" ,
distTestAdjust : noTestDirAndNoReboot ,
SkipSnapshot : true ,
2019-03-07 20:44:41 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
// This was a fragile little machine with limited memory.
// Only run a few of the core subrepos for now while
// we figure out what's killing it.
switch repo {
case "go" , "sys" , "net" :
return true
}
return false
} ,
2017-08-06 01:56:18 +03:00
env : [ ] string {
"GOARM=7" ,
"CGO_ENABLED=1" ,
} ,
} )
2019-10-03 15:56:19 +03:00
addBuilder ( BuildConfig {
Name : "freebsd-arm64-dmgk" ,
HostType : "host-freebsd-arm64-dmgk" ,
2019-10-25 22:21:38 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
2020-07-01 21:45:10 +03:00
return atLeastGo1 ( goBranch , 14 ) && buildRepoByDefault ( repo )
2019-10-25 22:21:38 +03:00
} ,
2019-10-03 15:56:19 +03:00
} )
2017-08-06 18:57:06 +03:00
addBuilder ( BuildConfig {
2020-04-09 19:47:03 +03:00
Name : "plan9-arm" ,
HostType : "host-plan9-arm-0intro" ,
distTestAdjust : noTestDirAndNoReboot ,
buildsRepo : onlyMasterDefault ,
2017-08-06 18:57:06 +03:00
} )
addBuilder ( BuildConfig {
2019-11-22 22:19:11 +03:00
Name : "plan9-amd64-9front" ,
HostType : "host-plan9-amd64-0intro" ,
2020-04-09 23:24:30 +03:00
distTestAdjust : func ( run bool , distTest string , isNormalTry bool ) bool {
run = noTestDirAndNoReboot ( run , distTest , isNormalTry )
2020-04-09 19:47:03 +03:00
if strings . HasPrefix ( distTest , "test:" ) || distTest == "reboot" {
return false // skip test
2019-05-08 20:42:00 +03:00
}
2020-04-09 19:47:03 +03:00
switch distTest {
2019-05-08 20:42:00 +03:00
case "api" ,
"go_test:cmd/go" : // takes over 20 minutes without working SMP
return false
}
2020-04-09 19:47:03 +03:00
return run
2019-05-08 20:42:00 +03:00
} ,
2019-11-28 13:33:00 +03:00
buildsRepo : onlyMasterDefault ,
2017-08-06 18:57:06 +03:00
} )
2019-05-09 19:52:40 +03:00
addBuilder ( BuildConfig {
2019-11-22 22:19:11 +03:00
Name : "plan9-386-0intro" ,
HostType : "host-plan9-386-0intro" ,
2020-04-09 23:24:30 +03:00
distTestAdjust : func ( run bool , distTest string , isNormalTry bool ) bool {
run = noTestDirAndNoReboot ( run , distTest , isNormalTry )
2020-04-09 19:47:03 +03:00
switch distTest {
2019-05-09 19:52:40 +03:00
case "api" ,
"go_test:cmd/go" : // takes over 20 minutes without working SMP
return false
}
2020-04-09 19:47:03 +03:00
return run
2019-05-09 19:52:40 +03:00
} ,
2019-11-28 13:33:00 +03:00
buildsRepo : onlyMasterDefault ,
2019-05-09 19:52:40 +03:00
} )
2018-08-24 21:41:05 +03:00
addBuilder ( BuildConfig {
2019-03-13 11:29:15 +03:00
Name : "aix-ppc64" ,
HostType : "host-aix-ppc64-osuosl" ,
MinimumGoVersion : types . MajorMinor { 1 , 12 } ,
2018-12-04 17:46:08 +03:00
env : [ ] string {
"PATH=/opt/freeware/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java7_64/jre/bin:/usr/java7_64/bin" ,
} ,
2019-04-19 17:37:11 +03:00
buildsRepo : func ( repo , branch , goBranch string ) bool {
switch repo {
case "net" :
// The x/net package wasn't working in Go 1.12; AIX folk plan to have
// it ready by Go 1.13. See https://golang.org/issue/31564#issuecomment-484786144
return atLeastGo1 ( branch , 13 ) && atLeastGo1 ( goBranch , 13 )
2019-12-16 22:09:01 +03:00
case "tools" , "tour" , "website" :
2019-08-29 22:05:21 +03:00
// The PATH on this builder is misconfigured in a way that causes
// any test that executes a 'go' command as a subprocess to fail.
2019-08-29 19:37:31 +03:00
// (https://golang.org/issue/31567).
2019-08-29 22:05:21 +03:00
// Skip affected repos until the builder is fixed.
2019-08-29 19:37:31 +03:00
return false
2019-04-19 17:37:11 +03:00
}
2020-07-01 21:45:10 +03:00
return atLeastGo1 ( branch , 12 ) && atLeastGo1 ( goBranch , 12 ) && buildRepoByDefault ( repo )
2019-04-19 17:37:11 +03:00
} ,
2018-08-24 21:41:05 +03:00
} )
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
}
2016-08-30 23:32:33 +03:00
2017-04-12 03:35:37 +03:00
// addBuilder adds c to the Builders map after doing some sanity
// checks.
2015-01-15 23:46:22 +03:00
func addBuilder ( c BuildConfig ) {
if c . Name == "" {
panic ( "empty name" )
}
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
if c . HostType == "" {
panic ( fmt . Sprintf ( "missing HostType for builder %q" , c . Name ) )
}
2015-01-15 23:46:22 +03:00
if _ , dup := Builders [ c . Name ] ; dup {
2017-08-06 18:57:06 +03:00
panic ( "dup name " + c . Name )
2015-01-15 23:46:22 +03:00
}
all: split builder config into builder & host configs
Our builders are named of the form "GOOS-GOARCH" or
"GOOS-GOARCH-suffix".
Over time we've grown many builders. This CL doesn't change
that. Builders continue to be named and operate as before.
Previously the build configuration file (dashboard/builders.go) made
each builder type ("linux-amd64-race", etc) define how to create a
host running a buildlet of that type, even though many builders had
identical host configs. For example, these builders all share the same
host type (a Kubernetes container):
linux-amd64
linux-amd64-race
linux-386
linux-386-387
And these are the same host type (a GCE VM):
windows-amd64-gce
windows-amd64-race
windows-386-gce
This CL creates a new concept of a "hostType" which defines how
the buildlet is created (Kube, GCE, Reverse, and how), and then each
builder itself references a host type.
Users never see the hostType. (except perhaps in gomote list output)
But they at least never need to care about them.
Reverse buildlets now can only be one hostType at a time, which
simplifies things. We were no longer using multiple roles per machine
once moving to VMs for OS X.
gomote continues to operate as it did previously but its underlying
protocol changed and clients will need to be updated. As a new
feature, gomote now has a new flag to let you reuse a buildlet host
connection for different builder rules if they share the same
underlying host type. But users can ignore that.
This CL is a long-standing TODO (previously attempted and aborted) and
will make many things easier and faster, including the linux-arm
cross-compilation effort, and keeping pre-warmed buildlets of VM types
ready to go.
Updates golang/go#17104
Change-Id: Iad8387f48680424a8441e878a2f4762bf79ea4d2
Reviewed-on: https://go-review.googlesource.com/29551
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2016-09-22 00:27:37 +03:00
if _ , ok := Hosts [ c . HostType ] ; ! ok {
panic ( fmt . Sprintf ( "undefined HostType %q for builder %q" , c . HostType , c . Name ) )
2015-09-09 01:18:47 +03:00
}
2017-04-13 07:34:42 +03:00
if c . SkipSnapshot && ( c . numTestHelpers > 0 || c . numTryTestHelpers > 0 ) {
panic ( fmt . Sprintf ( "config %q's SkipSnapshot is not compatible with sharded test helpers" , c . Name ) )
}
2017-04-12 03:35:37 +03:00
types := 0
2018-05-05 19:36:05 +03:00
for _ , fn := range [ ] func ( ) bool { c . IsReverse , c . IsContainer , c . IsVM } {
2017-04-12 03:35:37 +03:00
if fn ( ) {
types ++
}
}
if types != 1 {
2018-05-04 05:42:17 +03:00
panic ( fmt . Sprintf ( "build config %q host type inconsistent (must be Reverse, Image, or VM)" , c . Name ) )
2017-04-12 03:35:37 +03:00
}
2018-10-26 20:52:25 +03:00
Builders [ c . Name ] = & c
2015-01-15 23:46:22 +03:00
}
2017-04-12 03:35:37 +03:00
2020-11-03 06:25:51 +03:00
// tryNewMiscCompile is an intermediate step towards adding a real addMiscCompile TryBot.
// 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 ( suffix , rx string , knownIssue int , goDeps [ ] string ) {
if knownIssue == 0 {
panic ( "tryNewMiscCompile: knownIssue parameter must be non-zero" )
}
addBuilder ( BuildConfig {
Name : "misc-compile" + suffix ,
HostType : "host-linux-jessie" ,
buildsRepo : func ( repo , branch , goBranch string ) bool { return repo == "go" && branch == "master" } ,
KnownIssue : knownIssue ,
GoDeps : goDeps ,
env : [ ] string { "GO_DISABLE_OUTBOUND_NETWORK=1" } ,
CompileOnly : true ,
Notes : fmt . Sprintf ( "Tries buildall.bash to cross-compile & vet std+cmd packages for " + rx + ", but doesn't run any tests. See golang.org/issue/%d." , knownIssue ) ,
allScriptArgs : [ ] string {
// Filtering pattern to buildall.bash:
rx ,
} ,
} )
}
2020-04-09 19:47:03 +03:00
// fasterTrybots is a distTestAdjust policy function.
// It skips (returns false) the test/ directory and reboot tests for trybots.
2020-04-09 23:24:30 +03:00
func fasterTrybots ( run bool , distTest string , isNormalTry bool ) bool {
if isNormalTry {
2020-04-09 19:47:03 +03:00
if strings . HasPrefix ( distTest , "test:" ) || distTest == "reboot" {
2019-03-18 01:28:15 +03:00
return false // skip test
}
2017-12-07 03:40:40 +03:00
}
2020-04-09 19:47:03 +03:00
return run
2017-12-07 03:40:40 +03:00
}
2020-04-09 19:47:03 +03:00
// noTestDirAndNoReboot is a distTestAdjust policy function.
// It skips (returns false) the test/ directory and reboot tests for all builds.
2020-04-09 23:24:30 +03:00
func noTestDirAndNoReboot ( run bool , distTest string , isNormalTry bool ) bool {
2019-03-18 01:28:15 +03:00
if strings . HasPrefix ( distTest , "test:" ) || distTest == "reboot" {
2017-12-07 03:40:40 +03:00
return false // skip test
}
2020-04-09 19:47:03 +03:00
return run
2017-12-07 03:40:40 +03:00
}
2018-10-26 22:21:58 +03:00
2020-04-09 19:47:03 +03:00
// ppc64DistTestPolicy is a distTestAdjust policy function
2019-10-29 18:02:19 +03:00
// that's shared by linux-ppc64le, -ppc64le-power9osu, and -ppc64.
2020-04-09 23:24:30 +03:00
func ppc64DistTestPolicy ( run bool , distTest string , isNormalTry bool ) bool {
2019-10-29 18:02:19 +03:00
if distTest == "reboot" {
// Skip test. It seems to use a lot of memory?
// See https://golang.org/issue/35233.
return false
}
2020-04-09 19:47:03 +03:00
return run
2019-10-29 18:02:19 +03:00
}
2020-04-09 19:47:03 +03:00
// mipsDistTestPolicy is a distTestAdjust policy function
2019-10-29 23:35:07 +03:00
// that's shared by the slow mips builders.
2020-04-09 23:24:30 +03:00
func mipsDistTestPolicy ( run bool , distTest string , isNormalTry bool ) bool {
2019-10-29 23:35:07 +03:00
switch distTest {
case "api" , "reboot" :
return false
}
2020-04-09 19:47:03 +03:00
return run
2019-10-29 23:35:07 +03:00
}
// mipsBuildsRepoPolicy is a buildsRepo policy function
// that's shared by the slow mips builders.
func mipsBuildsRepoPolicy ( repo , branch , goBranch string ) bool {
switch repo {
case "go" , "net" , "sys" :
return branch == "master" && goBranch == "master"
default :
return false
}
}
2018-10-26 22:21:58 +03:00
// TryBuildersForProject returns the builders that should run as part of
// a TryBot set for the given project.
// The project argument is of the form "go", "net", "sys", etc.
2019-03-07 20:44:41 +03:00
// The branch is the branch of that project ("master", "release-branch.go1.12", etc)
// The goBranch is the branch of Go to use. If proj == "go", then branch == goBranch.
func TryBuildersForProject ( proj , branch , goBranch string ) [ ] * BuildConfig {
2018-10-26 22:21:58 +03:00
var confs [ ] * BuildConfig
for _ , conf := range Builders {
2019-03-07 20:44:41 +03:00
if conf . BuildsRepoTryBot ( proj , branch , goBranch ) {
2018-10-26 22:21:58 +03:00
confs = append ( confs , conf )
}
}
sort . Slice ( confs , func ( i , j int ) bool {
return confs [ i ] . Name < confs [ j ] . Name
} )
return confs
}
2019-03-07 20:44:41 +03:00
2020-03-14 00:09:21 +03:00
// atLeastGo1 reports whether branch is "release-branch.go1.N" where N >= min.
// It assumes "master" and "dev.*" branches are already greater than min, and
// always includes them.
2019-03-07 20:44:41 +03:00
func atLeastGo1 ( branch string , min int ) bool {
if branch == "master" {
return true
}
2020-03-14 00:09:21 +03:00
if strings . HasPrefix ( branch , "dev." ) {
// Treat dev branches current.
// If a dev branch is active, it will be current.
// If it is not active, it doesn't matter anyway.
// TODO: dev.boringcrypto.go1.N branches may be the
// exception. Currently we only build boringcrypto
// on linux/amd64 and windows/386, which support all
// versions of Go, so it doesn't actually matter.
return true
}
2019-03-07 20:44:41 +03:00
major , minor , ok := version . ParseReleaseBranch ( branch )
return ok && major == 1 && minor >= min
}
2020-03-10 20:26:20 +03:00
// atMostGo1 reports whether branch is "release-branch.go1.N" where N <= max.
// It assumes "master" branch is already greater than max, and doesn't include it.
func atMostGo1 ( branch string , max int ) bool {
major , minor , ok := version . ParseReleaseBranch ( branch )
return ok && major == 1 && minor <= max
}
2019-03-07 20:44:41 +03:00
// onlyGo is a common buildsRepo policy value that only builds the main "go" repo.
func onlyGo ( repo , branch , goBranch string ) bool { return repo == "go" }
2019-03-27 02:04:31 +03:00
2019-11-28 13:33:00 +03:00
// onlyMasterDefault is a common buildsRepo policy value that only builds
// default repos on the master branch.
func onlyMasterDefault ( repo , branch , goBranch string ) bool {
2020-07-01 21:45:10 +03:00
return branch == "master" && goBranch == "master" && buildRepoByDefault ( repo )
2019-10-10 07:17:45 +03:00
}
2019-04-03 08:03:37 +03:00
2019-03-27 02:04:31 +03:00
// disabledBuilder is a buildsRepo policy function that always return false.
func disabledBuilder ( repo , branch , goBranch string ) bool { return false }
2019-03-28 02:03:50 +03:00
// macTestPolicy is the test policy for Macs.
//
// We have limited Mac resources. It's not worth wasting time testing
// portable things on them. That is, if there's a slow test that will
// still fail slowly on another builder where we have more resources
// (like linux-amd64), then there's no point testing it redundantly on
// the Macs.
2020-04-09 23:24:30 +03:00
func macTestPolicy ( run bool , distTest string , isNormalTry bool ) bool {
2019-03-28 02:03:50 +03:00
if strings . HasPrefix ( distTest , "test:" ) {
return false
}
switch distTest {
case "reboot" , "api" , "doc_progs" ,
"wiki" , "bench_go1" , "codewalk" :
return false
}
2020-04-09 23:24:30 +03:00
if isNormalTry {
2019-03-28 02:03:50 +03:00
switch distTest {
case "runtime:cpu124" , "race" , "moved_goroot" :
return false
}
// TODO: more. Look at bigquery results once we have more data.
}
2020-04-09 19:47:03 +03:00
return run
2019-03-28 02:03:50 +03:00
}