Split ActionStatusMessage into separate events.

ActionStatusMessage had a very strange API in the sense that it carried
multiple different statuses but these were not explicitly represented
anywhere: callers had to guess what status was represented by a combination
of the values of the fields in the message.

To fix this, split the status updates into separate events with good names
and types.  This keeps each event restricted to the data it has to carry,
preventing callers from having to guess what is or is not available, and
matches what we do for many of the other action-related events.

Note that it'd be slightly nicer to use an enum of some form so that callers
could be guaranteed to handle all possible status cases... but doing so
results in even more convoluted code because each status needs to carry
different information around.

This change highlights two more deficiencies that I am fixing.  First,
there is no such thing as a "preparing" event separate from an "started"
event so I removed the former representation.  Second, the "messages" in
the status messages were used to update the UI, thus conflating internal
status representations with the specific ways in which they should be
displayed to the users; I just pushed the formatting responsibility to
the UI modules instead.

Necessary cleanup to address https://github.com/bazelbuild/bazel/issues/7345.

RELNOTES: None.
PiperOrigin-RevId: 235051214
11 files changed
tree: 8b1d07fad3c3d84dc3e2ada48ac09918f5f4688e
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .gitattributes
  9. .gitignore
  10. AUTHORS
  11. BUILD
  12. CHANGELOG.md
  13. CODEOWNERS
  14. combine_distfiles.py
  15. combine_distfiles_to_tar.sh
  16. compile.sh
  17. CONTRIBUTING.md
  18. CONTRIBUTORS
  19. distdir.bzl
  20. ISSUE_TEMPLATE.md
  21. LICENSE
  22. README.md
  23. 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.