Update bazel-contrib/setup-bazel action to v0.12.0 (#190) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [bazel-contrib/setup-bazel](https://redirect.github.com/bazel-contrib/setup-bazel) | action | minor | `0.9.1` -> `0.12.0` | --- ### Release Notes <details> <summary>bazel-contrib/setup-bazel (bazel-contrib/setup-bazel)</summary> ### [`v0.12.0`](https://redirect.github.com/bazel-contrib/setup-bazel/releases/tag/0.12.0) [Compare Source](https://redirect.github.com/bazel-contrib/setup-bazel/compare/0.11.0...0.12.0) #### What's Changed - Enable caches for all Bazel commands, not just build-related ones. by [@​phst](https://redirect.github.com/phst) in [https://github.com/bazel-contrib/setup-bazel/pull/56](https://redirect.github.com/bazel-contrib/setup-bazel/pull/56) #### New Contributors - [@​phst](https://redirect.github.com/phst) made their first contribution in [https://github.com/bazel-contrib/setup-bazel/pull/56](https://redirect.github.com/bazel-contrib/setup-bazel/pull/56) **Full Changelog**: https://github.com/bazel-contrib/setup-bazel/compare/0.11.0...0.12.0 ### [`v0.11.0`](https://redirect.github.com/bazel-contrib/setup-bazel/releases/tag/0.11.0) [Compare Source](https://redirect.github.com/bazel-contrib/setup-bazel/compare/0.10.0...0.11.0) #### What's Changed - Update dependency yaml to v2.7.0 by [@​renovate](https://redirect.github.com/renovate) in [https://github.com/bazel-contrib/setup-bazel/pull/55](https://redirect.github.com/bazel-contrib/setup-bazel/pull/55) - Export `BAZELISK_GITHUB_TOKEN` variable by [@​p0deje](https://redirect.github.com/p0deje) in [https://github.com/bazel-contrib/setup-bazel/pull/58](https://redirect.github.com/bazel-contrib/setup-bazel/pull/58) **Full Changelog**: https://github.com/bazel-contrib/setup-bazel/compare/0.10.0...0.11.0 ### [`v0.10.0`](https://redirect.github.com/bazel-contrib/setup-bazel/releases/tag/0.10.0) [Compare Source](https://redirect.github.com/bazel-contrib/setup-bazel/compare/0.9.1...0.10.0) #### What's Changed - Update dependency [@​actions/cache](https://redirect.github.com/actions/cache) to v3.3.0 by [@​renovate](https://redirect.github.com/renovate) in [https://github.com/bazel-contrib/setup-bazel/pull/49](https://redirect.github.com/bazel-contrib/setup-bazel/pull/49) - Update dependency [@​vercel/ncc](https://redirect.github.com/vercel/ncc) to v0.38.3 by [@​renovate](https://redirect.github.com/renovate) in [https://github.com/bazel-contrib/setup-bazel/pull/50](https://redirect.github.com/bazel-contrib/setup-bazel/pull/50) - Update dependency yaml to v2.6.1 by [@​renovate](https://redirect.github.com/renovate) in [https://github.com/bazel-contrib/setup-bazel/pull/51](https://redirect.github.com/bazel-contrib/setup-bazel/pull/51) - Update Node.js to v22.12.0 by [@​renovate](https://redirect.github.com/renovate) in [https://github.com/bazel-contrib/setup-bazel/pull/52](https://redirect.github.com/bazel-contrib/setup-bazel/pull/52) - Update dependency [@​actions/cache](https://redirect.github.com/actions/cache) to v4 by [@​renovate](https://redirect.github.com/renovate) in [https://github.com/bazel-contrib/setup-bazel/pull/53](https://redirect.github.com/bazel-contrib/setup-bazel/pull/53) - Allow changing output base path by [@​p0deje](https://redirect.github.com/p0deje) in [https://github.com/bazel-contrib/setup-bazel/pull/48](https://redirect.github.com/bazel-contrib/setup-bazel/pull/48) **Full Changelog**: https://github.com/bazel-contrib/setup-bazel/compare/0.9.1...0.10.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekday after 9am before 5pm" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. â™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://redirect.github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS45Mi4wIiwidXBkYXRlZEluVmVyIjoiMzkuOTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYXV0b21lcmdlIl19-->
Bazel rules to enable use of uv to compile pip requirements and generate virtual envs.
Installing with bzlmod, add to MODULE.bazel (adjust version as appropriate):
bazel_dep(name = "rules_uv", version = "<version>")
Note: rules_uv requires a Python toolchain to be available. One can be obtained by having rules_python installed using:
bazel_dep(name = "rules_python", version = "<rules_python version>")
Create a requirements.in or pyproject.toml -> requirements.txt compilation target and diff test:
load("@rules_uv//uv:pip.bzl", "pip_compile") pip_compile( name = "generate_requirements_txt", requirements_in = "//:requirements.in", # default requirements_txt = "//:requirements.txt", # default )
Ensure both requirements.in and requirements.txt exist (the latter must exist but may be empty).
Run the compilation step with bazel run //:generate_requirements_txt.
This will automatically register a diff test with name [name]_test.
Additionally, you can specify the following optional args:
python_platform: the uv pip compile compatible --python-platform value to pass to uvargs: override the default arguments passed to uv (--generate-hashes, --emit-index-url and --no-strip-extras)data: pass additional files to be present when generating and testing requirements txt files (see also examples/multiple-inputs)tags: tags to apply to the test targettarget_compatible_with: restrict targets to running on the specified Bazel platformCreate a virtual environment creation target:
load("@rules_uv//uv:venv.bzl", "create_venv") create_venv( name = "create_venv", requirements_txt = "//:requirements.txt", # default )
Create a virtual environment with default path venv by running bazel run //:create_venv. The generated script accepts a single, optional argument to define the virtual environment path.
The created venv will use the default Python 3 runtime defined in rules_python.
uv supports generating platform-specific requirements files, and rules_uv exposes this configuration, and a multi-platform setup might look like this:
load("@rules_multirun//:defs.bzl", "multirun") load("@rules_uv//uv:pip.bzl", "pip_compile") load("@rules_uv//uv:venv.bzl", "create_venv") pip_compile( name = "generate_requirements_linux_txt", python_platform = "x86_64-unknown-linux-gnu", requirements_txt = "requirements_linux.txt", ) pip_compile( name = "generate_requirements_macos_txt", python_platform = "aarch64-apple-darwin", requirements_txt = "requirements_macos.txt", ) multirun( name = "generate_requirements_lock", commands = [ ":generate_requirements_linux_txt", ":generate_requirements_macos_txt", ], # Running in a single threaded mode allows consecutive `uv` invocations to benefit # from the `uv` cache from the first run. jobs = 1, ) create_venv( name = "create_venv", requirements_txt = select({ "@platforms//os:linux": ":requirements_linux.txt", "@platforms//os:osx": ":requirements_macos.txt", }), )
This makes use of the excellent rules_multirun.
To match up with rules_python, a bzlmod config will look something like:
pip.parse( hub_name = "pip", python_version = "3.11", requirements_darwin = "//:requirements_macos.txt", requirements_linux = "//:requirements_linux.txt", )