// 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

import (
	"strconv"
	"strings"
)

// 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.
var Builders = map[string]BuildConfig{}

// A BuildConfig describes how to run a builder.
type BuildConfig struct {
	// Name is the unique name of the builder, in the form of
	// "darwin-386" or "linux-amd64-race".
	Name string

	Notes       string // notes for humans
	Owner       string // e.g. "bradfitz@golang.org", empty means golang-dev
	VMImage     string // e.g. "openbsd-amd64-56"
	machineType string // optional GCE instance type
	Go14URL     string // URL to built Go 1.4 tar.gz
	buildletURL string // optional override buildlet URL

	IsReverse   bool // if true, only use the reverse buildlet pool
	RegularDisk bool // if true, use spinning disk instead of SSD
	TryOnly     bool // only used for trybots, and not regular builds

	// NumTestHelpers is the number of _additional_ buildlets
	// past the first help out with sharded tests.
	NumTestHelpers int

	// BuildletType optionally specifies the type of buildlet to
	// request from the buildlet pool. If empty, it defaults to
	// the value of Name.
	//
	// These should be used to minimize builder types, so the buildlet pool
	// implementations can reuse buildlets from similar-enough builds.
	// (e.g. a shared linux-386 trybot can be reused for some linux-amd64
	// or linux-amd64-race tests, etc)
	//
	// TODO(bradfitz): break BuildConfig up into BuildConfig and
	// BuildletConfig and have a BuildConfig refer to a
	// BuildletConfig. There's no much confusion now.
	BuildletType string

	env           []string // extra environment ("key=value") pairs
	allScriptArgs []string
}

func (c *BuildConfig) Env() []string { return append([]string(nil), c.env...) }

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]
}

// 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, "/")
}

// BuildletBucket is the GCS storage bucket which holds the buildlet binaries.
// Tools working in the dev project may change this.
var BuildletBucket = "go-builder-data"

func fixBuildletBucket(u string) string {
	if BuildletBucket == "go-builder-data" {
		// Prod. Default case.
		return u
	}
	// Dev project remapping:
	return strings.Replace(u,
		"//storage.googleapis.com/go-builder-data/",
		"//storage.googleapis.com/"+BuildletBucket+"/",
		1)
}

// BuildletBinaryURL returns the public URL of this builder's buildlet.
func (c *BuildConfig) BuildletBinaryURL() string {
	if c.buildletURL != "" {
		return fixBuildletBucket(c.buildletURL)
	}
	return fixBuildletBucket("http://storage.googleapis.com/go-builder-data/buildlet." + c.GOOS() + "-" + c.GOARCH())
}

// SetBuildletBinaryURL sets the public URL of this builder's buildlet.
func (c *BuildConfig) SetBuildletBinaryURL(u string) {
	c.buildletURL = u
}

// 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 {
	if strings.HasSuffix(c.Name, "-race") {
		if strings.HasPrefix(c.Name, "windows-") {
			return "src/race.bat"
		}
		return "src/race.bash"
	}
	if strings.HasPrefix(c.Name, "windows-") {
		return "src/all.bat"
	}
	if strings.HasPrefix(c.Name, "plan9-") {
		return "src/all.rc"
	}
	if strings.HasPrefix(c.Name, "nacl-") {
		return "src/nacltest.bash"
	}
	if strings.HasPrefix(c.Name, "darwin-arm") {
		return "src/iostest.bash"
	}
	if c.Name == "misc-compile" {
		return "src/buildall.bash"
	}
	return "src/all.bash"
}

// SplitMakeRun reports whether the coordinator should first compile
// (using c.MakeScript), then snapshot, then run the tests (ideally
// sharded) using c.RunScript.
// 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 {
	if strings.HasPrefix(c.Name, "linux-arm") {
		// On Scaleway, we don't want to snapshot these to GCS
		// yet.  That might be a lot of bandwidth and we
		// haven't measure their speed yet. We might want to
		// store snapshots within Scaleway instead.  For now:
		// use the old way.
		return false
	}
	if strings.HasPrefix(c.Name, "darwin-") {
		// TODO(bradfitz,crawshaw,adg): this is failing for some reason:
		// Error: runTests: distTestList: Remote error: fork/exec /var/folders/5h/sqs3zkxd12zclcslj67vccqh0000gp/T/buildlet-scatch190808745/go/bin/go: no such file or directory
		return false
	}
	switch c.AllScript() {
	case "src/all.bash", "src/all.bat", "src/all.rc":
		// These we've verified to work.
		return true
	}
	// Conservatively:
	return false
}

func (c *BuildConfig) BuildSubrepos() bool {
	if !c.SplitMakeRun() {
		return false
	}
	// TODO(adg,bradfitz): expand this as required
	switch c.Name {
	case "darwin-amd64-10_10",
		"freebsd-386-gce101", "freebsd-amd64-gce101",
		"linux-386", "linux-amd64", "linux-amd64-nocgo",
		"openbsd-386-gce56", "openbsd-amd64-gce56",
		"plan9-386",
		"windows-386-gce", "windows-amd64-gce":
		return true
	default:
		return false
	}
}

// AllScriptArgs returns the set of arguments that should be passed to the
// all.bash-equivalent script. Usually empty.
func (c *BuildConfig) AllScriptArgs() []string {
	if strings.HasPrefix(c.Name, "darwin-arm") {
		return []string{"-restart"}
	}
	return append([]string(nil), c.allScriptArgs...)
}

// 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"
}

// 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()
}

// RunScript returns the relative path to the operating system's script to
// run the test suite.
// Example values are "src/run.bash", "src/run.bat", "src/run.rc".
func (c *BuildConfig) RunScript() string {
	if strings.HasPrefix(c.Name, "windows-") {
		return "src/run.bat"
	}
	if strings.HasPrefix(c.Name, "plan9-") {
		return "src/run.rc"
	}
	return "src/run.bash"
}

// RunScriptArgs returns the set of arguments that should be passed to the
// run.bash-equivalent script.
func (c *BuildConfig) RunScriptArgs() []string {
	return []string{"--no-rebuild"}
}

// 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"
}

// MachineType returns the GCE machine type to use for this builder.
func (c *BuildConfig) MachineType() string {
	if v := c.machineType; v != "" {
		return v
	}
	return "n1-highcpu-2"
}

// ShortOwner returns a short human-readable owner.
func (c BuildConfig) ShortOwner() string {
	if c.Owner == "" {
		return "go-dev"
	}
	return strings.TrimSuffix(c.Owner, "@golang.org")
}

// GCENumCPU reports the number of GCE CPUs this buildlet requires.
func (c *BuildConfig) GCENumCPU() int {
	t := c.MachineType()
	n, _ := strconv.Atoi(t[strings.LastIndex(t, "-")+1:])
	return n
}

func init() {
	addBuilder(BuildConfig{
		Name:           "freebsd-amd64-gce93",
		VMImage:        "freebsd-amd64-gce93",
		machineType:    "n1-highcpu-2",
		Go14URL:        "https://storage.googleapis.com/go-builder-data/go1.4-freebsd-amd64.tar.gz",
		NumTestHelpers: 3,
	})
	addBuilder(BuildConfig{
		Name:           "freebsd-amd64-gce101",
		Notes:          "FreeBSD 10.1; GCE VM is built from script in build/env/freebsd-amd64",
		VMImage:        "freebsd-amd64-gce101",
		machineType:    "n1-highcpu-2",
		Go14URL:        "https://storage.googleapis.com/go-builder-data/go1.4-freebsd-amd64.tar.gz",
		env:            []string{"CC=clang"},
		NumTestHelpers: 3,
	})
	addBuilder(BuildConfig{
		Name:        "freebsd-amd64-race",
		VMImage:     "freebsd-amd64-gce101",
		machineType: "n1-highcpu-4",
		Go14URL:     "https://storage.googleapis.com/go-builder-data/go1.4-freebsd-amd64.tar.gz",
		env:         []string{"CC=clang"},
	})
	addBuilder(BuildConfig{
		Name:    "freebsd-386-gce101",
		VMImage: "freebsd-amd64-gce101",
		//BuildletType: "freebsd-amd64-gce101",
		machineType: "n1-highcpu-2",
		buildletURL: "http://storage.googleapis.com/go-builder-data/buildlet.freebsd-amd64",
		Go14URL:     "https://storage.googleapis.com/go-builder-data/go1.4-freebsd-amd64.tar.gz",
		// TODO(bradfitz): setting GOHOSTARCH=386 should work
		// to eliminate some unnecessary work (it works on
		// Linux), but fails on FreeBSD with:
		//   ##### ../misc/cgo/testso
		//   Shared object "libcgosotest.so" not found, required by "main"
		// Maybe this is a clang thing? We'll see when we do linux clang too.
		env: []string{"GOARCH=386", "CC=clang"},
	})
	addBuilder(BuildConfig{
		Name:    "linux-386",
		VMImage: "linux-buildlet-std",
		//BuildletType:   "linux-amd64",
		buildletURL:    "http://storage.googleapis.com/go-builder-data/buildlet.linux-amd64",
		env:            []string{"GOROOT_BOOTSTRAP=/go1.4", "GOARCH=386", "GOHOSTARCH=386"},
		NumTestHelpers: 3,
	})
	addBuilder(BuildConfig{
		Name:    "linux-386-387",
		Notes:   "GO386=387",
		VMImage: "linux-buildlet-std",
		//BuildletType: "linux-amd64",
		buildletURL: "http://storage.googleapis.com/go-builder-data/buildlet.linux-amd64",
		env:         []string{"GOROOT_BOOTSTRAP=/go1.4", "GOARCH=386", "GOHOSTARCH=386", "GO386=387"},
	})
	addBuilder(BuildConfig{
		Name:           "linux-amd64",
		VMImage:        "linux-buildlet-std",
		env:            []string{"GOROOT_BOOTSTRAP=/go1.4"},
		NumTestHelpers: 3,
	})
	addBuilder(BuildConfig{
		Name:        "misc-compile",
		TryOnly:     true,
		VMImage:     "linux-buildlet-std",
		machineType: "n1-highcpu-16", // CPU-bound, uses it well.
		Notes:       "Runs buildall.sh to compile stdlib for GOOS/GOARCH pairs not otherwise covered by trybots, but doesn't run any tests.",
		buildletURL: "http://storage.googleapis.com/go-builder-data/buildlet.linux-amd64",
		env:         []string{"GOROOT_BOOTSTRAP=/go1.4"},
		allScriptArgs: []string{
			// Filtering pattern to buildall.bash:
			// TODO: add darwin-386 and
			"^(linux-arm64|linux-ppc64|linux-ppc64le|nacl-arm|plan9-amd64|solaris-amd64|netbsd-386|netbsd-amd64|netbsd-arm|freebsd-arm|darwin-386)$",
		},
	})
	addBuilder(BuildConfig{
		Name:    "linux-amd64-nocgo",
		Notes:   "cgo disabled",
		VMImage: "linux-buildlet-std",
		env: []string{
			"GOROOT_BOOTSTRAP=/go1.4",
			"CGO_ENABLED=0",
			// 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{
		Name:    "linux-amd64-noopt",
		Notes:   "optimizations and inlining disabled",
		VMImage: "linux-buildlet-std",
		//BuildletType: "linux-amd64",
		env: []string{"GOROOT_BOOTSTRAP=/go1.4", "GO_GCFLAGS=-N -l"},
	})
	addBuilder(BuildConfig{
		Name:        "linux-amd64-race",
		VMImage:     "linux-buildlet-std",
		machineType: "n1-highcpu-4",
		env:         []string{"GOROOT_BOOTSTRAP=/go1.4"},
		// TODO(bradfitz): make race.bash shardable, then: NumTestHelpers: 3
	})
	addBuilder(BuildConfig{
		Name:    "linux-386-clang",
		VMImage: "linux-buildlet-clang",
		//BuildletType: "linux-amd64-clang",
		buildletURL: "http://storage.googleapis.com/go-builder-data/buildlet.linux-amd64",
		env:         []string{"GOROOT_BOOTSTRAP=/go1.4", "CC=/usr/bin/clang", "GOHOSTARCH=386"},
	})
	addBuilder(BuildConfig{
		Name:    "linux-amd64-clang",
		Notes:   "Debian wheezy + clang 3.5 instead of gcc",
		VMImage: "linux-buildlet-clang",
		env:     []string{"GOROOT_BOOTSTRAP=/go1.4", "CC=/usr/bin/clang"},
	})
	addBuilder(BuildConfig{
		Name:        "linux-386-sid",
		VMImage:     "linux-buildlet-sid",
		buildletURL: "http://storage.googleapis.com/go-builder-data/buildlet.linux-amd64",
		env:         []string{"GOROOT_BOOTSTRAP=/go1.4", "GOHOSTARCH=386"},
	})
	addBuilder(BuildConfig{
		Name:    "linux-amd64-sid",
		Notes:   "Debian sid (unstable)",
		VMImage: "linux-buildlet-sid",
		env:     []string{"GOROOT_BOOTSTRAP=/go1.4"},
	})
	addBuilder(BuildConfig{
		Name:    "linux-arm-qemu",
		VMImage: "linux-buildlet-arm",
		env:     []string{"GOROOT_BOOTSTRAP=/go1.4", "IN_QEMU=1"},
	})
	addBuilder(BuildConfig{
		Name:      "linux-arm",
		IsReverse: true,
		env:       []string{"GOROOT_BOOTSTRAP=/usr/local/go"},
	})
	// Sharded ARM trybots:
	addBuilder(BuildConfig{
		Name:         "linux-arm-shard_test",
		BuildletType: "linux-arm",
		TryOnly:      true,
		IsReverse:    true,
		env: []string{
			"GOROOT_BOOTSTRAP=/usr/local/go",
			"GOTESTONLY=^test$",
		},
	})
	addBuilder(BuildConfig{
		Name:         "linux-arm-shard_std_am",
		BuildletType: "linux-arm",
		TryOnly:      true,
		IsReverse:    true,
		env: []string{
			"GOROOT_BOOTSTRAP=/usr/local/go",
			"GOTESTONLY=^go_test:[a-m]",
		},
	})
	addBuilder(BuildConfig{
		Name:         "linux-arm-shard_std_nz",
		BuildletType: "linux-arm",
		TryOnly:      true,
		IsReverse:    true,
		env: []string{
			"GOROOT_BOOTSTRAP=/usr/local/go",
			"GOTESTONLY=^go_test:[n-z]",
		},
	})
	addBuilder(BuildConfig{
		Name:         "linux-arm-shard_runtimecpu",
		BuildletType: "linux-arm",
		TryOnly:      true,
		IsReverse:    true,
		env: []string{
			"GOROOT_BOOTSTRAP=/usr/local/go",
			"GOTESTONLY=^runtime:cpu124$",
		},
	})
	addBuilder(BuildConfig{
		Name:         "linux-arm-shard_cgotest",
		BuildletType: "linux-arm",
		TryOnly:      true,
		IsReverse:    true,
		env: []string{
			"GOROOT_BOOTSTRAP=/usr/local/go",
			"GOTESTONLY=^cgo_test$",
		},
	})
	addBuilder(BuildConfig{
		Name:         "linux-arm-shard_misc",
		BuildletType: "linux-arm",
		TryOnly:      true,
		IsReverse:    true,
		env: []string{
			"GOROOT_BOOTSTRAP=/usr/local/go",
			"GOTESTONLY=!^(go_test:|test$|cgo_test$|runtime:cpu124$)",
		},
	})

	addBuilder(BuildConfig{
		Name:      "linux-arm-arm5",
		IsReverse: true,
		env: []string{
			"GOROOT_BOOTSTRAP=/usr/local/go",
			"GOARM=5",
			"GO_TEST_TIMEOUT_SCALE=5", // slow.
		},
	})
	addBuilder(BuildConfig{
		Name:        "nacl-386",
		VMImage:     "linux-buildlet-nacl-v2",
		buildletURL: "http://storage.googleapis.com/go-builder-data/buildlet.linux-amd64",
		env:         []string{"GOROOT_BOOTSTRAP=/go1.4", "GOOS=nacl", "GOARCH=386", "GOHOSTOS=linux", "GOHOSTARCH=amd64"},
		//BuildletType: "nacl-amd64p32",
	})
	addBuilder(BuildConfig{
		Name:        "nacl-amd64p32",
		VMImage:     "linux-buildlet-nacl-v2",
		buildletURL: "http://storage.googleapis.com/go-builder-data/buildlet.linux-amd64",
		env:         []string{"GOROOT_BOOTSTRAP=/go1.4", "GOOS=nacl", "GOARCH=amd64p32", "GOHOSTOS=linux", "GOHOSTARCH=amd64"},
	})
	addBuilder(BuildConfig{
		Name:           "openbsd-amd64-gce56",
		Notes:          "OpenBSD 5.6; GCE VM is built from script in build/env/openbsd-amd64",
		VMImage:        "openbsd-amd64-56",
		machineType:    "n1-highcpu-2",
		Go14URL:        "https://storage.googleapis.com/go-builder-data/go1.4-openbsd-amd64.tar.gz",
		NumTestHelpers: 3,
	})
	addBuilder(BuildConfig{
		Name:           "openbsd-386-gce56",
		Notes:          "OpenBSD 5.6; GCE VM is built from script in build/env/openbsd-386",
		VMImage:        "openbsd-386-56",
		machineType:    "n1-highcpu-2",
		Go14URL:        "https://storage.googleapis.com/go-builder-data/go1.4-openbsd-386.tar.gz",
		NumTestHelpers: 3,
	})
	addBuilder(BuildConfig{
		Name:    "plan9-386",
		Notes:   "Plan 9 from 0intro; GCE VM is built from script in build/env/plan9-386",
		VMImage: "plan9-386-v2",
		Go14URL: "https://storage.googleapis.com/go-builder-data/go1.4-plan9-386.tar.gz",

		// 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-2",

		NumTestHelpers: 5, // slow
	})
	addBuilder(BuildConfig{
		Name:           "windows-amd64-gce",
		VMImage:        "windows-buildlet-v2",
		machineType:    "n1-highcpu-2",
		Go14URL:        "https://storage.googleapis.com/go-builder-data/go1.4-windows-amd64.tar.gz",
		RegularDisk:    true,
		env:            []string{"GOARCH=amd64", "GOHOSTARCH=amd64"},
		NumTestHelpers: 3,
	})
	addBuilder(BuildConfig{
		Name:        "windows-amd64-race",
		Notes:       "Only runs -race tests (./race.bat)",
		VMImage:     "windows-buildlet-v2",
		machineType: "n1-highcpu-4",
		Go14URL:     "https://storage.googleapis.com/go-builder-data/go1.4-windows-amd64.tar.gz",
		RegularDisk: true,
		env:         []string{"GOARCH=amd64", "GOHOSTARCH=amd64"},
	})
	addBuilder(BuildConfig{
		Name:        "windows-386-gce",
		VMImage:     "windows-buildlet-v2",
		machineType: "n1-highcpu-2",
		// TODO(bradfitz): once buildlet type vs. config type is split: BuildletType:   "windows-amd64-gce",
		buildletURL:    "http://storage.googleapis.com/go-builder-data/buildlet.windows-amd64",
		Go14URL:        "https://storage.googleapis.com/go-builder-data/go1.4-windows-386.tar.gz",
		RegularDisk:    true,
		env:            []string{"GOARCH=386", "GOHOSTARCH=386"},
		NumTestHelpers: 3,
	})
	addBuilder(BuildConfig{
		Name:           "darwin-amd64-10_10",
		Notes:          "Mac Mini running OS X 10.10 (Yosemite)",
		Go14URL:        "https://storage.googleapis.com/go-builder-data/go1.4-darwin-amd64.tar.gz",
		IsReverse:      true,
		NumTestHelpers: 1, // limited resources
	})
	addBuilder(BuildConfig{
		Name:      "darwin-arm-a5ios",
		Notes:     "iPhone 4S (A5 processor), via a Mac Mini",
		Owner:     "crawshaw@golang.org",
		Go14URL:   "https://storage.googleapis.com/go-builder-data/go1.4-darwin-amd64.tar.gz",
		IsReverse: true,
		env:       []string{"GOARCH=arm", "GOHOSTARCH=amd64"},
	})
	addBuilder(BuildConfig{
		Name:      "darwin-arm64-a7ios",
		Notes:     "iPad Mini 3 (A7 processor), via a Mac Mini",
		Owner:     "crawshaw@golang.org",
		Go14URL:   "https://storage.googleapis.com/go-builder-data/go1.4-darwin-amd64.tar.gz",
		IsReverse: true,
		env:       []string{"GOARCH=arm64", "GOHOSTARCH=amd64"},
	})
}

func addBuilder(c BuildConfig) {
	if c.Name == "" {
		panic("empty name")
	}
	if _, dup := Builders[c.Name]; dup {
		panic("dup name")
	}
	if c.VMImage == "" && !c.IsReverse {
		panic("empty VMImage")
	}
	Builders[c.Name] = c
}
