@@ -44,6 +44,27 @@ sh_test(
44
44
name = "test_env_foo",
45
45
srcs = ["test_env_foo.sh"],
46
46
)
47
+
48
+ genrule(
49
+ name = "show_host_env_using_tools",
50
+ tools = ["env.txt"],
51
+ outs = ["tools_env.txt"],
52
+ cmd = "cp \$ (location env.txt) \"\$ @\""
53
+ )
54
+
55
+ genrule(
56
+ name = "show_host_env_using_exec_tools",
57
+ exec_tools = ["env.txt"],
58
+ outs = ["exec_tools_env.txt"],
59
+ cmd = "cp \$ (location env.txt) \"\$ @\""
60
+ )
61
+
62
+ genrule(
63
+ name = "show_host_env_using_successive_exec_tools",
64
+ exec_tools = ["exec_tools_env.txt"],
65
+ outs = ["successive_exec_tools_env.txt"],
66
+ cmd = "cp \$ (location exec_tools_env.txt) \"\$ @\""
67
+ )
47
68
EOF
48
69
cat > pkg/build.bzl << EOF
49
70
def _impl(ctx):
@@ -178,6 +199,9 @@ function test_env_freezing() {
178
199
expect_log " build --action_env=FREEZE_TEST_BUILD=client_build"
179
200
180
201
rm -f .${PRODUCT_NAME} rc
202
+ # Recreate .bazelrc as removing it affects other tests that run in the
203
+ # same shard with this test.
204
+ write_default_bazelrc
181
205
}
182
206
183
207
function test_use_default_shell_env {
@@ -218,4 +242,204 @@ function test_action_env_changes_honored {
218
242
219
243
}
220
244
245
+ function test_host_env_using_tools_simple() {
246
+ export FOO=baz
247
+
248
+ # If FOO is passed using --host_action_env, it should be listed in host env vars
249
+ bazel build --host_action_env=FOO=bar pkg:show_host_env_using_tools \
250
+ || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
251
+
252
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/tools_env.txt > $TEST_log
253
+ expect_log " FOO=bar"
254
+
255
+ # But if FOO is passed using --action_env, it should not be listed in host env vars
256
+ bazel build --action_env=FOO=bar pkg:show_host_env_using_tools \
257
+ || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
258
+
259
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/tools_env.txt > $TEST_log
260
+ expect_not_log " FOO=bar"
261
+ }
262
+
263
+ function test_host_env_using_tools_latest_wins() {
264
+ export FOO=environmentfoo
265
+ export BAR=environmentbar
266
+ bazel build --host_action_env=FOO=foo \
267
+ --host_action_env=BAR=willbeoverridden --host_action_env=BAR=bar pkg:show_host_env_using_tools \
268
+ || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
269
+
270
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/tools_env.txt > $TEST_log
271
+ expect_log " FOO=foo"
272
+ expect_log " BAR=bar"
273
+ }
274
+
275
+ function test_client_env_using_tools() {
276
+ export FOO=startup_foo
277
+ bazel clean --expunge
278
+ bazel help build > /dev/null || fail " ${PRODUCT_NAME} help failed"
279
+ export FOO=client_foo
280
+ bazel build --host_action_env=FOO pkg:show_host_env_using_tools || \
281
+ fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
282
+
283
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/tools_env.txt > $TEST_log
284
+ expect_log " FOO=client_foo"
285
+ }
286
+
287
+ function test_redo_host_env_using_tools() {
288
+ export FOO=initial_foo
289
+ export UNRELATED=some_value
290
+ bazel build --host_action_env=FOO pkg:show_host_env_using_tools \
291
+ || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
292
+
293
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/tools_env.txt > $TEST_log
294
+ expect_log " FOO=initial_foo"
295
+
296
+ # If an unrelated value changes, we expect the action not to be executed again
297
+ export UNRELATED=some_other_value
298
+ bazel build --host_action_env=FOO -s pkg:show_host_env_using_tools 2> $TEST_log \
299
+ || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
300
+ expect_not_log ' ^SUBCOMMAND.*pkg:show_host_env_using_tools'
301
+
302
+ # However, if a used variable changes, we expect the change to be propagated
303
+ export FOO=changed_foo
304
+ bazel build --host_action_env=FOO -s pkg:show_host_env_using_tools 2> $TEST_log \
305
+ || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
306
+ expect_log ' ^SUBCOMMAND.*pkg:show_host_env_using_tools'
307
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/tools_env.txt > $TEST_log
308
+ expect_log " FOO=changed_foo"
309
+
310
+ # But repeating the build with no further changes, no action should happen
311
+ bazel build --host_action_env=FOO -s pkg:show_host_env_using_tools 2> $TEST_log \
312
+ || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
313
+ expect_not_log ' ^SUBCOMMAND.*pkg:show_host_env_using_tools'
314
+ }
315
+
316
+ function test_latest_wins_arg_using_tools() {
317
+ export FOO=bar
318
+ export BAR=baz
319
+ bazel build --host_action_env=BAR --host_action_env=FOO --host_action_env=FOO=foo \
320
+ pkg:show_host_env_using_tools || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
321
+
322
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/tools_env.txt > $TEST_log
323
+ expect_log " FOO=foo"
324
+ expect_log " BAR=baz"
325
+ expect_not_log " FOO=bar"
326
+ }
327
+
328
+ function test_latest_wins_env_using_tools() {
329
+ export FOO=bar
330
+ export BAR=baz
331
+ bazel build --host_action_env=BAR --host_action_env=FOO=foo --host_action_env=FOO \
332
+ pkg:show_host_env_using_tools || fail " ${PRODUCT_NAME} build show_host_env_using_tools failed"
333
+
334
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/tools_env.txt > $TEST_log
335
+ expect_log " FOO=bar"
336
+ expect_log " BAR=baz"
337
+ expect_not_log " FOO=foo"
338
+ }
339
+
340
+ function test_host_env_using_exec_tools_simple() {
341
+ export FOO=baz
342
+
343
+ # If FOO is passed using --host_action_env, it should be listed in host env vars
344
+ bazel build --host_action_env=FOO=bar pkg:show_host_env_using_exec_tools \
345
+ || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
346
+
347
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/exec_tools_env.txt > $TEST_log
348
+ expect_log " FOO=bar"
349
+
350
+ # But if FOO is passed using --action_env, it should not be listed in host env vars
351
+ bazel build --action_env=FOO=bar pkg:show_host_env_using_exec_tools \
352
+ || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
353
+
354
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/exec_tools_env.txt > $TEST_log
355
+ expect_not_log " FOO=bar"
356
+ }
357
+
358
+ function test_host_env_using_exec_tools_latest_wins() {
359
+ export FOO=environmentfoo
360
+ export BAR=environmentbar
361
+ bazel build --host_action_env=FOO=foo \
362
+ --host_action_env=BAR=willbeoverridden --host_action_env=BAR=bar pkg:show_host_env_using_exec_tools \
363
+ || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
364
+
365
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/exec_tools_env.txt > $TEST_log
366
+ expect_log " FOO=foo"
367
+ expect_log " BAR=bar"
368
+ }
369
+
370
+ function test_client_env_using_exec_tools() {
371
+ export FOO=startup_foo
372
+ bazel clean --expunge
373
+ bazel help build > /dev/null || fail " ${PRODUCT_NAME} help failed"
374
+ export FOO=client_foo
375
+ bazel build --host_action_env=FOO pkg:show_host_env_using_exec_tools || \
376
+ fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
377
+
378
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/exec_tools_env.txt > $TEST_log
379
+ expect_log " FOO=client_foo"
380
+ }
381
+
382
+ function test_redo_host_env_using_exec_tools() {
383
+ export FOO=initial_foo
384
+ export UNRELATED=some_value
385
+ bazel build --host_action_env=FOO pkg:show_host_env_using_exec_tools \
386
+ || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
387
+
388
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/exec_tools_env.txt > $TEST_log
389
+ expect_log " FOO=initial_foo"
390
+
391
+ # If an unrelated value changes, we expect the action not to be executed again
392
+ export UNRELATED=some_other_value
393
+ bazel build --host_action_env=FOO -s pkg:show_host_env_using_exec_tools 2> $TEST_log \
394
+ || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
395
+ expect_not_log ' ^SUBCOMMAND.*pkg:show_host_env_using_exec_tools'
396
+
397
+ # However, if a used variable changes, we expect the change to be propagated
398
+ export FOO=changed_foo
399
+ bazel build --host_action_env=FOO -s pkg:show_host_env_using_exec_tools 2> $TEST_log \
400
+ || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
401
+ expect_log ' ^SUBCOMMAND.*pkg:show_host_env_using_exec_tools'
402
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/exec_tools_env.txt > $TEST_log
403
+ expect_log " FOO=changed_foo"
404
+
405
+ # But repeating the build with no further changes, no action should happen
406
+ bazel build --host_action_env=FOO -s pkg:show_host_env_using_exec_tools 2> $TEST_log \
407
+ || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
408
+ expect_not_log ' ^SUBCOMMAND.*pkg:show_host_env_using_exec_tools'
409
+ }
410
+
411
+ function test_latest_wins_arg_using_exec_tools() {
412
+ export FOO=bar
413
+ export BAR=baz
414
+ bazel build --host_action_env=BAR --host_action_env=FOO --host_action_env=FOO=foo \
415
+ pkg:show_host_env_using_exec_tools || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
416
+
417
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/exec_tools_env.txt > $TEST_log
418
+ expect_log " FOO=foo"
419
+ expect_log " BAR=baz"
420
+ expect_not_log " FOO=bar"
421
+ }
422
+
423
+ function test_latest_wins_env_using_exec_tools() {
424
+ export FOO=bar
425
+ export BAR=baz
426
+ bazel build --host_action_env=BAR --host_action_env=FOO=foo --host_action_env=FOO \
427
+ pkg:show_host_env_using_exec_tools || fail " ${PRODUCT_NAME} build show_host_env_using_exec_tools failed"
428
+
429
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/exec_tools_env.txt > $TEST_log
430
+ expect_log " FOO=bar"
431
+ expect_log " BAR=baz"
432
+ expect_not_log " FOO=foo"
433
+ }
434
+
435
+ function test_host_env_using_successive_exec_tools_simple() {
436
+ export FOO=baz
437
+
438
+ bazel build --host_action_env=FOO=bar pkg:show_host_env_using_successive_exec_tools \
439
+ || fail " ${PRODUCT_NAME} build show_host_env_using_successive_exec_tool failed"
440
+
441
+ cat ` bazel info ${PRODUCT_NAME} -genfiles` /pkg/successive_exec_tools_env.txt > $TEST_log
442
+ expect_log " FOO=bar"
443
+ }
444
+
221
445
run_suite " Tests for bazel's handling of environment variables in actions"
0 commit comments