Skip to content

Commit a02cf07

Browse files
committed
Bazel: add nodejs mirror
This patches `rules_nodejs` with the contents of bazel-contrib/rules_nodejs#3763 in order to allow specifying a mirror for nodejs, as nodejs.org has hit us with intermittent downtimes.
1 parent 5b1b60c commit a02cf07

File tree

7 files changed

+182
-1
lines changed

7 files changed

+182
-1
lines changed

MODULE.bazel

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ local_path_override(
1616
bazel_dep(name = "platforms", version = "0.0.10")
1717
bazel_dep(name = "rules_go", version = "0.48.0")
1818
bazel_dep(name = "rules_pkg", version = "0.10.1")
19-
bazel_dep(name = "rules_nodejs", version = "6.2.0")
19+
bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1")
2020
bazel_dep(name = "rules_python", version = "0.32.2")
2121
bazel_dep(name = "bazel_skylib", version = "1.6.1")
2222
bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl")
@@ -85,6 +85,10 @@ use_repo(
8585
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
8686
node.toolchain(
8787
name = "nodejs",
88+
node_urls = [
89+
"https://nodejs.org/dist/v{version}/{filename}",
90+
"https://mirrors.dotsrc.org/nodejs/release/v{version}/{filename}",
91+
],
8892
node_version = "18.15.0",
8993
)
9094
use_repo(node, "nodejs", "nodejs_toolchains")
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
"bzlmod declaration for bazelbuild/rules_nodejs"
2+
3+
module(
4+
name = "rules_nodejs",
5+
version = "6.2.0-codeql.1",
6+
compatibility_level = 1,
7+
)
8+
9+
# Lower-bounds (minimum) versions for direct runtime dependencies
10+
bazel_dep(name = "bazel_skylib", version = "1.4.1")
11+
bazel_dep(name = "platforms", version = "0.0.5")
12+
13+
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
14+
15+
# Note, this gets the default version of Node.js from
16+
# https://github.com/bazelbuild/rules_nodejs/blob/main/nodejs/repositories.bzl#L11
17+
node.toolchain()
18+
use_repo(node, "nodejs_toolchains")
19+
20+
# Toolchain registration under bzlmod should match the order of WORKSPACE registration
21+
# which is the order specified in the PLATFORMS dict https://github.com/bazelbuild/rules_nodejs/blob/4c373209b058d46f2a5f9ab9f8abf11b161ae459/nodejs/private/nodejs_toolchains_repo.bzl#L20.
22+
# For each platform, `:<PLATFORM>_toolchain_target` should be registered before `:<PLATFORM>_toolchain`,
23+
# https://github.com/bazelbuild/rules_nodejs/blob/4c373209b058d46f2a5f9ab9f8abf11b161ae459/nodejs/repositories.bzl#L461/.
24+
# See https://github.com/bazelbuild/bazel/issues/19645 and https://github.com/bazelbuild/rules_nodejs/pull/3750 for more context.
25+
register_toolchains("@nodejs_toolchains//:linux_amd64_toolchain_target")
26+
27+
register_toolchains("@nodejs_toolchains//:linux_amd64_toolchain")
28+
29+
register_toolchains("@nodejs_toolchains//:linux_arm64_toolchain_target")
30+
31+
register_toolchains("@nodejs_toolchains//:linux_arm64_toolchain")
32+
33+
register_toolchains("@nodejs_toolchains//:linux_s390x_toolchain_target")
34+
35+
register_toolchains("@nodejs_toolchains//:linux_s390x_toolchain")
36+
37+
register_toolchains("@nodejs_toolchains//:linux_ppc64le_toolchain_target")
38+
39+
register_toolchains("@nodejs_toolchains//:linux_ppc64le_toolchain")
40+
41+
register_toolchains("@nodejs_toolchains//:darwin_amd64_toolchain_target")
42+
43+
register_toolchains("@nodejs_toolchains//:darwin_amd64_toolchain")
44+
45+
register_toolchains("@nodejs_toolchains//:darwin_arm64_toolchain_target")
46+
47+
register_toolchains("@nodejs_toolchains//:darwin_arm64_toolchain")
48+
49+
register_toolchains("@nodejs_toolchains//:windows_amd64_toolchain_target")
50+
51+
register_toolchains("@nodejs_toolchains//:windows_amd64_toolchain")
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
diff --git a/nodejs/extensions.bzl b/nodejs/extensions.bzl
2+
index 1de6f363..1d9d21f0 100644
3+
--- a/nodejs/extensions.bzl
4+
+++ b/nodejs/extensions.bzl
5+
@@ -1,6 +1,12 @@
6+
"extensions for bzlmod"
7+
8+
-load(":repositories.bzl", "DEFAULT_NODE_REPOSITORY", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
9+
+load(
10+
+ ":repositories.bzl",
11+
+ "DEFAULT_NODE_REPOSITORY",
12+
+ "DEFAULT_NODE_URL",
13+
+ "DEFAULT_NODE_VERSION",
14+
+ "nodejs_register_toolchains",
15+
+)
16+
17+
def _toolchain_extension(module_ctx):
18+
registrations = {}
19+
@@ -8,33 +14,37 @@ def _toolchain_extension(module_ctx):
20+
for toolchain in mod.tags.toolchain:
21+
if toolchain.name != DEFAULT_NODE_REPOSITORY and not mod.is_root:
22+
fail("Only the root module may provide a name for the node toolchain.")
23+
-
24+
if toolchain.name in registrations.keys():
25+
if toolchain.name == DEFAULT_NODE_REPOSITORY:
26+
# Prioritize the root-most registration of the default node toolchain version and
27+
# ignore any further registrations (modules are processed breadth-first)
28+
continue
29+
- if toolchain.node_version == registrations[toolchain.name].node_version and toolchain.node_version_from_nvmrc == registrations[toolchain.name].node_version_from_nvmrc:
30+
+ if (toolchain.node_version != registrations[toolchain.name].node_version or
31+
+ toolchain.node_version_from_nvmrc != registrations[toolchain.name].node_version_from_nvmrc):
32+
+ fail("Multiple conflicting toolchains declared for name {} ({} and {})".format(
33+
+ toolchain.name,
34+
+ toolchain.node_version,
35+
+ registrations[toolchain.name].node_version,
36+
+ ))
37+
+ elif toolchain.node_urls != registrations[toolchain.name].node_urls:
38+
+ fail("Multiple toolchains with conflicting urls declared for name {} ({} and {})".format(
39+
+ toolchain.name,
40+
+ toolchain.node_urls,
41+
+ registrations[toolchain.name].node_urls,
42+
+ ))
43+
+ else:
44+
# No problem to register a matching toolchain twice
45+
continue
46+
- fail("Multiple conflicting toolchains declared for name {} ({} and {})".format(
47+
- toolchain.name,
48+
- toolchain.node_version,
49+
- registrations[toolchain.name],
50+
- ))
51+
else:
52+
- registrations[toolchain.name] = struct(
53+
- node_version = toolchain.node_version,
54+
- node_version_from_nvmrc = toolchain.node_version_from_nvmrc,
55+
- include_headers = toolchain.include_headers,
56+
- )
57+
+ registrations[toolchain.name] = toolchain
58+
59+
- for k, v in registrations.items():
60+
+ for k, t in registrations.items():
61+
nodejs_register_toolchains(
62+
name = k,
63+
- node_version = v.node_version,
64+
- node_version_from_nvmrc = v.node_version_from_nvmrc,
65+
- include_headers = v.include_headers,
66+
+ node_version = t.node_version,
67+
+ node_version_from_nvmrc = t.node_version_from_nvmrc,
68+
+ node_urls = t.node_urls,
69+
+ include_headers = t.include_headers,
70+
register = False,
71+
)
72+
73+
@@ -62,6 +72,10 @@ If set then the version found in the .nvmrc file is used instead of the one spec
74+
This setting creates a dependency on a c++ toolchain.
75+
""",
76+
),
77+
+ "node_urls": attr.string_list(
78+
+ doc = "Custom list of URL formats to use to download NodeJS, containing {version} and {filename}",
79+
+ default = [DEFAULT_NODE_URL],
80+
+ ),
81+
}),
82+
},
83+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
===================================================================
2+
--- a/MODULE.bazel
3+
+++ b/MODULE.bazel
4+
@@ -1,9 +1,9 @@
5+
"bzlmod declaration for bazelbuild/rules_nodejs"
6+
7+
module(
8+
name = "rules_nodejs",
9+
- version = "0.0.0",
10+
+ version = "6.2.0",
11+
compatibility_level = 1,
12+
)
13+
14+
# Lower-bounds (minimum) versions for direct runtime dependencies
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
bcr_test_module:
2+
module_path: "e2e/smoke"
3+
matrix:
4+
bazel: ["7.x"]
5+
platform: ["debian10", "macos", "ubuntu2004", "windows"]
6+
tasks:
7+
run_tests:
8+
name: "Run test module"
9+
bazel: ${{ bazel }}
10+
platform: ${{ platform }}
11+
test_targets:
12+
- "//..."
13+
test_flags:
14+
- "--test_tag_filters=-skip-on-bazelci-windows"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"integrity": "sha256-h8YXHFvntpU41Gldne0priYmxe12qa3u3ON7Y8c772c=",
3+
"strip_prefix": "rules_nodejs-6.2.0",
4+
"url": "https://github.com/bazelbuild/rules_nodejs/releases/download/v6.2.0/rules_nodejs-v6.2.0.tar.gz",
5+
"patches": {
6+
"module_dot_bazel_version.patch": "sha256-T4mwfyYatnFjIKG+tL8m9++41/1AG7zMPpZQFdqoIK4=",
7+
"allow_node_urls.patch": "sha256-vbZx3du+2gzTDopNgUOzWJVznt3055nsQuwCfgieLGY="
8+
},
9+
"patch_strip": 1
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"versions": [
3+
"6.2.0-codeql.1"
4+
]
5+
}

0 commit comments

Comments
 (0)