Skip to content

Commit a32cf5c

Browse files
committed
feat: introduce "core" package at /nodejs
Motivation is described by #2892 Some advantages of this approach: - We now follow the style guide at https://docs.bazel.build/versions/main/skylark/deploying.html - Gives us a 'clean room' to eventually reduce the scope of the project. - Allows others to develop their own competing nodejs rules without having to start from scratch. - Allows the user to declare two different node versions since they control the name of the external repository we create
1 parent d0f184f commit a32cf5c

23 files changed

+866
-723
lines changed

.bazelrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import %workspace%/common.bazelrc
55
# This lets us glob() up all the files inside the examples to make them inputs to tests
66
# To update these lines, just run `yarn bazel:update-deleted-packages`
77
# (Note, we cannot use common --deleted_packages because the bazel version command doesn't support it)
8-
build --deleted_packages=e2e/bazel_managed_deps,e2e/concatjs_devserver,e2e/concatjs_devserver/genrule,e2e/concatjs_devserver/subpackage,e2e/concatjs_devserver_directory_artifacts,e2e/concatjs_devserver_directory_artifacts/genrule,e2e/concatjs_devserver_directory_artifacts/subpackage,e2e/coverage,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/nodejs_image,e2e/nodejs_image/foolib,e2e/nodejs_repository,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/typescript,e2e/webapp,examples/angular,examples/angular/e2e,examples/angular/src,examples/angular/src/app,examples/angular/src/app/hello-world,examples/angular/src/app/home,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/assets,examples/angular/src/lib/shorten,examples/angular/src/shared/material,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/assets,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/shared/material,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/create-react-app,examples/cypress,examples/esbuild,examples/esbuild/src,examples/from_source,examples/jest,examples/jest/ts,examples/jest/ts/src,examples/jest/ts/test,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protobufjs,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/vue,examples/vue/src,examples/vue/src/components/HelloWorld,examples/web_testing,examples/webapp,examples/worker
9-
query --deleted_packages=e2e/bazel_managed_deps,e2e/concatjs_devserver,e2e/concatjs_devserver/genrule,e2e/concatjs_devserver/subpackage,e2e/concatjs_devserver_directory_artifacts,e2e/concatjs_devserver_directory_artifacts/genrule,e2e/concatjs_devserver_directory_artifacts/subpackage,e2e/coverage,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/nodejs_image,e2e/nodejs_image/foolib,e2e/nodejs_repository,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/typescript,e2e/webapp,examples/angular,examples/angular/e2e,examples/angular/src,examples/angular/src/app,examples/angular/src/app/hello-world,examples/angular/src/app/home,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/assets,examples/angular/src/lib/shorten,examples/angular/src/shared/material,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/assets,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/shared/material,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/create-react-app,examples/cypress,examples/esbuild,examples/esbuild/src,examples/from_source,examples/jest,examples/jest/ts,examples/jest/ts/src,examples/jest/ts/test,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protobufjs,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/vue,examples/vue/src,examples/vue/src/components/HelloWorld,examples/web_testing,examples/webapp,examples/worker
8+
build --deleted_packages=e2e/bazel_managed_deps,e2e/concatjs_devserver,e2e/concatjs_devserver/genrule,e2e/concatjs_devserver/subpackage,e2e/concatjs_devserver_directory_artifacts,e2e/concatjs_devserver_directory_artifacts/genrule,e2e/concatjs_devserver_directory_artifacts/subpackage,e2e/core,e2e/coverage,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/nodejs_image,e2e/nodejs_image/foolib,e2e/nodejs_repository,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/typescript,e2e/webapp,examples/angular,examples/angular/e2e,examples/angular/src,examples/angular/src/app,examples/angular/src/app/hello-world,examples/angular/src/app/home,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/assets,examples/angular/src/lib/shorten,examples/angular/src/shared/material,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/assets,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/shared/material,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/create-react-app,examples/cypress,examples/esbuild,examples/esbuild/src,examples/from_source,examples/jest,examples/jest/ts,examples/jest/ts/src,examples/jest/ts/test,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protobufjs,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/vue,examples/vue/src,examples/vue/src/components/HelloWorld,examples/web_testing,examples/webapp,examples/worker
9+
query --deleted_packages=e2e/bazel_managed_deps,e2e/concatjs_devserver,e2e/concatjs_devserver/genrule,e2e/concatjs_devserver/subpackage,e2e/concatjs_devserver_directory_artifacts,e2e/concatjs_devserver_directory_artifacts/genrule,e2e/concatjs_devserver_directory_artifacts/subpackage,e2e/core,e2e/coverage,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/nodejs_image,e2e/nodejs_image/foolib,e2e/nodejs_repository,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/typescript,e2e/webapp,examples/angular,examples/angular/e2e,examples/angular/src,examples/angular/src/app,examples/angular/src/app/hello-world,examples/angular/src/app/home,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/assets,examples/angular/src/lib/shorten,examples/angular/src/shared/material,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/assets,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/shared/material,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/create-react-app,examples/cypress,examples/esbuild,examples/esbuild/src,examples/from_source,examples/jest,examples/jest/ts,examples/jest/ts/src,examples/jest/ts/test,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protobufjs,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/vue,examples/vue/src,examples/vue/src/components/HelloWorld,examples/web_testing,examples/webapp,examples/worker
1010

1111
# Mock versioning command to test the --stamp behavior
1212
build --workspace_status_command="echo BUILD_SCM_VERSION 1.2.3"

BUILD.bazel

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ pkg_npm(
9393
"//internal/pkg_web:package_contents",
9494
"//internal/providers:package_contents",
9595
"//internal/runfiles:package_contents",
96+
"//nodejs:package_contents",
9697
"//third_party/github.com/bazelbuild/bazel:package_contents",
9798
"//third_party/github.com/bazelbuild/bazel-skylib:package_contents",
9899
"//third_party/github.com/bazelbuild/bazel/tools/bash/runfiles:package_contents",
@@ -122,4 +123,17 @@ pkg_tar(
122123
strip_prefix = "./rules_nodejs_package",
123124
tags = ["manual"],
124125
)
126+
127+
pkg_tar(
128+
name = "release-core",
129+
srcs = [
130+
"LICENSE",
131+
"README.md",
132+
"//nodejs:package_contents",
133+
# TODO(5.0) remove this and depend on real skylib
134+
"//third_party/github.com/bazelbuild/bazel-skylib:package_contents",
135+
],
136+
extension = "tar.gz",
137+
strip_prefix = ".",
138+
)
125139
# END-INTERNAL

docs/Built-ins.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ This is necessary to bootstrap Bazel to run the package manager to download othe
1919

2020
<pre>
2121
node_repositories(<a href="#node_repositories-name">name</a>, <a href="#node_repositories-node_download_auth">node_download_auth</a>, <a href="#node_repositories-node_repositories">node_repositories</a>, <a href="#node_repositories-node_urls">node_urls</a>, <a href="#node_repositories-node_version">node_version</a>,
22-
<a href="#node_repositories-package_json">package_json</a>, <a href="#node_repositories-preserve_symlinks">preserve_symlinks</a>, <a href="#node_repositories-repo_mapping">repo_mapping</a>, <a href="#node_repositories-use_nvmrc">use_nvmrc</a>, <a href="#node_repositories-vendored_node">vendored_node</a>,
22+
<a href="#node_repositories-package_json">package_json</a>, <a href="#node_repositories-platform">platform</a>, <a href="#node_repositories-preserve_symlinks">preserve_symlinks</a>, <a href="#node_repositories-repo_mapping">repo_mapping</a>, <a href="#node_repositories-use_nvmrc">use_nvmrc</a>, <a href="#node_repositories-vendored_node">vendored_node</a>,
2323
<a href="#node_repositories-vendored_yarn">vendored_yarn</a>, <a href="#node_repositories-yarn_download_auth">yarn_download_auth</a>, <a href="#node_repositories-yarn_repositories">yarn_repositories</a>, <a href="#node_repositories-yarn_urls">yarn_urls</a>, <a href="#node_repositories-yarn_version">yarn_version</a>)
2424
</pre>
2525

@@ -178,6 +178,12 @@ Defaults to `"14.17.5"`
178178

179179
Defaults to `[]`
180180

181+
<h4 id="node_repositories-platform">platform</h4>
182+
183+
(*String*): Internal use only. Which platform to install as a toolchain. If unset, we assume the repository is named nodejs_[platform]
184+
185+
Defaults to `""`
186+
181187
<h4 id="node_repositories-preserve_symlinks">preserve_symlinks</h4>
182188

183189
(*Boolean*): Turn on --node_options=--preserve-symlinks for nodejs_binary and nodejs_test rules.

e2e/BUILD.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ e2e_integration_test(
6060
name = "e2e_node_loader_preserve_symlinks",
6161
)
6262

63+
e2e_integration_test(
64+
name = "e2e_core",
65+
repositories = {"//:release-core": "rules_nodejs"},
66+
)
67+
6368
e2e_integration_test(
6469
name = "e2e_nodejs_image",
6570
bazel_commands = [

e2e/core/BUILD.bazel

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
load("@bazel_skylib//rules:write_file.bzl", "write_file")
2+
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
3+
4+
write_file(
5+
name = "js",
6+
out = "some.js",
7+
content = ["require('fs').writeFileSync(process.argv[2], 'stuff')"],
8+
)
9+
10+
# Temporary fixture until we have toolchains hooked up in the core package
11+
alias(
12+
name = "node_bin",
13+
actual = select({
14+
"@bazel_tools//src/conditions:darwin_arm64": "@node16_darwin_arm64//:node_bin",
15+
"@bazel_tools//src/conditions:darwin_x86_64": "@node16_darwin_amd64//:node_bin",
16+
"@bazel_tools//src/conditions:linux_aarch64": "@node16_linux_arm64//:node_bin",
17+
"@bazel_tools//src/conditions:linux_s390x": "@node16_linux_s390x//:node_bin",
18+
"@bazel_tools//src/conditions:linux_x86_64": "@node16_linux_amd64//:node_bin",
19+
"@bazel_tools//src/conditions:linux_ppc64le": "@node16_linux_ppc64le//:node_bin",
20+
"@bazel_tools//src/conditions:windows": "@node16_windows_amd64//:node_bin",
21+
"//conditions:default": "@node16_linux_amd64//:node_bin",
22+
}),
23+
)
24+
25+
genrule(
26+
name = "try",
27+
srcs = ["some.js"],
28+
outs = ["thing"],
29+
cmd = "$(execpath :node_bin) $(execpath some.js) $@",
30+
tools = [":node_bin"],
31+
)
32+
33+
write_file(
34+
name = "write_expected",
35+
out = "expected",
36+
content = ["stuff"],
37+
)
38+
39+
diff_test(
40+
name = "test",
41+
file1 = "expected",
42+
file2 = "thing",
43+
)

e2e/core/WORKSPACE

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
workspace(name = "e2e_core")
2+
3+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
4+
5+
http_archive(
6+
name = "rules_nodejs",
7+
sha256 = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
8+
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/4.1.0/rules_nodejs-core-4.1.0.tar.gz"],
9+
)
10+
11+
load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains", "rules_nodejs_dependencies")
12+
13+
# This just gives us bazel-skylib
14+
rules_nodejs_dependencies()
15+
16+
nodejs_register_toolchains(
17+
name = "node16",
18+
node_version = "16.9.0",
19+
)

index.for_docs.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ load("//internal/common:params_file.bzl", _params_file = "params_file")
2929
load("//internal/generated_file_test:generated_file_test.bzl", _generated_file_test = "generated_file_test")
3030
load("//internal/js_library:js_library.bzl", _js_library = "js_library")
3131
load("//internal/node:node.bzl", _nodejs_binary = "nodejs_binary", _nodejs_test = "nodejs_test")
32-
load("//internal/node:node_repositories.bzl", _node_repositories = "node_repositories_rule")
32+
load("//nodejs:repositories.bzl", _node_repositories = "node_repositories")
3333
load("//internal/node:npm_package_bin.bzl", _npm_bin = "npm_package_bin")
3434
load("//internal/npm_install:npm_install.bzl", _npm_install = "npm_install", _yarn_install = "yarn_install")
3535
load("//internal/pkg_npm:pkg_npm.bzl", _pkg_npm = "pkg_npm")

internal/bazel_integration_test/bazel_integration_test.bzl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,7 @@ def rules_nodejs_integration_test(name, **kwargs):
271271
]
272272

273273
# replace the following repositories with the generated archives
274-
repositories = kwargs.pop("repositories", {})
275-
repositories["//:release"] = "build_bazel_rules_nodejs"
274+
repositories = kwargs.pop("repositories", {"//:release": "build_bazel_rules_nodejs"})
276275

277276
# convert the npm packages into the tar output
278277
npm_packages = kwargs.pop("npm_packages", {})

internal/copy_repository/copy_repository.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"""Custom copy_repository rule used by npm_install and yarn_install.
1616
"""
1717

18-
load("@build_bazel_rules_nodejs//internal/common:os_name.bzl", "is_windows_os")
18+
load("@build_bazel_rules_nodejs//nodejs/private:os_name.bzl", "is_windows_os")
1919

2020
def _copy_file(rctx, src):
2121
rctx.template(src.basename, src)

internal/node/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ bzl_library(
2929
visibility = ["//visibility:public"],
3030
deps = [
3131
"//internal/npm_install:bzl",
32+
"//nodejs:bzl",
3233
"//third_party/github.com/bazelbuild/bazel-skylib:bzl",
3334
"//toolchains/node:bzl",
3435
],

0 commit comments

Comments
 (0)