Adds ability to determine product version without starting a server

When `bazel --version` is run with no other args the client short-circuits
processing and returns the same info that `version --gnu_format` would return,
without the side-effect of starting the server daemon. This makes figuring out
the version of an arbitrary binary a much lighter-weight process than it
previously was.

The command itself is implemented by inspecting the `build-label.txt` file
which is derived from the server jar's build label and packed into the dist
archive.

Right now we rely on `--version` with no other args. In the future it may be
sensible to fold this into the option processor - I opted to skip this step
for now in interest of getting something functional out without needing to get
too deep into all of the flag parsing semantics. When/if we wind up folding
--version activation into the option processor it should be backwards
compatible with the functionality added in this change.

In the archive_processor code, I factored out the whole "run the zip processor"
step to simplify things. The only downside to this is the error messages might
be slightly different from before, but they shouldn't be terribly far off...

PiperOrigin-RevId: 249701614
5 files changed
tree: 04d4c567bdcf11846bc487e5c8c0cab51abb0c3d
  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.