feat(bzlmod): mark pip extension as os/arch dependent (#1433)
This ensures that under bzlmod with `--lockfile-mode=update` we
would generate an entry per os/arch, which is needed because the
hermetic toolchain interpreter path is os/arch dependent.
Summary:
- add bazel_features dep
- mark the pip extension as arch/os dependent
Related: bazelbuild/bazel#19154
---------
Co-authored-by: Richard Levasseur <richardlev@gmail.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ed3a60d..59bdac1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -37,6 +37,9 @@
cases. An error about `@rules_python_internal` means the `py_repositories()`
call is missing in `WORKSPACE`.
+* (bzlmod) The `pip.parse` extension will generate os/arch specific lock
+ file entries on `bazel>=6.4`.
+
### Added
diff --git a/MODULE.bazel b/MODULE.bazel
index ab7b597..23e78c0 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -4,8 +4,9 @@
compatibility_level = 1,
)
-bazel_dep(name = "platforms", version = "0.0.4")
+bazel_dep(name = "bazel_features", version = "1.1.0")
bazel_dep(name = "bazel_skylib", version = "1.3.0")
+bazel_dep(name = "platforms", version = "0.0.4")
# Those are loaded only when using py_proto_library
bazel_dep(name = "rules_proto", version = "5.3.0-21.7")
diff --git a/python/extensions/pip.bzl b/python/extensions/pip.bzl
index f94f18c..a0559ff 100644
--- a/python/extensions/pip.bzl
+++ b/python/extensions/pip.bzl
@@ -14,6 +14,7 @@
"pip module extension for use with bzlmod"
+load("@bazel_features//:features.bzl", "bazel_features")
load("@pythons_hub//:interpreters.bzl", "DEFAULT_PYTHON_VERSION", "INTERPRETER_LABELS")
load(
"//python/pip_install:pip_repository.bzl",
@@ -380,6 +381,17 @@
}
return attrs
+def _extension_extra_args():
+ args = {}
+
+ if bazel_features.external_deps.module_extension_has_os_arch_dependent:
+ args = args | {
+ "arch_dependent": True,
+ "os_dependent": True,
+ }
+
+ return args
+
pip = module_extension(
doc = """\
This extension is used to make dependencies from pip available.
@@ -422,6 +434,7 @@
""",
),
},
+ **_extension_extra_args()
)
def _whl_mods_repo_impl(rctx):