Add a warning when shared actions detection can be producing a false positive.

Shared actions detection is based on the action key -- if 2 actions have the
same key, we will consider them equal. The problem is that we cannot reliably
construct the action key for actions which have tree artifact inputs.

Example:

```
args = ctx.actions.args()
args.add_all([tree_artifact], map_each=function, expand_directories=True)
action = ctx.actions.run(arguments=[args], ...)
```

For such action, we will constuct the key by running `function` on the
directory itself (rather than expanded contents of it). This means that for 2
actions with equal inputs and different functions, as long as their result is
the same when called for the directory, we will consider them equal. Please
note that it does not imply that their result for files within the directory
are actually the same.

As a result of that problem, we may falsly share an action and proceed with a
build which should otherwise fail. In order to aid the users in debugging
issues (like non-determinism) of such builds, add a warning about the potential
problem.

PiperOrigin-RevId: 319805921
23 files changed
tree: e5afc369efe84a32ca8f71f4cb5aae906eac94da
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEOWNERS
  15. combine_distfiles.py
  16. combine_distfiles_to_tar.sh
  17. compile.sh
  18. CONTRIBUTING.md
  19. CONTRIBUTORS
  20. distdir.bzl
  21. ISSUE_TEMPLATE.md
  22. LICENSE
  23. README.md
  24. WORKSPACE
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.

  • One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

  • Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.

  • Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status