diff --git a/MODULE.bazel b/MODULE.bazel index 5f4f3bc66..213c005e3 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -25,31 +25,48 @@ local_path_override( ) # ------------------------------------ rules_python ------------------------------------ # -bazel_dep(name = "rules_python", version = "0.20.0") +PYTHON_NAME = "python3" -python = use_extension("@rules_python//python:extensions.bzl", "python") +INTERPRETER_NAME = "interpreter3" + +bazel_dep(name = "rules_python", version = "0.22.0") + +python = use_extension("@rules_python//python/extensions:python.bzl", "python") python.toolchain( - name = "python3", + name = PYTHON_NAME, + configure_coverage_tool = True, python_version = "3.10.8", ) -use_repo(python, "python3_toolchains") -use_repo(python, "python3") -use_repo(python, "python3_aarch64-unknown-linux-gnu") -use_repo(python, "python3_x86_64-unknown-linux-gnu") - -# NOTE: custom extension so we can reference the hermetic python interpreter in the pip.parse rules -# Can be removed once https://github.com/bazelbuild/rules_python/issues/1058 is solved. -python_interpreter = use_extension(":extensions.bzl", "python_interpreter") -use_repo(python_interpreter, "python_interpreter") +use_repo(python, PYTHON_NAME) +use_repo( + python, + "{}_toolchains".format(PYTHON_NAME), +) +use_repo( + python, + "{}_aarch64-unknown-linux-gnu".format(PYTHON_NAME), +) +use_repo( + python, + "{}_x86_64-unknown-linux-gnu".format(PYTHON_NAME), +) register_toolchains( - "@python3_toolchains//:all", + "@{}_toolchains//:all".format(PYTHON_NAME), +) + +interpreter = use_extension("@rules_python//python/extensions:interpreter.bzl", "interpreter") +interpreter.install( + name = INTERPRETER_NAME, + python_name = PYTHON_NAME, ) +use_repo(interpreter, INTERPRETER_NAME) -pip = use_extension("@rules_python//python:extensions.bzl", "pip") +pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") pip.parse( name = "pip-setup", - python_interpreter_target = "@python_interpreter//:python", + incompatible_generate_aliases = True, + python_interpreter_target = "@{}//:python".format(INTERPRETER_NAME), requirements_lock = "//:requirements.txt", ) use_repo(pip, "pip-setup") diff --git a/extensions.bzl b/extensions.bzl deleted file mode 100644 index 6aea45f8d..000000000 --- a/extensions.bzl +++ /dev/null @@ -1,27 +0,0 @@ -""" -Module extension to get a generic Bazel target that can be referenced in the MODULE.bazel file. -""" - -load("@python3//:defs.bzl", "interpreter") - -def _symlink_python_interpreter_impl(repository_ctx): - repository_ctx.file("BUILD.bazel", content = ''' -package(default_visibility = ["//visibility:public"]) -exports_files(["python"]) -''') - python_path = repository_ctx.path(Label(interpreter)) - repository_ctx.symlink(python_path, "python") - -_symlink_python_interpreter = repository_rule( - implementation = _symlink_python_interpreter_impl, - local = True, -) - -def _python_interpreter(module_ctx): # buildifier: disable=unused-variable - _symlink_python_interpreter( - name = "python_interpreter", - ) - -python_interpreter = module_extension( - implementation = _python_interpreter, -) diff --git a/rules/rules_task/MODULE.bazel b/rules/rules_task/MODULE.bazel index abca8ea25..7f1df493c 100644 --- a/rules/rules_task/MODULE.bazel +++ b/rules/rules_task/MODULE.bazel @@ -11,33 +11,39 @@ module( bazel_dep(name = "bazel_skylib", version = "1.4.2") bazel_dep(name = "aspect_bazel_lib", version = "1.32.1") -bazel_dep(name = "rules_python", version = "0.20.0") +# ------------------------------------ rules_python ------------------------------------ # +PYTHON_NAME = "python3_rules_task" +INTERPRETER_NAME = "interpreter3_rules_task" -python = use_extension("@rules_python//python:extensions.bzl", "python") +bazel_dep(name = "rules_python", version = "0.22.0") +python = use_extension("@rules_python//python/extensions:python.bzl", "python") python.toolchain( - name = "python3_rules_task", + name = PYTHON_NAME, python_version = "3.10.8", + configure_coverage_tool = True, ) -use_repo(python, "python3_rules_task_toolchains") -use_repo(python, "python3_rules_task") -use_repo(python, "python3_rules_task_aarch64-unknown-linux-gnu") -use_repo(python, "python3_rules_task_x86_64-unknown-linux-gnu") - -# NOTE: custom extension so we can reference the hermetic python interpreter in the pip.parse rules -# Can be removed once https://github.com/bazelbuild/rules_python/issues/1058 is solved. -python_interpreter = use_extension(":extensions.bzl", "python_interpreter") -use_repo(python_interpreter, "python_interpreter") +use_repo(python, PYTHON_NAME) +use_repo(python, "{}_toolchains".format(PYTHON_NAME)) +use_repo(python, "{}_aarch64-unknown-linux-gnu".format(PYTHON_NAME)) +use_repo(python, "{}_x86_64-unknown-linux-gnu".format(PYTHON_NAME)) register_toolchains( - "@python3_rules_task_toolchains//:all", + "@{}_toolchains//:all".format(PYTHON_NAME), ) -pip = use_extension("@rules_python//python:extensions.bzl", "pip") +interpreter = use_extension("@rules_python//python/extensions:interpreter.bzl", "interpreter") +interpreter.install( + name = INTERPRETER_NAME, + python_name = PYTHON_NAME, +) +use_repo(interpreter, INTERPRETER_NAME) +pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") pip.parse( name = "pip", - python_interpreter_target = "@python_interpreter//:python", - requirements_lock = ":requirements.txt", + incompatible_generate_aliases = True, + python_interpreter_target = "@{}//:python".format(INTERPRETER_NAME), + requirements_lock = "//:requirements.txt", ) use_repo(pip, "pip") diff --git a/rules/rules_task/extensions.bzl b/rules/rules_task/extensions.bzl deleted file mode 100644 index 4c7a8bae1..000000000 --- a/rules/rules_task/extensions.bzl +++ /dev/null @@ -1,27 +0,0 @@ -""" -Module extension to get a generic Bazel target that can be referenced in the MODULE.bazel file. -""" - -load("@python3_rules_task//:defs.bzl", "interpreter") - -def _symlink_python_interpreter_impl(repository_ctx): - repository_ctx.file("BUILD.bazel", content = ''' -package(default_visibility = ["//visibility:public"]) -exports_files(["python"]) -''') - python_path = repository_ctx.path(Label(interpreter)) - repository_ctx.symlink(python_path, "python") - -_symlink_python_interpreter = repository_rule( - implementation = _symlink_python_interpreter_impl, - local = True, -) - -def _python_interpreter(module_ctx): # buildifier: disable=unused-variable - _symlink_python_interpreter( - name = "python_interpreter", - ) - -python_interpreter = module_extension( - implementation = _python_interpreter, -)