bzlmod: create a base class for repository_ctx

(https://github.com/bazelbuild/bazel/issues/13316)

This base class contains methods to be shared between repository_ctx and module_ctx. In other words, the following methods are moved from repository_ctx to the new StarlarkBaseExternalContext:

* `path`: needed to traverse the file system
* `os`: needed for OS-specific information and env variables
* `read`: needed to read files
* `execute`: needed to perform arbitrary operations
* `which`: needed to locate tools on PATH

The other methods are left out because they're mostly useful for creating files, which module extensions are discouraged from (since the files created in such a way aren't accessible later, unlike those created by repo rules). We'd ideally also need an "http_get" method later.

This CL also changes the handling of marker data in repository_ctx (now in the base class), so that instead of directly writing entries into a marker data map, we collect those entries into a separate map. After the context object is used, that separate map can then be read and processed (so repository_ctx can put it into marker data and module_ctx will likely want to write it into the lockfile).

PiperOrigin-RevId: 393790084
5 files changed
tree: 548f21ed996c7c9f1839f11b8d7ab4f7a8cb86e2
  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. CODEBASE.md
  15. CODEOWNERS
  16. combine_distfiles.py
  17. combine_distfiles_to_tar.sh
  18. compile.sh
  19. CONTRIBUTING.md
  20. CONTRIBUTORS
  21. distdir.bzl
  22. distdir_deps.bzl
  23. ISSUE_TEMPLATE.md
  24. LICENSE
  25. README.md
  26. SECURITY.md
  27. 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 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.

Getting Started

Documentation

Reporting a Vulnerability

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.

Contributing to Bazel

See CONTRIBUTING.md

Build status