Report a root cause in BEP on testonly violations

Also move the VisibilityErrorEvent to the analysis package and rename
it. Improve its documentation to clarify the intended use.

This fixes the immediate issue, but does not address the underlying
problem. The problem is that root cause analysis is incomplete, and
reporting is disconnected. When we report the analysis failure of a
target, we implicitly create a AnalysisFailedCause pointing at a root
cause event, and hope that something else will post that. However,
there's no guarantee that that ever happens, in which case we trigger a
fail-safe in the BEP implementation, which posts an empty event and
marks it as 'aborted' with no further explanation.

We need to guarantee that we only report a root cause if there's a
corresponding root cause event. The best way to do that is to collect
the root cause events as causes, rather than creating a cause out of
thin air.

Common:
event {
id {
  target_completed {
    label: "//foo:foo"
    configuration {
      id: "b724944fdc6e8d9ab550b4b88f79644e"
    }
  }
}
children {
  configured_label {
    label: "//foo:foo"
    configuration {
      id: "b724944fdc6e8d9ab550b4b88f79644e"
    }
  }
}
aborted {
  reason: ANALYSIS_FAILURE
}
}

Reported root cause before:
event {
id {
  configured_label {
    label: "//foo:foo"
    configuration {
      id: "b724944fdc6e8d9ab550b4b88f79644e"
    }
  }
}
aborted {
}
}

Reported root cause after:
event {
id {
  configured_label {
    label: "//foo:foo"
    configuration {
      id: "b724944fdc6e8d9ab550b4b88f79644e"
    }
  }
}
aborted {
  reason: ANALYSIS_FAILURE
  description: "non-test target \'//foo:foo\' depends on testonly target \'//foo:bar\' and doesn\'t have testonly attribute set"
}
}

PiperOrigin-RevId: 268003026
5 files changed
tree: 71f5a455e1f586808018ae1c3ed5806b6b6817fe
  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.