Skip to content

Commit 6c9aaca

Browse files
authored
refactor: split toolchains and repositories (#323)
### Type of change Currently, rules_py_dependencies and rules_py_toolchains are exported from the same bzl file which makes it impossible to depend on another rule and load from at the same since both macros are in the same file. This changes this to allow adding a dependency and loading from it. - Refactor (a code change that neither fixes a bug or adds a new feature) **For changes visible to end-users** - Breaking change (this change will force users to change their own code or config) - Relevant documentation has been updated ### Test plan - Covered by existing test cases
1 parent c4b48bb commit 6c9aaca

File tree

6 files changed

+50
-43
lines changed

6 files changed

+50
-43
lines changed

WORKSPACE

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ load("//py:repositories.bzl", "rules_py_dependencies")
1515
# Fetch dependencies which users need as well
1616
rules_py_dependencies()
1717

18+
load("//py:toolchains.bzl", "rules_py_toolchains")
19+
20+
rules_py_toolchains()
21+
1822
# Load the Python toolchain for rules_docker
1923
register_toolchains("//:container_py_toolchain")
2024

e2e/smoke/WORKSPACE.bazel

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")
5656

5757
rules_py_dependencies()
5858

59+
load("@aspect_rules_py//py:toolchains.bzl", "rules_py_toolchains")
60+
61+
rules_py_toolchains()
62+
5963
# "Installation" for rules_python
6064
load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")
6165

e2e/use_release/WORKSPACE.bazel

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ local_repository(
99
# you should fetch it *before* calling this.
1010
# Alternatively, you can skip calling this function, so long as you've
1111
# already fetched all the dependencies.
12-
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies", "rules_py_toolchains")
12+
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")
1313

14-
rules_py_dependencies(register_toolchains = False)
14+
rules_py_dependencies()
15+
16+
load("@aspect_rules_py//py:toolchains.bzl", "rules_py_toolchains")
1517

1618
# Force use of pre-built release binaries regardless of the content of /tools/version.bzl
1719
rules_py_toolchains(is_prerelease = False)

py/extensions.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"Module Extensions used from MODULE.bazel"
22

3-
load(":repositories.bzl", "DEFAULT_TOOLS_REPOSITORY", "rules_py_toolchains")
3+
load(":toolchains.bzl", "DEFAULT_TOOLS_REPOSITORY", "rules_py_toolchains")
44
load("//tools:version.bzl", "IS_PRERELEASE")
55

66
py_toolchain = tag_class(attrs = {

py/repositories.bzl

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,10 @@ See https://docs.bazel.build/versions/main/skylark/deploying.html#dependencies
66

77
load("@bazel_tools//tools/build_defs/repo:http.bzl", _http_archive = "http_archive")
88
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
9-
load("//py/private/toolchain:autodetecting.bzl", _register_autodetecting_python_toolchain = "register_autodetecting_python_toolchain")
10-
load("//py/private/toolchain:tools.bzl", "TOOLCHAIN_PLATFORMS", "prebuilt_tool_repo")
11-
load("//py/private/toolchain:repo.bzl", "prerelease_toolchains_repo", "toolchains_repo")
12-
load("//tools:version.bzl", "IS_PRERELEASE")
139

1410
def http_archive(name, **kwargs):
1511
maybe(_http_archive, name = name, **kwargs)
1612

17-
register_autodetecting_python_toolchain = _register_autodetecting_python_toolchain
18-
19-
DEFAULT_TOOLS_REPOSITORY = "rules_py_tools"
2013

2114
# WARNING: any changes in this function may be BREAKING CHANGES for users
2215
# because we'll fetch a dependency which may be different from one that
@@ -26,12 +19,8 @@ DEFAULT_TOOLS_REPOSITORY = "rules_py_tools"
2619
# and released only in semver majors.
2720

2821
# buildifier: disable=unnamed-macro
29-
def rules_py_dependencies(register_toolchains = True):
30-
"""Fetch rules_py's dependencies
31-
32-
Args:
33-
register_toolchains: whether to also do default toolchain registration
34-
"""
22+
def rules_py_dependencies():
23+
"""Fetch rules_py's dependencies"""
3524

3625
# The minimal version of bazel_skylib we require
3726
http_archive(
@@ -53,30 +42,4 @@ def rules_py_dependencies(register_toolchains = True):
5342
sha256 = "c68bdc4fbec25de5b5493b8819cfc877c4ea299c0dcb15c244c5a00208cde311",
5443
strip_prefix = "rules_python-0.31.0",
5544
url = "https://github.com/bazelbuild/rules_python/releases/download/0.31.0/rules_python-0.31.0.tar.gz",
56-
)
57-
58-
if register_toolchains:
59-
rules_py_toolchains()
60-
61-
def rules_py_toolchains(name = DEFAULT_TOOLS_REPOSITORY, register = True, is_prerelease = IS_PRERELEASE):
62-
"""Create a downloaded toolchain for every tool under every supported platform.
63-
64-
Args:
65-
name: prefix used in created repositories
66-
register: whether to call the register_toolchains, should be True for WORKSPACE and False for bzlmod.
67-
is_prerelease: True iff there are no pre-built tool binaries for this version of rules_py
68-
"""
69-
if is_prerelease:
70-
prerelease_toolchains_repo(name = name)
71-
if register:
72-
native.register_toolchains(
73-
"@aspect_rules_py//py/private/toolchain/venv/...",
74-
"@aspect_rules_py//py/private/toolchain/unpack/...",
75-
)
76-
else:
77-
for platform in TOOLCHAIN_PLATFORMS.keys():
78-
prebuilt_tool_repo(name = ".".join([name, platform]), platform = platform)
79-
toolchains_repo(name = name, user_repository_name = name)
80-
81-
if register:
82-
native.register_toolchains("@{}//:all".format(name))
45+
)

py/toolchains.bzl

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""Declare toolchains"""
2+
3+
load("//py/private/toolchain:autodetecting.bzl", _register_autodetecting_python_toolchain = "register_autodetecting_python_toolchain")
4+
load("//py/private/toolchain:repo.bzl", "prerelease_toolchains_repo", "toolchains_repo")
5+
load("//py/private/toolchain:tools.bzl", "TOOLCHAIN_PLATFORMS", "prebuilt_tool_repo")
6+
load("//tools:version.bzl", "IS_PRERELEASE")
7+
8+
9+
register_autodetecting_python_toolchain = _register_autodetecting_python_toolchain
10+
11+
DEFAULT_TOOLS_REPOSITORY = "rules_py_tools"
12+
13+
def rules_py_toolchains(name = DEFAULT_TOOLS_REPOSITORY, register = True, is_prerelease = IS_PRERELEASE):
14+
"""Create a downloaded toolchain for every tool under every supported platform.
15+
16+
Args:
17+
name: prefix used in created repositories
18+
register: whether to call the register_toolchains, should be True for WORKSPACE and False for bzlmod.
19+
is_prerelease: True iff there are no pre-built tool binaries for this version of rules_py
20+
"""
21+
if is_prerelease:
22+
prerelease_toolchains_repo(name = name)
23+
if register:
24+
native.register_toolchains(
25+
"@aspect_rules_py//py/private/toolchain/venv/...",
26+
"@aspect_rules_py//py/private/toolchain/unpack/...",
27+
)
28+
else:
29+
for platform in TOOLCHAIN_PLATFORMS.keys():
30+
prebuilt_tool_repo(name = ".".join([name, platform]), platform = platform)
31+
toolchains_repo(name = name, user_repository_name = name)
32+
33+
if register:
34+
native.register_toolchains("@{}//:all".format(name))

0 commit comments

Comments
 (0)