Skip to content

[8.6.0] Add --experimental_strict_repo_env option#28189

Merged
iancha1992 merged 1 commit intobazelbuild:release-8.6.0from
Silic0nS0ldier:strict-repo-env-bazel-8
Jan 13, 2026
Merged

[8.6.0] Add --experimental_strict_repo_env option#28189
iancha1992 merged 1 commit intobazelbuild:release-8.6.0from
Silic0nS0ldier:strict-repo-env-bazel-8

Conversation

@Silic0nS0ldier
Copy link
Copy Markdown
Contributor

This PR introduces a new flag --experimental_strict_repo_env which stops repository rules and module extensions from inheriting the client environment (making --repo_env=NAME more than just an advisory notice).

When enabled up to 2 environment variables will still be forwarded (unless overridden or explicitly removed via --repo_env==VARNAME, see

  • PATH - All platforms
  • PATHEXT - Windows

See test_execute_environment_strict_vars in
src/test/shell/bazel/starlark_repository_test.sh for a demonstration.

Note that the behavior is different to the similarly named --incompatible_strict_action_env, which stops all environment variables (--action_env affects actions with use_default_shell_env = True) except those specified within the defining rule. This is by design as repository rules operate in an inherently non-hermetic domain, covering roles such as integrating with the C/C++ toolchain installed on the host. It does not make sense to lock down environment variables by default, this is best left up to individual projects and users.

This flag is marked experimental to allow for testing and requirement discovery (e.g. env vars other than PATH that should be included).

Closes #10996

Closes #28188.

@Silic0nS0ldier
Copy link
Copy Markdown
Contributor Author

A lot changed between v9 and v8. I've yet to properly test the cherry-pick and may have missed some things, using CI to catch the obvious mistakes.

@Wyverald Wyverald changed the title [8.0.0] Add --experimental_strict_repo_env option [8.6.0] Add --experimental_strict_repo_env option Jan 8, 2026
@Silic0nS0ldier Silic0nS0ldier force-pushed the strict-repo-env-bazel-8 branch 2 times, most recently from 7b618c0 to 8654b9c Compare January 11, 2026 11:51
This PR introduces a new flag `--experimental_strict_repo_env` which
stops repository rules and module extensions from inheriting the client
environment (making `--repo_env=NAME` more than just an advisory
notice).

When enabled up to 2 environment variables will still be forwarded
(unless overridden or explicitly removed via `--repo_env==VARNAME`, see
- `PATH` - All platforms
- `PATHEXT` - Windows

See `test_execute_environment_strict_vars` in
`src/test/shell/bazel/starlark_repository_test.sh` for a demonstration.

Note that the behavior is different to the similarly named
`--incompatible_strict_action_env`, which stops _all_ environment
variables (`--action_env` affects actions with `use_default_shell_env =
True`) except those specified within the defining rule. This is by
design as repository rules operate in an inherently non-hermetic domain,
covering roles such as integrating with the C/C++ toolchain installed on
the host. It does not make sense to lock down environment variables _by
default_, this is best left up to individual projects and users.

This flag is marked experimental to allow for testing and requirement
discovery (e.g. env vars other than `PATH` that should be included).

Closes bazelbuild#10996

Closes bazelbuild#28188.
@Silic0nS0ldier Silic0nS0ldier force-pushed the strict-repo-env-bazel-8 branch from 8654b9c to 8795a5f Compare January 11, 2026 12:37
@Silic0nS0ldier Silic0nS0ldier marked this pull request as ready for review January 12, 2026 07:33
@Silic0nS0ldier Silic0nS0ldier requested a review from a team as a code owner January 12, 2026 07:33
@github-actions github-actions Bot added team-Configurability platforms, toolchains, cquery, select(), config transitions team-ExternalDeps External dependency handling, remote repositiories, WORKSPACE file. awaiting-review PR is awaiting review from an assigned reviewer labels Jan 12, 2026
@iancha1992 iancha1992 enabled auto-merge January 12, 2026 17:51
@iancha1992 iancha1992 added this pull request to the merge queue Jan 13, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jan 13, 2026
@Wyverald Wyverald added this pull request to the merge queue Jan 13, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jan 13, 2026
@iancha1992 iancha1992 added this pull request to the merge queue Jan 13, 2026
Merged via the queue into bazelbuild:release-8.6.0 with commit a7906f7 Jan 13, 2026
47 checks passed
@github-actions github-actions Bot removed the awaiting-review PR is awaiting review from an assigned reviewer label Jan 13, 2026
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Feb 27, 2026
### What does this PR do?
Bump `.bazelversion` from 8.5.1 to 8.6.0.

### Motivation
Selected changes between 8.5.1 and 8.6.0:
- Fix visibility for implicit deps of parent rules (bazelbuild/bazel#28722)
- Force rctx.{download_and,}extract to create user-readable files (bazelbuild/bazel#28551)
- Fix disk cache failures on concurrent read-write access on Windows (bazelbuild/bazel#28529)
- Add a target_type argument to ctx.actions.symlink (bazelbuild/bazel#28538)
- Compensate for Windows filesystems lacking junction support (bazelbuild/bazel#28367)
  (our fix)
- Add short_uncached and detailed_uncached options to --test_summary (bazelbuild/bazel#28343)
- Add --experimental_strict_repo_env option (bazelbuild/bazel#28189)
- Make overlaid files executable in http_archive (bazelbuild/bazel#28277)
- Add bazel mod show_repo --all_repos and --all_visible_repos (bazelbuild/bazel#28012)
- Enable --experimental_retain_test_configuration_across_testonly (bazelbuild/bazel#28115)
- Add option to continue with local execution if remote cache is unavailable (bazelbuild/bazel#28001)
gh-worker-dd-mergequeue-cf854d Bot pushed a commit to DataDog/datadog-agent that referenced this pull request Feb 27, 2026
### What does this PR do?
Bump `bazel` version from 8.5.1 to 8.6.0 to benefit from a series of improvements and fixes.
Ours (bazelbuild/bazel#28367) allows to re-enable "convenience symlinks" for Windows users and makes [`path.realpath`](https://bazel.build/rules/lib/builtins/path#realpath) succeed when sharing a folder between a Linux host and a Windows VM.

### Motivation
Selected changes between 8.5.1 and 8.6.0:
- 💡 bazelbuild/bazel#28001
- bazelbuild/bazel#28012
- 💡 bazelbuild/bazel#28189
- bazelbuild/bazel#28277
- bazelbuild/bazel#28343
- 🐕 bazelbuild/bazel#28367
- bazelbuild/bazel#28529
- bazelbuild/bazel#28538
- bazelbuild/bazel#28551
- bazelbuild/bazel#28722

Co-authored-by: regis.desgroppes <regis.desgroppes@datadoghq.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
Prevent ambient environment variables from leaking into repository
rules. Only PATH (and PATHEXT on Windows) plus variables explicitly
forwarded via --repo_env are now visible to repository rules.

Introduced in Bazel 8.6.0 (bazelbuild/bazel#28189), this is the
repository-rule counterpart to --incompatible_strict_action_env.

Also drop --incompatible_strict_action_env, which graduated to the
default in Bazel 9.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
Prevent ambient environment variables from leaking into repository
rules. Only PATH (and PATHEXT on Windows) plus variables explicitly
forwarded via --repo_env are now visible to repository rules.

Introduced in Bazel 8.6.0 (bazelbuild/bazel#28189), this is the
repository-rule counterpart to --incompatible_strict_action_env.

Also drop --incompatible_strict_action_env, which graduated to the
default in Bazel 9.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
Prevent ambient environment variables from leaking into repository
rules. Only PATH (and PATHEXT on Windows) plus variables explicitly
forwarded via --repo_env are now visible to repository rules.

Introduced in Bazel 8.6.0 (bazelbuild/bazel#28189), this is the
repository-rule counterpart to --incompatible_strict_action_env.

Also drop --incompatible_strict_action_env, which graduated to the
default in Bazel 9.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 9, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOMODCACHE` and `XDG_CACHE_HOME` to all platforms via
`--repo_env`, as `tools/bazel` sets both and repo rules rely on
them. On Windows, also forward `GOCACHE`, `PIP_CACHE_DIR`, and
`VSTUDIO_ROOT`.

Drop `"GOPATH": None` and `"GOROOT": None` from the `go_fast` and
`go_sdk_overrides` environment dicts: the flag already strips these
from the repo-rule environment, making explicit unsetting redundant.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(11d1293), whose commit message identified this flag as the
intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?
Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only PATH
(and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the default
in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all platforms
via `--repo_env`.
On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`, `SYSTEMDRIVE`
(needed by vswhere to locate the VS installer instance database),
`SYSTEMROOT` (needed by COM to load system DLLs), and `USERPROFILE`
(needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`:
- on Linux, Go derives `GOCACHE` from `XDG_CACHE_HOME` so unsetting it
  was fine - neutral,
- macOS does not honor XDG, so strict `repo_env` (which strips `HOME`)
  exposed the gap - fixed,
- on Windows, `GOCACHE` was already set in the XDG branch but via
  `%XDG_CACHE_HOME%` (parse-time expansion) rather than
  `!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
  before `XDG_CACHE_HOME` was normalised - fixed.

When `XDG_CACHE_HOME` is absent, forward `GOCACHE` and `GOMODCACHE` to
their official defaults, so Go repo rules always receive non-empty
values for both.

What's mentioned above allows to drop null environment overrides
(`"GOPATH": None` from both `go_fast` and `go_sdk_overrides`,
`"GOROOT": None` from `go_sdk_overrides` only): the flag already strips
these from the repo-rule environment, making explicit unsetting
redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, which:
- fixes a pre-existing `fail()` format bug,
- includes `stdout` in the error message automatically (`vswhere` prints
  to it),
- overall bring a more actionable error output.

Finally, remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(follow-up of #49125).

### Motivation
Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence.
The `ANDROID_HOME` issue (`rules_android` generating a full
`@androidsdk` repo referencing the Bazel-9-removed `CcInfo` global) is
one concrete instance.

### Describe how you validated your changes
- local Windows VM,
- CI.

### Additional Notes
- bazelbuild/bazel#27670
- bazelbuild/bazel#28189
- #48032
- #49125
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 10, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 11, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 13, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 13, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 13, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 13, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 13, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 14, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rdesgroppes added a commit to DataDog/datadog-agent that referenced this pull request Apr 14, 2026
### What does this PR do?

Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only
PATH (and PATHEXT on Windows) plus variables explicitly forwarded via
`--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the
default in Bazel 9.

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all
platforms via `--repo_env`. Forward `DEPLOY_AGENT`,
`FORCED_PACKAGE_COMPRESSION_LEVEL`, `PACKAGE_VERSION`, and `SIGN_MAC`
so that `@agent_volatile//:env_vars.bzl` continues to see them (they
are read at Starlark load time and cannot be replaced with build
flags). On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`,
`SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance
database), `SYSTEMROOT` (needed by COM to load system DLLs), and
`USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`: on Linux, Go derives
`GOCACHE` from `XDG_CACHE_HOME` so unsetting it was fine; macOS does
not honour XDG, so strict repo env (which strips `HOME`) exposed the
gap. On Windows, `GOCACHE` was already set in the XDG branch but via
`%XDG_CACHE_HOME%` (parse-time expansion) rather than
`!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes
before `XDG_CACHE_HOME` was normalised.

Add an else branch to `tools/bazel[.bat]` forwarding `GOCACHE` and
`GOMODCACHE` to their official defaults when `XDG_CACHE_HOME` is
absent, so repo rules always receive non-empty values for both.

Drop null environment overrides (`"GOPATH": None` from both `go_fast`
and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides`
only): the flag already strips these from the repo-rule environment,
making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()`
to `repo_utils.execute_checked()`, fixing a pre-existing `fail()`
format bug and including stdout+stderr in error output automatically.

Remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]`
(#49125), whose commit message identified this
flag as the intended fix.

### Motivation

Without this flag, any variable set on the host leaks silently into
repository rules, causing non-reproducible builds and cross-platform
divergence. The ANDROID_HOME issue (rules_android generating a full
@AndroidSDK repo referencing the Bazel-9-removed CcInfo global) is
one concrete instance; GOMODCACHE leaking into go_fast is another.

### Describe how you validated your changes

CI.

### Additional Notes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gh-worker-dd-mergequeue-cf854d Bot pushed a commit to DataDog/datadog-agent that referenced this pull request Apr 14, 2026
### What does this PR do?
Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only PATH (and PATHEXT on Windows) plus variables explicitly forwarded via `--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the default in Bazel 9 (bazelbuild/bazel#27670).

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all platforms via `--repo_env`, as well as `Environment values available for packaging`:
https://github.com/DataDog/datadog-agent/blob/fa38b7e14170db0f6bfed0208493b76916c04731/MODULE.bazel#L7-L23
On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`, `SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance database), `SYSTEMROOT` (needed by COM to load system DLLs), and `USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`:
- on Linux, Go derives `GOCACHE` from `XDG_CACHE_HOME` so having it unset or set to the same derived value is **neutral**,
- on macOS, Go doesn't happen to honor XDG yet, so strict `repo_env` (which strips `HOME`) exposed the gap, which is now **fixed**,
- on Windows, `GOCACHE` was already set in the XDG branch but via `%XDG_CACHE_HOME%` (parse-time expansion) rather than `!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes before `XDG_CACHE_HOME` was normalised - also **fixed**.

When `XDG_CACHE_HOME` is absent, forward `GOCACHE` and `GOMODCACHE` (to their official defaults unless explicitly set at user's discretion), so Go repo rules always receive non-empty values for both.

What's mentioned above allows to drop null environment overrides (`"GOPATH": None` from both `go_fast` and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides` only): the flag already strips these from the repo-rule environment, making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()` to `repo_utils.execute_checked()`, which:
- fixes a pre-existing `fail()` format bug,
- includes `stdout` in the error message automatically (`vswhere` prints to it),
- overall brings a more actionable error output.

Finally, remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]` (follow-up of #49125).

### Motivation
Without this flag, any variable set on the host leaks silently into repository rules, causing non-reproducible builds and cross-platform divergence, leading to adhoc fixes like bazelbuild/bazel#27670 or bazelbuild/bazel#28189.

We don't want that to happen again which means no variables other than explicitly allow-listed should spuriously alter repositories rules.

:bulb: Users still have the option to pass additional `--repo_env` parameters to `bazel` on their end should they need: corporate proxy, etc.

### Describe how you validated your changes
- local Windows VM,
- CI.

### Additional Notes
- bazelbuild/bazel#27670
- bazelbuild/bazel#28189
- #48032
- #49125

Co-authored-by: regis.desgroppes <regis.desgroppes@datadoghq.com>
aiuto pushed a commit to DataDog/datadog-agent that referenced this pull request Apr 14, 2026
### What does this PR do?
Add `--experimental_strict_repo_env` (bazelbuild/bazel#28189): only PATH (and PATHEXT on Windows) plus variables explicitly forwarded via `--repo_env` are now visible to repository rules.

Drop `--incompatible_strict_action_env`, which graduated to the default in Bazel 9 (bazelbuild/bazel#27670).

Forward `GOCACHE`, `GOMODCACHE`, and `XDG_CACHE_HOME` to all platforms via `--repo_env`, as well as `Environment values available for packaging`:
https://github.com/DataDog/datadog-agent/blob/fa38b7e14170db0f6bfed0208493b76916c04731/MODULE.bazel#L7-L23
On Windows, also forward `PIP_CACHE_DIR`, `VSTUDIO_ROOT`, `SYSTEMDRIVE` (needed by vswhere to locate the VS installer instance database), `SYSTEMROOT` (needed by COM to load system DLLs), and `USERPROFILE` (needed by git to fetch repositories).

Explicitly set `GOCACHE` in `tools/bazel[.bat]`:
- on Linux, Go derives `GOCACHE` from `XDG_CACHE_HOME` so having it unset or set to the same derived value is **neutral**,
- on macOS, Go doesn't happen to honor XDG yet, so strict `repo_env` (which strips `HOME`) exposed the gap, which is now **fixed**,
- on Windows, `GOCACHE` was already set in the XDG branch but via `%XDG_CACHE_HOME%` (parse-time expansion) rather than `!XDG_CACHE_HOME!` (delayed), yielding a path with forward slashes before `XDG_CACHE_HOME` was normalised - also **fixed**.

When `XDG_CACHE_HOME` is absent, forward `GOCACHE` and `GOMODCACHE` (to their official defaults unless explicitly set at user's discretion), so Go repo rules always receive non-empty values for both.

What's mentioned above allows to drop null environment overrides (`"GOPATH": None` from both `go_fast` and `go_sdk_overrides`, `"GOROOT": None` from `go_sdk_overrides` only): the flag already strips these from the repo-rule environment, making explicit unsetting redundant.

Switch `_get_vs_property()` in `visual_studio.bzl` from `ctx.execute()` to `repo_utils.execute_checked()`, which:
- fixes a pre-existing `fail()` format bug,
- includes `stdout` in the error message automatically (`vswhere` prints to it),
- overall brings a more actionable error output.

Finally, remove the `ANDROID_HOME` workaround from `tools/bazel[.bat]` (follow-up of #49125).

### Motivation
Without this flag, any variable set on the host leaks silently into repository rules, causing non-reproducible builds and cross-platform divergence, leading to adhoc fixes like bazelbuild/bazel#27670 or bazelbuild/bazel#28189.

We don't want that to happen again which means no variables other than explicitly allow-listed should spuriously alter repositories rules.

:bulb: Users still have the option to pass additional `--repo_env` parameters to `bazel` on their end should they need: corporate proxy, etc.

### Describe how you validated your changes
- local Windows VM,
- CI.

### Additional Notes
- bazelbuild/bazel#27670
- bazelbuild/bazel#28189
- #48032
- #49125

Co-authored-by: regis.desgroppes <regis.desgroppes@datadoghq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

team-Configurability platforms, toolchains, cquery, select(), config transitions team-ExternalDeps External dependency handling, remote repositiories, WORKSPACE file.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants