coordinator: add support for different build dashboards
LGTM=bradfitz R=bradfitz CC=adg, golang-codereviews https://golang.org/cl/135520043
This commit is contained in:
parent
afc3bf64c0
commit
bbfe5adf96
|
@ -52,6 +52,7 @@ type imageInfo struct {
|
||||||
|
|
||||||
var images = map[string]*imageInfo{
|
var images = map[string]*imageInfo{
|
||||||
"gobuilders/linux-x86-base": {url: "https://storage.googleapis.com/go-builder-data/docker-linux.base.tar.gz"},
|
"gobuilders/linux-x86-base": {url: "https://storage.googleapis.com/go-builder-data/docker-linux.base.tar.gz"},
|
||||||
|
"gobuilders/linux-x86-gccgo": {url: "https://storage.googleapis.com/go-builder-data/docker-linux.gccgo.tar.gz"},
|
||||||
"gobuilders/linux-x86-nacl": {url: "https://storage.googleapis.com/go-builder-data/docker-linux.nacl.tar.gz"},
|
"gobuilders/linux-x86-nacl": {url: "https://storage.googleapis.com/go-builder-data/docker-linux.nacl.tar.gz"},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +60,10 @@ type buildConfig struct {
|
||||||
name string // "linux-amd64-race"
|
name string // "linux-amd64-race"
|
||||||
image string // Docker image to use to build
|
image string // Docker image to use to build
|
||||||
cmd string // optional -cmd flag (relative to go/src/)
|
cmd string // optional -cmd flag (relative to go/src/)
|
||||||
|
cmdTimeout time.Duration // time to wait for optional cmd to finish
|
||||||
env []string // extra environment ("key=value") pairs
|
env []string // extra environment ("key=value") pairs
|
||||||
|
dashURL string // url of the build dashboard
|
||||||
|
tool string // the tool this configuration is for
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -71,6 +75,14 @@ func main() {
|
||||||
addBuilder(buildConfig{name: "linux-amd64-race"})
|
addBuilder(buildConfig{name: "linux-amd64-race"})
|
||||||
addBuilder(buildConfig{name: "nacl-386"})
|
addBuilder(buildConfig{name: "nacl-386"})
|
||||||
addBuilder(buildConfig{name: "nacl-amd64p32"})
|
addBuilder(buildConfig{name: "nacl-amd64p32"})
|
||||||
|
addBuilder(buildConfig{
|
||||||
|
name: "linux-amd64-gccgo",
|
||||||
|
image: "gobuilders/linux-x86-gccgo",
|
||||||
|
cmd: "make check-go -kj",
|
||||||
|
cmdTimeout: 60 * time.Minute,
|
||||||
|
dashURL: "https://build.golang.org/gccgo",
|
||||||
|
tool: "gccgo",
|
||||||
|
})
|
||||||
|
|
||||||
if (*just != "") != (*rev != "") {
|
if (*just != "") != (*rev != "") {
|
||||||
log.Fatalf("--just and --rev must be used together")
|
log.Fatalf("--just and --rev must be used together")
|
||||||
|
@ -94,8 +106,8 @@ func main() {
|
||||||
go http.ListenAndServe(":80", nil)
|
go http.ListenAndServe(":80", nil)
|
||||||
|
|
||||||
workc := make(chan builderRev)
|
workc := make(chan builderRev)
|
||||||
for name := range builders {
|
for name, builder := range builders {
|
||||||
go findWorkLoop(name, workc)
|
go findWorkLoop(name, builder.dashURL, workc)
|
||||||
}
|
}
|
||||||
|
|
||||||
ticker := time.NewTicker(1 * time.Minute)
|
ticker := time.NewTicker(1 * time.Minute)
|
||||||
|
@ -200,10 +212,10 @@ func handleLogs(w http.ResponseWriter, r *http.Request) {
|
||||||
io.WriteString(w, logs)
|
io.WriteString(w, logs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func findWorkLoop(builderName string, work chan<- builderRev) {
|
func findWorkLoop(builderName, dashURL string, work chan<- builderRev) {
|
||||||
// TODO: make this better
|
// TODO: make this better
|
||||||
for {
|
for {
|
||||||
rev, err := findWork(builderName)
|
rev, err := findWork(builderName, dashURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Finding work for %s: %v", builderName, err)
|
log.Printf("Finding work for %s: %v", builderName, err)
|
||||||
} else if rev != "" {
|
} else if rev != "" {
|
||||||
|
@ -213,7 +225,7 @@ func findWorkLoop(builderName string, work chan<- builderRev) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func findWork(builderName string) (rev string, err error) {
|
func findWork(builderName, dashURL string) (rev string, err error) {
|
||||||
var jres struct {
|
var jres struct {
|
||||||
Response struct {
|
Response struct {
|
||||||
Kind string
|
Kind string
|
||||||
|
@ -223,7 +235,7 @@ func findWork(builderName string) (rev string, err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res, err := http.Get("https://build.golang.org/todo?builder=" + builderName + "&kind=build-go-commit")
|
res, err := http.Get(dashURL + "/todo?builder=" + builderName + "&kind=build-go-commit")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -260,11 +272,14 @@ func (conf buildConfig) dockerRunArgs(rev string) (args []string) {
|
||||||
conf.image,
|
conf.image,
|
||||||
"/usr/local/bin/builder",
|
"/usr/local/bin/builder",
|
||||||
"-rev="+rev,
|
"-rev="+rev,
|
||||||
"-buildroot=/",
|
"-dashboard="+conf.dashURL,
|
||||||
|
"-tool="+conf.tool,
|
||||||
|
"-buildroot=/"+conf.tool,
|
||||||
"-v",
|
"-v",
|
||||||
)
|
)
|
||||||
if conf.cmd != "" {
|
if conf.cmd != "" {
|
||||||
args = append(args, "-cmd", conf.cmd)
|
args = append(args, "-cmd", conf.cmd)
|
||||||
|
args = append(args, "-cmdTimeout", conf.cmdTimeout.String())
|
||||||
}
|
}
|
||||||
args = append(args, conf.name)
|
args = append(args, conf.name)
|
||||||
return
|
return
|
||||||
|
@ -280,6 +295,16 @@ func addBuilder(c buildConfig) {
|
||||||
if _, dup := builders[c.name]; dup {
|
if _, dup := builders[c.name]; dup {
|
||||||
panic("dup name")
|
panic("dup name")
|
||||||
}
|
}
|
||||||
|
if c.cmdTimeout == 0 {
|
||||||
|
c.cmdTimeout = 10 * time.Minute
|
||||||
|
}
|
||||||
|
if c.dashURL == "" {
|
||||||
|
c.dashURL = "https://build.golang.org"
|
||||||
|
}
|
||||||
|
if c.tool == "" {
|
||||||
|
c.tool = "go"
|
||||||
|
}
|
||||||
|
|
||||||
if strings.HasPrefix(c.name, "nacl-") {
|
if strings.HasPrefix(c.name, "nacl-") {
|
||||||
if c.image == "" {
|
if c.image == "" {
|
||||||
c.image = "gobuilders/linux-x86-nacl"
|
c.image = "gobuilders/linux-x86-nacl"
|
||||||
|
|
Loading…
Reference in New Issue