Remove the distinction between mandatory and non-mandatory artifact dependencies in ArtifactFunction.

This used to be used for implementing C++ include scanning: it's possible that a change both removes a header file and the reference to it. In the subsequent build, Blaze still needs to stat the removed file to verify whether the action cache entry is still valid; it's not, of course, since if the reference to the file is removed, at least one still-existing source file changes, but we don't know that at the time we check for an action cache hit.

So the action cache referencing a missing file should not be an error. Previously, this was implemented by a bit on the SkyKey of ArtifactFunction, which indicated whether an exception should be raised if the source file is missing.

However, it's just as simple to do this in ActionExecutionFunction, which has the benefit of limiting knowledge of this quirk to ActionExecutionFunction and requiring fewer Skyframe nodes and edges.

In certain cases, it can also result in performance benefits: if a discovered input is already statted before an action requiring it starts executing, no Skyframe restart is needed anymore.

Note that things are still not perfect: in particular, it's possible that when a reference to a discovered file is removed and that file is simultaneously replaced with symlink cycle (or made unreadable in some other way), we still raise an error and fail the build. This isn't new behavior introduced by this change, though.

RELNOTES: None.
PiperOrigin-RevId: 255388509
16 files changed
tree: 1f1077866acb86f5c1dc640682e7cdeb3927f155
  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 only rebuilds 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

Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.