Add reasonable defaults to RBE configuration parameters.
Test: simple one action build
Change-Id: Ic66ad2b89866a67008950035bc3b559dae4e3a3e
diff --git a/ui/build/config.go b/ui/build/config.go
index b263a98..0414175 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -15,6 +15,7 @@
package build
import (
+ "fmt"
"os"
"path/filepath"
"runtime"
@@ -258,7 +259,7 @@
ret.environ.Set("BUILD_DATETIME_FILE", buildDateTimeFile)
if ret.UseRBE() {
- for k, v := range getRBEVars(ctx, tmpDir) {
+ for k, v := range getRBEVars(ctx, Config{ret}) {
ret.environ.Set(k, v)
}
}
@@ -806,13 +807,73 @@
return true
}
-func (c *configImpl) RBEStatsOutputDir() string {
+func (c *configImpl) logDir() string {
+ if c.Dist() {
+ return filepath.Join(c.DistDir(), "logs")
+ }
+ return c.OutDir()
+}
+
+func (c *configImpl) rbeStatsOutputDir() string {
for _, f := range []string{"RBE_output_dir", "FLAG_output_dir"} {
if v, ok := c.environ.Get(f); ok {
return v
}
}
- return ""
+ return c.logDir()
+}
+
+func (c *configImpl) rbeLogPath() string {
+ for _, f := range []string{"RBE_log_path", "FLAG_log_path"} {
+ if v, ok := c.environ.Get(f); ok {
+ return v
+ }
+ }
+ return fmt.Sprintf("text://%v/reproxy_log.txt", c.logDir())
+}
+
+func (c *configImpl) rbeExecRoot() string {
+ for _, f := range []string{"RBE_exec_root", "FLAG_exec_root"} {
+ if v, ok := c.environ.Get(f); ok {
+ return v
+ }
+ }
+ wd, err := os.Getwd()
+ if err != nil {
+ return ""
+ }
+ return wd
+}
+
+func (c *configImpl) rbeDir() string {
+ if v, ok := c.environ.Get("RBE_DIR"); ok {
+ return v
+ }
+ return "prebuilts/remoteexecution-client/live/"
+}
+
+func (c *configImpl) rbeReproxy() string {
+ for _, f := range []string{"RBE_re_proxy", "FLAG_re_proxy"} {
+ if v, ok := c.environ.Get(f); ok {
+ return v
+ }
+ }
+ return filepath.Join(c.rbeDir(), "reproxy")
+}
+
+func (c *configImpl) rbeAuth() (string, string) {
+ credFlags := []string{"use_application_default_credentials", "use_gce_credentials", "credential_file"}
+ for _, cf := range credFlags {
+ for _, f := range []string{"RBE_" + cf, "FLAG_" + cf} {
+ if v, ok := c.environ.Get(f); ok {
+ v = strings.TrimSpace(v)
+ if v != "" && v != "false" && v != "0" {
+ return "RBE_" + cf, v
+ }
+ }
+ }
+ }
+ return "RBE_use_application_default_credentials", "true"
}
func (c *configImpl) UseRemoteBuild() bool {
diff --git a/ui/build/rbe.go b/ui/build/rbe.go
index fd3b7ab..99107e3 100644
--- a/ui/build/rbe.go
+++ b/ui/build/rbe.go
@@ -37,10 +37,8 @@
func rbeCommand(ctx Context, config Config, rbeCmd string) string {
var cmdPath string
- if rbeDir, ok := config.Environment().Get("RBE_DIR"); ok {
+ if rbeDir := config.rbeDir(); rbeDir != "" {
cmdPath = filepath.Join(rbeDir, rbeCmd)
- } else if home, ok := config.Environment().Get("HOME"); ok {
- cmdPath = filepath.Join(home, "rbe", rbeCmd)
} else {
ctx.Fatalf("rbe command path not found")
}
@@ -52,9 +50,18 @@
return cmdPath
}
-func getRBEVars(ctx Context, tmpDir string) map[string]string {
+func getRBEVars(ctx Context, config Config) map[string]string {
rand.Seed(time.Now().UnixNano())
- return map[string]string{"RBE_server_address": fmt.Sprintf("unix://%v/reproxy_%v.sock", tmpDir, rand.Intn(1000))}
+ vars := map[string]string{
+ "RBE_server_address": fmt.Sprintf("unix://%v/reproxy_%v.sock", absPath(ctx, config.TempDir()), rand.Intn(1000)),
+ "RBE_log_path": config.rbeLogPath(),
+ "RBE_re_proxy": config.rbeReproxy(),
+ "RBE_exec_root": config.rbeExecRoot(),
+ "RBE_output_dir": config.rbeStatsOutputDir(),
+ }
+ k, v := config.rbeAuth()
+ vars[k] = v
+ return vars
}
func startRBE(ctx Context, config Config) {
@@ -102,7 +109,7 @@
return
}
- outputDir := config.RBEStatsOutputDir()
+ outputDir := config.rbeStatsOutputDir()
if outputDir == "" {
ctx.Fatal("RBE output dir variable not defined. Aborting metrics dumping.")
}
@@ -111,6 +118,9 @@
// Stop the proxy first in order to generate the RBE metrics protobuf file.
stopRBE(ctx, config)
+ if metricsFile == filename {
+ return
+ }
if _, err := copyFile(metricsFile, filename); err != nil {
ctx.Fatalf("failed to copy %q to %q: %v\n", metricsFile, filename, err)
}
diff --git a/ui/build/rbe_test.go b/ui/build/rbe_test.go
index 23a53b4..8ff96bc 100644
--- a/ui/build/rbe_test.go
+++ b/ui/build/rbe_test.go
@@ -83,24 +83,13 @@
func TestDumpRBEMetricsErrors(t *testing.T) {
ctx := testContext()
tests := []struct {
- description string
- rbeOutputDirDefined bool
- bootstrapProgram string
- expectedErr string
+ description string
+ bootstrapProgram string
+ expectedErr string
}{{
- description: "output_dir not defined",
- bootstrapProgram: rbeBootstrapProgram,
- expectedErr: "RBE output dir variable not defined",
- }, {
- description: "stopRBE failed",
- rbeOutputDirDefined: true,
- bootstrapProgram: "#!/bin/bash\nexit 1\n",
- expectedErr: "shutdown failed",
- }, {
- description: "failed to copy metrics file",
- rbeOutputDirDefined: true,
- bootstrapProgram: "#!/bin/bash\n",
- expectedErr: "failed to copy",
+ description: "stopRBE failed",
+ bootstrapProgram: "#!/bin/bash\nexit 1\n",
+ expectedErr: "shutdown failed",
}}
for _, tt := range tests {
@@ -124,10 +113,6 @@
env.Set("OUT_DIR", tmpDir)
env.Set("RBE_DIR", tmpDir)
- if tt.rbeOutputDirDefined {
- env.Set("RBE_output_dir", t.TempDir())
- }
-
config := Config{&configImpl{
environ: env,
}}