What's New in Bazel 5.0
Bazel 5.0 includes nearly 3,000 changes since 4.2.2. It's the first major release since 4.0 was release in January of last year, and it's Bazel's second LTS release. Since there were so many changes, many of them quite impactful, I felt I needed to review them all and provide a nice summary for y'all. So that's what I did π.
The end result was quite big though, so I've included a table of contents to allow easy navigation to the changes that interest you the most:
Command-line flag changesβ
Bazel's LTS strategy allows for breaking changes between major versions. In particular, it allows for command-line flags to be removed, renamed, made to do nothing, or have their default values changed. In the following sections I collected all such flag changes I could find.
Renamedβ
--incompatible_use_lexicographical_unordered_output
is now--incompatible_lexicographical_output
. (2ee3c2b)--experimental_run_validations
is now--run_validations
. (374cb1f)--experimental_existing_rules_immutable_view
is now--incompatible_existing_rules_immutable_view
. (3518200)--project_id
is now--bes_instance_name
. (2b48c6b)
Default values changedβ
--analysis_testing_deps_limit=800
(de3b3ca)--experimental_enable_aggregating_middleman=false
(64d5bae)--experimental_exec_groups=true
(fa4e14b)--experimental_forward_instrumented_files_info_by_default=true
(5b216b2)--experimental_jlpl_enforce_strict_deps=true
(0c1257e)--experimental_no_product_name_out_symlink=true
(06bd3e8)--experimental_profile_cpu_usage=true
(f56b134)--experimental_skyframe_cpu_heavy_skykeys_thread_pool_size=HOST_CPUS
(38dd8aa)--include_aspect=true
(44e46b8)--incompatible_disable_depset_items=true
(ef967be)--incompatible_disallow_resource_jars=true
(fec2fdb)--incompatible_disallow_strict_deps_for_jlpl=true
(10b3479)--incompatible_display_source_file_location=true
(32721fb)--incompatible_java_common_parameters=true
(cfaa88b)--incompatible_override_toolchain_transition
(4b47d6f)--incompatible_require_javaplugininfo_in_javacommon=true
(1c062e2)--incompatible_top_level_aspects_dependency=true
(9a765c8)--incompatible_use_toolchain_resolution_for_java_rules=true
(c2485f6)--trim_test_configuration=true
(ebac27e)
Deprecatedβ
--bep_publish_used_heap_size_post_build
(a512791)--experimental_force_gc_after_build
(ae2a6a2)--experimental_required_aspects
(88a02cd)--{,no}experimental_send_archived_tree_artifact_inputs
(37115a5)--experimental_spawn_scheduler
(b41576b)--watchfs
(03bd0eb)
No-opβ
These flags now do nothing, but still exist to allow for migration off of them:
--all_incompatible_changes
(7300231)--bep_publish_used_heap_size_post_build
(d9a523e)--check_constraint
(d623892)--experimental_cc_skylark_api_enabled_packages
(ba258e8)--experimental_force_gc_after_build
(cdeb49f)--{experimental_,}json_trace_compression
(8d39164)--experimental_shadowed_action
(3e8cda1)--experimental_skyframe_eval_with_ordered_list
(35ef799)--experimental_starlark_config_transitions
(6619d77)--experimental_multi_threaded_digest
(6ac6954)--experimental_profile_cpu_usage
(3c5e531)--incompatible_applicable_licenses
(af3add8)--incompatible_dont_collect_so_artifacts
(144a62a)--incompatible_load_python_rules
(253933f)--incompatible_use_toolchain_resolution_for_java_rules
(5b8f054)--legacy_dynamic_scheduler
(5b04895)--use_singlejar_apkbuilder
(b213637)
Removedβ
--apple_sdk
(166771e)--bep_publish_used_heap_size_post_build
(6555d95)--enable_apple_binary_native_protos
(3135f49)--enable_runfiles
(5a91c25)--experimental_dynamic_configs
(e68a7d0)--experimental_enable_aggregating_middleman
(e956469)--experimental_exec_groups
(3973b5f)--experimental_forward_instrumented_files_info_by_default
(c411d9a)--experimental_interleave_loading_and_analysis
(544b51d)--experimental_nested_set_as_skykey_threshold
(359ceb4)--experimental_no_product_name_out_symlink
(b621b1b)--experimental_objc_enable_module_maps
(427b4dd)--experimental_query_failure_exit_code_behavior
(c1695ef)--experimental_starlark_config_transitions
(28a1e6e)--experimental_ui_mode
(5752762)--incompatible_enable_execution_transition
(f0c6eab)--incompatible_ignore_duplicate_top_level_aspects
(ed25118)--incompatible_objc_compile_info_migration
(bcdd55d)--incompatible_objc_provider_remove_compile_info
(952c0d7)--incompatible_prefer_unordered_output
(e7202e3)--incompatible_prohibit_aapt1
(aefd107)--incompatible_require_java_toolchain_header_compiler_direct
(f9db4fb)--is_stderr_atty
(4d9c6f9)--javabase
and--java_toolchain
(e1c404e)
Remoteβ
One of Bazel's most powerful features is its ability to use remote caching and remote execution. Numerous improvements and fixes to Bazel's remote capabilities are included in Bazel 5.0.
gRPCβ
Bazel uses gRPC as a protocol for most of its remote capabilities. There were a couple changes that applied at this foundational level:
- Added mnemonic and label to remote cache and remote execution requests. (a750a56)
- Bazel no longer crashes on errors returned while creating a gRPC connection. (b0ae0af)
Remote caching (RBC)β
Using a remote cache is one of the most popular ways of speeding up a Bazel build. Thankfully these changes make using a remote cache both more performant and more reliable:
- Added the
--experimental_remote_cache_compression
flag, which compresses gRPC uploads/downloads. (50274a9) - Added the
--experimental_remote_cache_async
flag, which makes uploads happen in the background. (7f08b78) - Added the
--experimental_remote_merkle_tree_cache
flag, which can speed up action cache hit checking. (3947c83) - Added the
--experimental_action_cache_store_output_metadata
flag, which can speed up Remote Build without the Bytes after a Bazel server restart. (4e29042) - Added the
no-remote-cache-upload
tag, which allows downloading, but not uploading, outputs from the remote cache. (bfc2413) - Reduced
FindMissingBlobs
calls when using a combined cache. (dc32f0b) FindMissingBlobs
calls and file uploads are now deduplicated. (db15e47)- Fixed "file not found" errors when remote cache is changed from enabled to disabled. (f948989)
chmod 0555
is now consistently set on outputs. (11066c7)
Remote execution (RBE)β
For some projects, using remote execution is the ultimate performance unlock for their Bazel builds. In addition to the remote caching changes covered above, which also apply to remote execution, the following changes improve the remote execution experience:
- Added the
--experimental_dynamic_skip_first_build
flag, which skips dynamic execution until there has been a successful build. (1e42b94) - Improved debug output when using the
--experimental_debug_spawn_scheduler
flag. (060d596) - Improved performance of workers when using dynamic execution. (6080c1e)
- Improved dynamic execution's local execution delay logic. (04754ef)
- The disk cache can now be used with remote execution. (cf57d03)
- Target-level
exec_properties
now merge with values from--remote_default_exec_properties
. (713abde) - Failure messages from remote execution are now propagated. (399a5be)
Build Event Service (BES)β
Using a build event service can give you unparalleled insight into your Bazel builds at scale. There were some nice changes to BES support, though I think the improvements to how it interacts with the remote cache are especially noteworthy.
- Added the
--incompatible_remote_build_event_upload_respect_no_cache
flag, which prevents the BES uploader from uploading the outputs of actions that shouldn't be cached remotely. (bfc2413) - Added the
--bes_header
flag, which allows passing extra headers to the BES server. (ef42d13) - Added logging when a blob upload isn't uploaded in time. (71b50f6)
- The
--build_event_binary_file
flag now implies--bes_upload_mode=wait_for_upload_complete
. (62060ba) - BES referenced blobs are no longer stored in the disk cache. (dc59d9e)
- The BES uploader now uses the same code as the remote cache uploader and is now more robust to errors. (e855a26)
- Fixed the BES uploader to handle errors in more edge cases. (c51eb57)
Loggingβ
Bazel offers various ways to gain insight into your build. It's not too surprising then that there were over 30 changes to these capabilities in Bazel 5.0.
Build Event Protocol (BEP)β
The build event protocol is used by build event services,
so all of these changes could have also been listed in that section as well.
The BEP can also be collected locally with --build_event_json_file
and --build_event_binary_file
.
The vast majority of changes added additional information to the BEP, though some are fixes and improvements:
- Added
cumulative_metrics
field toBuildMetrics
. (77a980f) - Added
worker_metrics
field toBuildMetrics
. (c674101) - Added
action_data
field toBuildMetrics.ActionSummary
. (f572d3b) - Added
source_artifact_bytes_read
field toBuildMetrics.ActionSummary
. (0a23a5e) - Added
analysis_phase_time_in_ms
field toBuildMetrics.TimingMetrics
. (34b2947) - Added
garbage_metrics
field toBuildMetrics.MemoryMetrics
. (8965d25) - Added count and size of output files and top-level files seen during a build to
BuildMetrics.ArtifactMetrics
. (dd8afa0) - Added
incomplete
field toTargetComplete.OutputGroup
. (3e1ba0c) - Added the
--experimental_bep_target_summary
flag, which adds theTargetSummary event
, which is intended to summarize allTargetComplete
(including for aspects) andTestSummary
messages for a given configured target. (8d48154) - Added
attempt_count
field toTestSummary
. (766cd0e) - Added test suite expansions. (7fb0c16)
- Added conflicting action output reporting. (2487920)
- Replaced
remote_cache_hits
field with a more detailedrunner_count
. (f880948) - Timestamps and durations now use Well Known Types. (e5c832a)
- Improved reporting of Starlark build settings. (bf31feb)
- The
used_heap_size_post_build
field is now populated when the--memory_profile
flag is set. (3d58523) - Made
--bep_publish_used_heap_size_post_build
work forquery
and other non-build
commands. (1c3bc90) - You can now assume the
named_set_of_files
event will appear before any event referencing thatnamed_set
by ID; this allows consumers to process the files for such events (eg.TargetCompleted
) immediately. (fcf9dd5) - The BEP now includes all files from successful actions in requested output groups; previously, an output group's files were excluded if any file in the output group was not produced due to a failing action. (d2f93fd)
Timing profileβ
The action timing profile,
which is enabled by default with --profile
,
is viewable both locally in Chrome and on build event services.
These changes add more detail and clarity to the profile:
- Added server heap usage. (f4fbbd6)
- Added system CPU and memory metrics. (ec2eda1)
- Added file system traversal tracing. (45d82ca)
- Added
mobile-install
tracing. (559db4e) - Added worker execution tracing. (786b418)
- Renamed action count field from
cpu
toaction
. (c5f87ea) - Renamed "grpc-command" and "Service Thread" threads to "Main Thread" and "Garbage Collector". (a03674e)
- The profile now mentions when an action is acquiring resources. (fa9fabb)
Execution logβ
Bazel logs all of the spawns it executes in the execution log,
which is enabled with the --execution_log_json_file
or --execution_log_binary_file
flags.
This feature is relatively stable,
with just a single noticeable change:
- Added wall time duration. (f92d80c)
Queryβ
bazel build
wasn't the only command to get improvements in this release.
Here are some changes that were made to the query
family of commands:
- Added the
--incompatible_lexicographical_output
flag (on by default), which lexicographically sorts the output ofquery --order_output=auto
. (acbcedd) - Added the
--deduplicate_depsets
flag (on by default) toaquery
, which removes duplicate subsets indep_set_of_files
. (28ffaa2) - Added
--keep_going
functionality to graphlessquery
. (a01371a) - Added execution platform information to
aquery
output. (11c09c5) - Fixed output of
config_setting
visibility. (5dfffef)
Dependency managementβ
A new (currently experimental) external dependency system, codenamed Bzlmod, was added in Bazel 5.0. Besides for all of the changes needed to support Bzlmod, there was one more notable dependency management related change:
- Added the
--experimental_repository_downloader_retries
flag, which allows Bazel to retry certain repository download errors. (a1137ec)
Platforms and toolchainsβ
The C++, Android, and Apple rules are being migrated to support building with Platforms.
While progress has been made,
they don't fully support it yet in Bazel 5.0.
For C++ projects,
it's recommended that the --incompatible_enable_cc_toolchain_resolution
flag is used,
to help the Bazel team discover any issues in the wide variety of projects that exist.
Here are some of the platforms and toolchains related changes which weren't tied to any of those migrations:
- Added the
--experimental_platform_in_output_dir
flag, which causes the output dir name to use a non-default platform name instead of the CPU. (daecf42) target_compatible_with
can now be used with all non-workspace rules. (d052ece)- The
--toolchain_resolution_debug
flag now accepts regexes matching targets, as well as toolchain types, when choosing what debug messages to print. (545befb) - The toolchain transition is now enabled for all toolchains. (4b47d6f)
- Progress is being made on changing all
host
configurations toexec
. (8d66a41)
Execution platformsβ
Execution platforms are platforms which build tools execute on. These include the host platform on which Bazel runs.
In the following sections I collected notable changes for Linux and macOS. I'm sure there were some for Windows as well, but since I don't use Bazel on Windows, none of the changes stood out to me as pertaining only to it.
Linuxβ
I only noticed a single change that was directly related to Linux execution:
- Added the
--experimental_use_hermetic_linux_sandbox
flag, which configureslinux-sandbox
to use achroot
environment. (11f7d80)
macOSβ
On the other hand, macOS had a lot of changes related to it:
- Added the
xcode_version_flag.precision
attribute to allow matching a subset of the version components. (7484c98) - Added progress reporting in
xcode_configure
. (762f9e2) - Toolchain tools now compile as universal binaries if possible. (de5fc19)
xcode-locator
is now built as a universal binary. (6916fc1)- Sandboxed actions can now run
/bin/ps
. (652d1cc) - If
--experimental_prefer_mutual_xcode
is passed, Bazel chooses the local default (instead of the newest mutually available version) if it's available both locally and remotely. (4bef502) - Generated
xcode_version
targets now include product version aliases. (f52e218) osx_archs.bzl
is now explicitly exported from the crosstool. (aeec9a8)- Fixed typo in the cache directory name. (b5bbe28)
- Fixed
libtool
with params files. (48dd159) - Fixed the
--experimental_prefer_mutual_xcode
flag not being used correctly for all parts of the build. (bb41ebc) - Fixed a crash when a custom crosstool specifies a
DEVELOPER_DIR
environment variable. (1811e82) - Fixed JSON output for
xcode-locator
. (1bae172)
Target platformsβ
Target platforms are platforms which you are ultimately building for. I cover the Android and Apple platforms in the following sections, as they still have some functionality provided by Bazel core, instead of being fully supported by standalone Starlark rules.
Androidβ
- Added the
--experimental_run_android_lint_on_java_rules
flag, which causes Java rules to invoke Android Lint. (909bec5) - Added the
android_sdk.legacy_main_dex_list_generator
attribute. (0ccbbde) - Added support for location expansion in the
java_toolchain.android_lint_opts
attribute. (1c0194c) - Added support for symlinks in Android SDK repositories. (e41440e)
- The minimum Android build tools version for the Android rules is now 30.0.0. (0e65273)
--apk_signing_method
now accepts the valuev4
. (f9df9d7)- Tags are now propagated to
AndroidBinary
actions. (8f927d2) aapt2 convert
is now used instead of relinking final APK as static lib. (8465c17)- The
--no-proguard-location-reference
flag is now passed toaapt2
when linking and generating proguard configurations. (705b419) - Made Android Lint worker compatible. (65dc407)
- Made
AarGeneratorAction
worker compatible. (64ffc09) - Android Lint validations are now correctly propagated through
android_binary
's split transition. (c6c6389) android_binary
now always uses the bytecode optimizer's mnemonic. (c381a27)- Fixed Android API level support in NDK crosstools. (b4c637c)
- Fixed
AarResourcesExtractor
action to produce consistent zips. (85ab374) - Fixed
--fat_apk_hwasan
when using--{,android_}cpu
instead of--fat_apk_cpu
. (a38eb75)
Appleβ
- Added support for the Apple Silicon iOS simulator. (c1ea2d4)
- Added support for the Apple Silicon watchOS simulator. (9c1c622)
- Added the
--host_macos_minimum_os
flag. (6345c80) - Added support for LLVM BC files. (f53c389)
- Added the
--incompatible_disable_native_apple_binary_rule
flag, which disables the nativeapple_binary
rule. (65e9732) - When building an iOS target it now defaults to the Apple Silicon iOS simulator when building on an Apple Silicon host. (ca5f67f)
- Made
-c opt
strip dead code by default. (3114e80) - Timestamps are now disabled in linking actions. (073ae81)
--apple_bitcode=embedded
now applies tocc_library
targets. (3439a52)- Removed support for "nodeps" dynamic libraries. (ec55533)
- Lipo operations are now conditional with the
linkMultiArchBinary
Apple binary Starlark API. (066fba3) --apple_crostool_top
is now preserved in host/exec transitions. (3ece10a)
Languagesβ
While there are lots of programming languages that are supported through standalone Starlark rules, some are still written as "native" rules in Bazel core, or are bundled Starlark rules while Starlarkification is in progress. In the following sections I summarize the notable changes in support of these languages.
C and C++β
- Added support for CUDA header file type (.cuh). (c750c52)
- Added
.rlib
as an allowed extension for static libraries. (ad03823) - Added support for location expansion in
cc_*.defines
attributes. (28fc8a1) - Added the
cc_toolchain.target_transition_for_inputs
attribute. (26abd97) - Added native options for
cc_shared_library
. (96afa0f) - Added
-g
inper_object_debug_info
for Clang 12 and GCC 11. (fa69b78) - Added support for clang's
libc++
to the Unix toolchain. (f1531dc) - Added support for LLD to the Unix toolchain. (00e30ca)
- Added the
external_include_paths
feature, which disables warnings from external headers. (08936ae) - Added the
--incompatible_enable_cc_test_feature
flag, which switches from the use of build variables to the feature of the same name. (c74ae11) - Added the
--experimental_cpp_compile_resource_estimation
flag, which estimates precise resource usage for local execution ofCppCompileAction
. (f5196e2) - Added the
--experimental_use_cpp_compile_action_args_params_file
flag, which causesCppCompileAction
to write exposedaction.args
to a parameters file. (dc914c6) - Added support for Starlark transitions on
--incompatible_enable_cc_toolchain_resolution
. (c4357cf) - Added the
dynamic_mode
attribute to thecpp
fragment. (e2915a8) - C++ modules are no longer created if there are no modular headers. (09cba3b)
- Made the
abi_version
andabi_glibc_version
attributes optional for cc toolchains. (9a5bef9) - Made
gcov
optional in cc toolchains. (e8a95ca) - Renamed
target_transition_for_inputs
toexec_transition_for_inputs
to better reflect the mechanism at play. (5448c7c) - The
oso_prefix_is_pwd
feature now applies to C++ link actions. (9b4844a) - Fixed
CppCompileActionTemplate
's handling of PIC. (0349360) - Fixed build failures when the same shared lib is depended on multiple times. (b571f2c)
- Fixed C++ code coverage when using remote execution. (ab1da7b)
- Fixed a performance issue when
cc_binary
depended oncc_shared_library
targets. (503d56e) - Fixed a crash when feature configuration or cc toolchain were
None
. (d3b3425)
Javaβ
- Upgraded JDK11. (698c17a)
- Removed JDK14. (06f7340)
- Added JDK16. (e2ed2fd)
- Added JDK17. (eb7bf8c)
- Added support for Java versions with a single component. (2a3e194)
- Added support for worker cancellation. (05d0446)
- Added support for record attributes to
ijar
. (26229fe) - Added support for sealed class attributes to
ijar
. (70ae390) - Added the
--host_jvmopt
flag. (570f019) - Added the
javabuilder_data
andturbine_data
attributes tojava_toolchain
. (a1b19df) - Added the
http_jar.downloaded_file_path
attribute. (15b1840) - Added mnenomic tags for java toolchain actions. (120ea6c)
- Added
java_outputs
toJavaPluginInfo
. (f73e28c) - Java rules now use toolchain resolution. (Issue #7849)
- Java branch coverage now applies Jacocoβs coverage filters. (065e2e8)
- The local JDK is now attached to
JVM8_TOOLCHAIN_CONFIGURATION
. (7e48642) - Only JDK repositories that are needed are downloaded now. (903c272)
java_test
now has therequires-darwin
execution requirement on macOS. (ca39c05)- Removed
ABSOLUTE_JAVABASE
. (2a07fed) - Removed the
jarFiles
,resources
andsourceJarsForJarFiles
attributes fromJavaSourceInfoProvider
. (34cfab5) - Removed the
JavaInfo.add_compile_time_jdeps
andcompile_time_jdeps
attributes. (4d54234)
Objective-Cβ
- Added support for location expansion in the
objc_library.copts
attribute. (d966a0d) - Swift module maps are no longer generated in
objc_library
andobjc_import
targets. (31bec27) - Removed the
generate_dsym
method from theobjc
fragment. (1bf5843)
Rules authoringβ
Bazel's extensibility is powered by the ability to write custom rules. Most rules used in a project will be provided by open source rule sets, but projects may also define rules themselves. Bazel 5.0 includes numerous changes that make custom rules more performant, easier to write, or even expand what is possible to do with them.
Aspectsβ
Aspects allow augmenting build dependency graphs with additional information and actions. These changes expanded their capabilities:
- Added the
--experimental_enable_aspect_hints
flag,](https://github.com/bazelbuild/bazel/commit/60ebb105dbf34f0b267ea7573157246b4c9bfcaf) [which adds theaspect_hints
attribute to rules. (a2856bf) - Added the
--experimental_required_aspects
flag, which allows aspects to depend on other aspects. (f8c3408) - Added the
--incompatible_top_level_aspects_dependency
flag, which allows top-level aspect dependencies. (ed25118) - When using the
--allow_analysis_failures
flag (for example, viabazel-skylib
'sanalysistest
withexpect_failure = True
), analysis-time failures in aspect implementation functions will now be propagated and saved inAnalysisFailureInfo
, just like analysis-time failures in rules. (020dd5f)
Persistent workersβ
Persistent workers improve build performance by sending multiple requests to long-running processes. Here are some notable changes to persistent worker support:
- Added support for worker cancellation. (e0d6f8b)
- Added the
verbosity
field to the worker protocol, primarily controlled by the--worker_verbose
flag. (40d3363) - JSON based workers now have their requests formatted according to the ndjson spec. (299e50a)
Starlarkβ
As mentioned at Bazelcon, progress is being made on migrating natives rules out of Bazel and into standalone Starlark rules. In the Bazel 5.0 release progress was made on the Android, C++, Java, and Objective-C rules.
In addition to changes directly needed for Starlarkification, for which there were many and I'm not going to list them here, the Starlark language itself received performance and feature improvements:
- Added support for nested
def
statements. (5ca2064) - Added support for lambda expressions. (50ce3f9)
- Added support for
allow_closure
in theargs.add_all
andargs.add_joined
methods. (6e0050d) - Added support for augmented field assignment (
y.f += x
). (fbbac6b) - Added support for
%x
,%X
, and%o
conversions instring % number
. (99b7226) - Added 64-bit integer support to
StarlarkInt.{floordiv,mod}
. (3e45967) - Added support for some subsitutions in action progress messages. (bfa3643)
- Added support for string build settings which accept multiple values. (a13f590)
- Starlark rules can now use native transitions in the
cfg
parameter. (d1619b7) - Optimized
str(int)
. (8f97db1) - Optimized
() + tuple
andtuple + ()
. (0ebb269) - Optimized long integer multiplication. (9d3f225)
- Optimized
&
,|
,^
, and~
for 64-bit integers. (fa421b8) - Optimized
list(list)
. (d7d7f82) - Optimized Starlark transitions. (5b4fb02)
- Optimized
--experimental_existing_rules_immutable_view
. (dec8b5a) - Fixed
Label()
behavior when called with@repo
parts. (463e8c8) - Propagated
DefaultInfo
no longer loses runfiles. (62582bd)
Miscβ
There were a handful of changes that I couldn't find a nice home for in the sections above, but I still felt were important or interesting enough to call attention to:
- Added the the
--incompatible_enforce_config_setting_visibility
flag, which makesconfig_setting
honor thevisibility
attribute (defaulting to//visibility:public
). (79989f9) - Added the
--remove_all_convenience_symlinks
flag to theclean
command, which deletes all symlinks in the workspace that have thesymlink_prefix
prefix and point into the output directory. (f3513c1) - Added the
--no-log-init
flag to docker sandbox. (d4390f8) - Added the
--experimental_keep_config_nodes_on_analysis_discard
flag (default on), which reduces long-running memory usage. (2f4ed67) - Added the
--experimental_reuse_sandbox_directories
flag, which causes reuse of already-created non-worker sandboxes with cleanup. (1adb512) - Added the
--experimental_skyframe_cpu_heavy_skykeys_thread_pool_size
flag, which causes the loading/analysis phase of Skyframe to use 2 independent thread pools. (16c0408) - Added the
--experimental_oom_sensitive_skyfunctions_semaphore_size
flag, which configures the semaphore inConfiguredTagetFunction
. (b5bfcc1) - Added the
--experimental_retain_test_configuration_across_testonly
flag, which skips configuration trimming when whentestonly
istrue
on non-test targets. (309f4e1) - Test configurations are no longer trimmed when
--nodistinct_host_configuration
is on. (0b51d43) - The
canonicalize-flags
command now inherits from thebuild
command in order to pick up build-specified--flag_alias
settings from rc files. (3e6e975) - Bazel will no longer create a
bazel-out
symlink if--symlink_prefix
is specified: the directory pointed to via thebazel-out
symlink is accessible via${symlink_prefix}-out
. (06bd3e8) - Set
TEST_RUN_NUMBER
when the test runs multiple times. (9e4216e) - All (instead of just C++) source files are now filtered for coverage output according to
--instrumentation_filter
and--instrument_test_targets
. (f38e293) genrule.srcs
is now considered a source attribute for coverage. (fa118ae)label_keyed_string_dict
attributes are now considered when gathering instrumented files for coverage. (9015f38)- Changed
DEFAULT_STUB_SHEBANG
to use python3 instead of python. (2945ef5) - Added the default
solib
dir to therpath
for shared libs with transitions. (20061f8) - Removed
//visibility:legacy_public
. (0803ce4) - Removed
--action_graph
from the dump command. (7cf0c34) - Added some fixes for the Starlark transition hash computation. (557a7e7)
Summaryβ
As you can see, Bazel 5.0 was a massive release. Thankfully, through the rolling releases process, people were able to test, or even actively depend on, these changes well before the first 5.0 release candidate was cut.
I expect Bazel 5.1 to be a fast follow with some changes that missed the final release candidate. Work on Bazel 6.0 is well underway as well, and I look forward to summarizing its changes later this year.