[8.8.0] Expand tree artifact inputs from metadata in the compact execution log (#30830) An empty tree artifact whose generating action template expands into no actions is never materialized on disk when a disk or remote cache is in use: nothing creates the directory and the `RemoteActionFileSystem` has no entries for it either. Logging a spawn that has such a tree artifact as an input then fails the action with ERROR: Linking _nativedeps/6a5ccd5.so failed: IOException while logging spawn: .../bin/_objs/biome_proto.upb_minitable/iome (No such file or directory) since `expandDirectory` readdirs the directory. This happens while logging *inputs*, which isn't covered by the try/catch around output logging added in #30717. Expand tree artifacts from their `TreeArtifactValue` instead. Their contents are already known, so this avoids the traversal entirely and also keeps the log complete for trees whose files aren't materialized locally. Source directories and filesets keep using the filesystem traversal. Fixes https://github.com/bazelbuild/bazel/issues/22920#issuecomment-5345473352 ### Description ### Motivation ### Build API Changes No ### Checklist - [x] I have added tests for the new use cases (if any). - [ ] I have updated the documentation (if applicable). ### Release Notes RELNOTES: Fixed a build failure with `--execution_log_compact_file` when a C++ action template has no inputs. Closes #30816. PiperOrigin-RevId: 968391836 Change-Id: Id05a603a4e1987eef2c50d7722a8ee5955530e83 (cherry picked from commit df9ab4fa0aa2362d007e586a92bcce477dccaf4e) 8.8.0 adaptation: `InputMetadataProvider` has no `getTreeMetadata` on this branch, so the pick adds one. It is keyed on the exec path rather than the `ActionInput` so that the existing `ActionInputMap#getTreeMetadata(PathFragment)` implements it as is, and it defaults to `null`, which keeps the filesystem traversal for providers that can't answer (`StaticInputMetadataProvider`, `SingleBuildFileCache`). The providers that a spawn is actually logged with forward to their delegates: `ActionInputMetadataProvider`, `DelegatingPairInputMetadataProvider` and `ActionExecutionContext.OverriddenRunfilesPathInputMetadataProvider`. `internalToUnicode` doesn't exist on this branch either, so paths are used as is, matching the surrounding code. Closes #30818 Co-authored-by: Ian (Hee) Cha <heec@google.com>
{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.
Follow our tutorials:
To report a security issue, please email security@bazel.build with a description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue. Our vulnerability management team will respond within 3 working days of your email. If the issue is confirmed as a vulnerability, we will open a Security Advisory. This project follows a 90 day disclosure timeline.
See CONTRIBUTING.md