Always propagate some environment variables to RBE

Always propagate LANG, LC_MESSAGES and PYTHONDONTWRITEBYTECODE
to RBE to get more consistent behavior between local actions and
RBE.

Bug: 182415460
Bug: 190593001
Test: treehugger
Change-Id: I726e6f02fd3ef77e158baf6fde77ffb7247a1375
This commit is contained in:
Colin Cross 2021-06-09 12:48:53 -07:00
parent a4d9b86c8b
commit 95fad7a56e
3 changed files with 17 additions and 12 deletions

View file

@ -361,10 +361,7 @@ func (l *linter) lint(ctx android.ModuleContext) {
Labels: map[string]string{"type": "tool", "name": "lint"}, Labels: map[string]string{"type": "tool", "name": "lint"},
ExecStrategy: lintRBEExecStrategy(ctx), ExecStrategy: lintRBEExecStrategy(ctx),
ToolchainInputs: []string{config.JavaCmd(ctx).String()}, ToolchainInputs: []string{config.JavaCmd(ctx).String()},
EnvironmentVariables: []string{ Platform: map[string]string{remoteexec.PoolKey: pool},
"LANG",
},
Platform: map[string]string{remoteexec.PoolKey: pool},
}) })
} }

View file

@ -50,8 +50,14 @@ const (
) )
var ( var (
defaultLabels = map[string]string{"type": "tool"} defaultLabels = map[string]string{"type": "tool"}
defaultExecStrategy = LocalExecStrategy defaultExecStrategy = LocalExecStrategy
defaultEnvironmentVariables = []string{
// This is a subset of the allowlist in ui/build/ninja.go that makes sense remotely.
"LANG",
"LC_MESSAGES",
"PYTHONDONTWRITEBYTECODE",
}
) )
// REParams holds information pertinent to the remote execution of a rule. // REParams holds information pertinent to the remote execution of a rule.
@ -149,8 +155,10 @@ func (r *REParams) wrapperArgs() string {
args += " --toolchain_inputs=" + strings.Join(r.ToolchainInputs, ",") args += " --toolchain_inputs=" + strings.Join(r.ToolchainInputs, ",")
} }
if len(r.EnvironmentVariables) > 0 { envVarAllowlist := append(r.EnvironmentVariables, defaultEnvironmentVariables...)
args += " --env_var_allowlist=" + strings.Join(r.EnvironmentVariables, ",")
if len(envVarAllowlist) > 0 {
args += " --env_var_allowlist=" + strings.Join(envVarAllowlist, ",")
} }
return args + " -- " return args + " -- "

View file

@ -36,7 +36,7 @@ func TestTemplate(t *testing.T) {
PoolKey: "default", PoolKey: "default",
}, },
}, },
want: fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out -- ", DefaultImage), want: fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out --env_var_allowlist=LANG,LC_MESSAGES,PYTHONDONTWRITEBYTECODE -- ", DefaultImage),
}, },
{ {
name: "all params", name: "all params",
@ -52,7 +52,7 @@ func TestTemplate(t *testing.T) {
PoolKey: "default", PoolKey: "default",
}, },
}, },
want: fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=remote --inputs=$in --input_list_paths=$out.rsp,out2.rsp --output_files=$out --toolchain_inputs=clang++ -- ", DefaultImage), want: fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=remote --inputs=$in --input_list_paths=$out.rsp,out2.rsp --output_files=$out --toolchain_inputs=clang++ --env_var_allowlist=LANG,LC_MESSAGES,PYTHONDONTWRITEBYTECODE -- ", DefaultImage),
}, },
} }
for _, test := range tests { for _, test := range tests {
@ -74,7 +74,7 @@ func TestNoVarTemplate(t *testing.T) {
PoolKey: "default", PoolKey: "default",
}, },
} }
want := fmt.Sprintf("prebuilts/remoteexecution-client/live/rewrapper --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out -- ", DefaultImage) want := fmt.Sprintf("prebuilts/remoteexecution-client/live/rewrapper --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out --env_var_allowlist=LANG,LC_MESSAGES,PYTHONDONTWRITEBYTECODE -- ", DefaultImage)
if got := params.NoVarTemplate(DefaultWrapperPath); got != want { if got := params.NoVarTemplate(DefaultWrapperPath); got != want {
t.Errorf("NoVarTemplate() returned\n%s\nwant\n%s", got, want) t.Errorf("NoVarTemplate() returned\n%s\nwant\n%s", got, want)
} }
@ -90,7 +90,7 @@ func TestTemplateDeterminism(t *testing.T) {
PoolKey: "default", PoolKey: "default",
}, },
} }
want := fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out -- ", DefaultImage) want := fmt.Sprintf("${android.RBEWrapper} --labels=compiler=clang,lang=cpp,type=compile --platform=\"Pool=default,container-image=%s\" --exec_strategy=local --inputs=$in --output_files=$out --env_var_allowlist=LANG,LC_MESSAGES,PYTHONDONTWRITEBYTECODE -- ", DefaultImage)
for i := 0; i < 1000; i++ { for i := 0; i < 1000; i++ {
if got := r.Template(); got != want { if got := r.Template(); got != want {
t.Fatalf("Template() returned\n%s\nwant\n%s", got, want) t.Fatalf("Template() returned\n%s\nwant\n%s", got, want)