diff --git a/.bazelrc b/.bazelrc index ee88287598..8151ec3362 100644 --- a/.bazelrc +++ b/.bazelrc @@ -62,10 +62,9 @@ common --disk_cache=~/.cache/bazel/bazel-disk-cache common --repository_cache=~/.cache/bazel/bazel-repo-cache # Hardlinks save disk space and copy time when unpacking repositories common --experimental_repository_cache_hardlinks=true +import %workspace%/downloader_cfg.bazelrc # Drop `experimental_` prefix once Bazel 7 is no longer supported common --experimental_downloader_config=downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 # BazelCI's default and RBE bzlmod jobs pass --config=ci; see # .bazelci/presubmit.yml. diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index aa0986752c..c7f9e8ac68 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -72,7 +72,7 @@ repos: name: Sync downloader configs language: system entry: ./dev/sync_downloader_configs.py - files: downloader_config\.cfg$ + files: (downloader_config\.cfg|downloader_cfg\.bazelrc)$ pass_filenames: false - id: gazelle name: Run Gazelle diff --git a/BUILD.bazel b/BUILD.bazel index 6e0884f25c..53f0f663c2 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -82,6 +82,7 @@ filegroup( "MODULE.bazel", "WORKSPACE", "WORKSPACE.bzlmod", + "downloader_cfg.bazelrc", "downloader_config.cfg", "internal_dev_deps.bzl", "internal_dev_setup.bzl", diff --git a/dev/sync_downloader_configs.py b/dev/sync_downloader_configs.py index d0c4032867..2109a0dd09 100755 --- a/dev/sync_downloader_configs.py +++ b/dev/sync_downloader_configs.py @@ -1,17 +1,26 @@ #!/usr/bin/env python3 -"""Synchronizes downloader_config.cfg across subworkspaces. +"""Synchronizes Bazel downloader configuration files across subworkspaces. Usage: ./dev/sync_downloader_configs.py -Copies the root `downloader_config.cfg` (Bazel downloader rewrite rules) to each -standalone module subworkspace and exits with status 1 if any file was updated. +Copies root downloader configuration files (Bazel downloader rewrite rules and +flags) to each standalone module subworkspace and exits with status 1 if any +file was updated. """ import sys from pathlib import Path +# Config filenames relative to a module root directory. +_SYNCED_FILES = ( + # keep-sorted start + "downloader_cfg.bazelrc", + "downloader_config.cfg", + # keep-sorted end +) + # Standalone module subworkspace paths relative to the repository root. _SUBWORKSPACE_DIRS = ( # keep-sorted start @@ -23,18 +32,20 @@ def main() -> None: repo_root = Path(__file__).resolve().parent.parent - canonical = repo_root / "downloader_config.cfg" - canonical_content = canonical.read_text(encoding="utf-8") - - changed = False - for rel_dir in _SUBWORKSPACE_DIRS: - sub = repo_root / rel_dir / "downloader_config.cfg" - if sub.read_text(encoding="utf-8") != canonical_content: - sub.write_text(canonical_content, encoding="utf-8") - print(f"Updated {sub.relative_to(repo_root)}") - changed = True - - if changed: + + updated: list[str] = [] + for filename in _SYNCED_FILES: + canonical = repo_root / filename + canonical_content = canonical.read_text(encoding="utf-8") + for rel_dir in _SUBWORKSPACE_DIRS: + sub = repo_root / rel_dir / filename + if sub.read_text(encoding="utf-8") != canonical_content: + sub.write_text(canonical_content, encoding="utf-8") + updated.append(sub.relative_to(repo_root).as_posix()) + + if updated: + for rel_path in sorted(updated): + print(f"{rel_path}: out of sync (updated from root)") sys.exit(1) diff --git a/downloader_cfg.bazelrc b/downloader_cfg.bazelrc new file mode 100644 index 0000000000..1dc991c6b7 --- /dev/null +++ b/downloader_cfg.bazelrc @@ -0,0 +1,6 @@ +# Mitigate transient CI network failures via increased HTTP timeouts and retries. +# Note: --experimental_downloader_config is set per workspace depth because +# Bazel 10+ treats --downloader_config as allowMultiple=true (accumulating all +# passed paths) and resolves relative paths against the active workspace root. +common --http_timeout_scaling=10.0 +common --experimental_repository_downloader_retries=10 diff --git a/examples/build_file_generation/.bazelrc b/examples/build_file_generation/.bazelrc index 5a3f4d8d59..060ce1d555 100644 --- a/examples/build_file_generation/.bazelrc +++ b/examples/build_file_generation/.bazelrc @@ -9,7 +9,4 @@ common --noenable_bzlmod common --enable_workspace common --incompatible_python_disallow_native_rules common --incompatible_default_to_explicit_init_py -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/examples/bzlmod/.bazelrc b/examples/bzlmod/.bazelrc index 9c9e211a70..68578a8e16 100644 --- a/examples/bzlmod/.bazelrc +++ b/examples/bzlmod/.bazelrc @@ -24,7 +24,4 @@ test --test_output=errors --enable_runfiles # Windows requires these for multi-python support: build --enable_runfiles common:bazel7.x --incompatible_python_disallow_native_rules -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/examples/downloader_cfg.bazelrc b/examples/downloader_cfg.bazelrc new file mode 100644 index 0000000000..65527b412c --- /dev/null +++ b/examples/downloader_cfg.bazelrc @@ -0,0 +1,4 @@ +import %workspace%/../../downloader_cfg.bazelrc +# Bazel resolves --experimental_downloader_config relative to the active +# workspace directory rather than the imported .bazelrc file's directory. +common --experimental_downloader_config=../../downloader_config.cfg diff --git a/examples/multi_python_versions/.bazelrc b/examples/multi_python_versions/.bazelrc index 4c278aa448..1c91c35260 100644 --- a/examples/multi_python_versions/.bazelrc +++ b/examples/multi_python_versions/.bazelrc @@ -5,7 +5,4 @@ build --enable_runfiles coverage --java_runtime_version=remotejdk_11 common:bazel7.x --incompatible_python_disallow_native_rules -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/examples/pip_parse/.bazelrc b/examples/pip_parse/.bazelrc index 8345451943..ec6a09e1d5 100644 --- a/examples/pip_parse/.bazelrc +++ b/examples/pip_parse/.bazelrc @@ -1,8 +1,5 @@ common --incompatible_python_disallow_native_rules -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc # https://docs.bazel.build/versions/main/best-practices.html#using-the-bazelrc-file try-import %workspace%/user.bazelrc diff --git a/examples/pip_parse_vendored/.bazelrc b/examples/pip_parse_vendored/.bazelrc index c8898a1125..3aa3fcc8b0 100644 --- a/examples/pip_parse_vendored/.bazelrc +++ b/examples/pip_parse_vendored/.bazelrc @@ -8,7 +8,4 @@ build --enable_runfiles common --noenable_bzlmod common --enable_workspace common --incompatible_python_disallow_native_rules -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/gazelle/.bazelrc b/gazelle/.bazelrc index c098d0c392..70c94b38b0 100644 --- a/gazelle/.bazelrc +++ b/gazelle/.bazelrc @@ -1,8 +1,7 @@ common --deleted_packages=examples/bzlmod_build_file_generation common --deleted_packages=examples/bzlmod_build_file_generation/runfiles +import %workspace%/downloader_cfg.bazelrc common --experimental_downloader_config=downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 test --test_output=errors diff --git a/gazelle/downloader_cfg.bazelrc b/gazelle/downloader_cfg.bazelrc new file mode 100644 index 0000000000..1dc991c6b7 --- /dev/null +++ b/gazelle/downloader_cfg.bazelrc @@ -0,0 +1,6 @@ +# Mitigate transient CI network failures via increased HTTP timeouts and retries. +# Note: --experimental_downloader_config is set per workspace depth because +# Bazel 10+ treats --downloader_config as allowMultiple=true (accumulating all +# passed paths) and resolves relative paths against the active workspace root. +common --http_timeout_scaling=10.0 +common --experimental_repository_downloader_retries=10 diff --git a/gazelle/examples/bzlmod_build_file_generation/.bazelrc b/gazelle/examples/bzlmod_build_file_generation/.bazelrc index 07fefcd7b5..79a242161e 100644 --- a/gazelle/examples/bzlmod_build_file_generation/.bazelrc +++ b/gazelle/examples/bzlmod_build_file_generation/.bazelrc @@ -15,7 +15,5 @@ common:bazel7.x --incompatible_python_disallow_native_rules # and the bazel_dep version of rules_python is used. common --override_module=rules_python=../../../ -# Mitigate transient CI network failures via mirror fallback and retries. +import %workspace%/../../downloader_cfg.bazelrc common --experimental_downloader_config=../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 diff --git a/sphinxdocs/.bazelrc b/sphinxdocs/.bazelrc index 6989c2656a..a7348a94aa 100644 --- a/sphinxdocs/.bazelrc +++ b/sphinxdocs/.bazelrc @@ -15,9 +15,8 @@ build --enable_runfiles # Local disk cache greatly speeds up builds if the regular cache is lost common --disk_cache=~/.cache/bazel/bazel-disk-cache +import %workspace%/downloader_cfg.bazelrc common --experimental_downloader_config=downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 common --incompatible_python_disallow_native_rules common --incompatible_no_implicit_file_export diff --git a/sphinxdocs/downloader_cfg.bazelrc b/sphinxdocs/downloader_cfg.bazelrc new file mode 100644 index 0000000000..1dc991c6b7 --- /dev/null +++ b/sphinxdocs/downloader_cfg.bazelrc @@ -0,0 +1,6 @@ +# Mitigate transient CI network failures via increased HTTP timeouts and retries. +# Note: --experimental_downloader_config is set per workspace depth because +# Bazel 10+ treats --downloader_config as allowMultiple=true (accumulating all +# passed paths) and resolves relative paths against the active workspace root. +common --http_timeout_scaling=10.0 +common --experimental_repository_downloader_retries=10 diff --git a/sphinxdocs/integration_tests/bcr/.bazelrc b/sphinxdocs/integration_tests/bcr/.bazelrc index 00f22169a1..a13a863683 100644 --- a/sphinxdocs/integration_tests/bcr/.bazelrc +++ b/sphinxdocs/integration_tests/bcr/.bazelrc @@ -1,4 +1,2 @@ -# Mitigate transient CI network failures via mirror fallback and retries. +import %workspace%/../../downloader_cfg.bazelrc common --experimental_downloader_config=../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 diff --git a/sphinxdocs/integration_tests/persistent_worker/workspace/.bazelrc b/sphinxdocs/integration_tests/persistent_worker/workspace/.bazelrc index f9588a5c51..00b0d5e951 100644 --- a/sphinxdocs/integration_tests/persistent_worker/workspace/.bazelrc +++ b/sphinxdocs/integration_tests/persistent_worker/workspace/.bazelrc @@ -2,7 +2,6 @@ # directly to the running persistent worker instead of restoring pre-built HTML cache results across test steps. common --disk_cache= build --noremote_accept_cached -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../../../downloader_cfg.bazelrc common --experimental_downloader_config=../../../downloader_config.cfg common --lockfile_mode=off diff --git a/tests/integration/bzlmod_lockfile/.bazelrc b/tests/integration/bzlmod_lockfile/.bazelrc index 24b9e0031a..ba1a8f84a9 100644 --- a/tests/integration/bzlmod_lockfile/.bazelrc +++ b/tests/integration/bzlmod_lockfile/.bazelrc @@ -4,10 +4,7 @@ build --enable_runfiles common --lockfile_mode=error common --experimental_isolated_extension_usages -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc # https://docs.bazel.build/versions/main/best-practices.html#using-the-bazelrc-file try-import %workspace%/user.bazelrc diff --git a/tests/integration/compile_pip_requirements/.bazelrc b/tests/integration/compile_pip_requirements/.bazelrc index ade2d41d16..07344a2e23 100644 --- a/tests/integration/compile_pip_requirements/.bazelrc +++ b/tests/integration/compile_pip_requirements/.bazelrc @@ -3,7 +3,4 @@ test --test_output=errors # Windows requires these for multi-python support: build --enable_runfiles common:bazel7.x --incompatible_python_disallow_native_rules -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/compile_pip_requirements_test_from_external_repo/.bazelrc b/tests/integration/compile_pip_requirements_test_from_external_repo/.bazelrc index 77ca1c53d0..a95598e1cb 100644 --- a/tests/integration/compile_pip_requirements_test_from_external_repo/.bazelrc +++ b/tests/integration/compile_pip_requirements_test_from_external_repo/.bazelrc @@ -1,6 +1,3 @@ test --test_output=errors common:bazel7.x --incompatible_python_disallow_native_rules -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/custom_commands/.bazelrc b/tests/integration/custom_commands/.bazelrc index f94c2d7ae2..50619c914b 100644 --- a/tests/integration/custom_commands/.bazelrc +++ b/tests/integration/custom_commands/.bazelrc @@ -1,4 +1 @@ -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/downloader_cfg.bazelrc b/tests/integration/downloader_cfg.bazelrc new file mode 100644 index 0000000000..ea57707bb8 --- /dev/null +++ b/tests/integration/downloader_cfg.bazelrc @@ -0,0 +1,4 @@ +import %workspace%/../../../downloader_cfg.bazelrc +# Bazel resolves --experimental_downloader_config relative to the active +# workspace directory rather than the imported .bazelrc file's directory. +common --experimental_downloader_config=../../../downloader_config.cfg diff --git a/tests/integration/integration_test.bzl b/tests/integration/integration_test.bzl index f8e8814a7e..165c97d52f 100644 --- a/tests/integration/integration_test.bzl +++ b/tests/integration/integration_test.bzl @@ -101,6 +101,7 @@ def rules_python_integration_test( native.filegroup( name = name + "_workspace_files", srcs = workspace_files + [ + "downloader_cfg.bazelrc", "//:distribution", ], ) diff --git a/tests/integration/local_toolchains/.bazelrc b/tests/integration/local_toolchains/.bazelrc index 6e4b258404..c7b32916aa 100644 --- a/tests/integration/local_toolchains/.bazelrc +++ b/tests/integration/local_toolchains/.bazelrc @@ -8,7 +8,4 @@ build --enable_runfiles common:bazel7.x --incompatible_python_disallow_native_rules build --//:py=local common --announce_rc -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/pip_parse/.bazelrc b/tests/integration/pip_parse/.bazelrc index d657707c2d..bd113c8901 100644 --- a/tests/integration/pip_parse/.bazelrc +++ b/tests/integration/pip_parse/.bazelrc @@ -2,10 +2,7 @@ build --enable_runfiles common:bazel7.x --incompatible_python_disallow_native_rules -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc # https://docs.bazel.build/versions/main/best-practices.html#using-the-bazelrc-file try-import %workspace%/user.bazelrc diff --git a/tests/integration/pip_parse_isolated/.bazelrc b/tests/integration/pip_parse_isolated/.bazelrc index 3dc2941077..cccd8b612c 100644 --- a/tests/integration/pip_parse_isolated/.bazelrc +++ b/tests/integration/pip_parse_isolated/.bazelrc @@ -3,10 +3,7 @@ build --enable_runfiles common --experimental_isolated_extension_usages -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc # https://docs.bazel.build/versions/main/best-practices.html#using-the-bazelrc-file try-import %workspace%/user.bazelrc diff --git a/tests/integration/prebuilt_toolchain/.bazelrc b/tests/integration/prebuilt_toolchain/.bazelrc index cc0428f57c..9561bb8a34 100644 --- a/tests/integration/prebuilt_toolchain/.bazelrc +++ b/tests/integration/prebuilt_toolchain/.bazelrc @@ -1,7 +1,4 @@ common --lockfile_mode=off test --test_output=errors build --enable_runfiles -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/py_cc_toolchain_registered/.bazelrc b/tests/integration/py_cc_toolchain_registered/.bazelrc index 98130653a5..c6dd0b6e3c 100644 --- a/tests/integration/py_cc_toolchain_registered/.bazelrc +++ b/tests/integration/py_cc_toolchain_registered/.bazelrc @@ -1,7 +1,4 @@ # This aids debugging on failure build --toolchain_resolution_debug=python common:bazel7.x --incompatible_python_disallow_native_rules -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/runtime_manifests/.bazelrc b/tests/integration/runtime_manifests/.bazelrc index dace6e8554..12fbfccaaf 100644 --- a/tests/integration/runtime_manifests/.bazelrc +++ b/tests/integration/runtime_manifests/.bazelrc @@ -2,7 +2,4 @@ common:fast-tests --build_tests_only=true common:fast-tests --build_tag_filters=-large,-enormous,-integration-test common:fast-tests --test_tag_filters=-large,-enormous,-integration-test -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/toolchain_target_settings/.bazelrc b/tests/integration/toolchain_target_settings/.bazelrc index cc0428f57c..9561bb8a34 100644 --- a/tests/integration/toolchain_target_settings/.bazelrc +++ b/tests/integration/toolchain_target_settings/.bazelrc @@ -1,7 +1,4 @@ common --lockfile_mode=off test --test_output=errors build --enable_runfiles -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/unified_pypi/.bazelrc b/tests/integration/unified_pypi/.bazelrc index 9d5a82051c..af013a2abe 100644 --- a/tests/integration/unified_pypi/.bazelrc +++ b/tests/integration/unified_pypi/.bazelrc @@ -1,5 +1,2 @@ common --experimental_enable_bzlmod -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/uv_lock/.bazelrc b/tests/integration/uv_lock/.bazelrc index 91159eb443..101d321f43 100644 --- a/tests/integration/uv_lock/.bazelrc +++ b/tests/integration/uv_lock/.bazelrc @@ -1,9 +1,6 @@ build --enable_runfiles common --experimental_isolated_extension_usages common --action_env=UV_EXTRA_INDEX_URL -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc try-import %workspace%/user.bazelrc diff --git a/tests/integration/validate_test_main/.bazelrc b/tests/integration/validate_test_main/.bazelrc index f94c2d7ae2..50619c914b 100644 --- a/tests/integration/validate_test_main/.bazelrc +++ b/tests/integration/validate_test_main/.bazelrc @@ -1,4 +1 @@ -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc diff --git a/tests/integration/whl_library/.bazelrc b/tests/integration/whl_library/.bazelrc index e0f969aed0..3737ead458 100644 --- a/tests/integration/whl_library/.bazelrc +++ b/tests/integration/whl_library/.bazelrc @@ -1,6 +1,3 @@ common --incompatible_default_to_explicit_init_py test --test_output=errors -# Mitigate transient CI network failures via mirror fallback and retries. -common --experimental_downloader_config=../../../downloader_config.cfg -common --http_timeout_scaling=10.0 -common --experimental_repository_downloader_retries=10 +import %workspace%/../downloader_cfg.bazelrc