mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 19:21:50 +00:00
chore(bazel): upgrade to rules_js 2.0 RC (#63022)
Bumps to rules_js (and friends) to 2.0 RCs. This brings in performance improvements for analysis phase since npm package depsets and now much smaller. It also adds support for pnpm v9 and allows for linking js_library targets as 1p deps instead of npm_package targets. See https://github.com/aspect-build/rules_js/issues/1671 for more details. ## Test plan CI ## Changelog
This commit is contained in:
parent
1a7e1b9686
commit
2d3d918ffa
42
WORKSPACE
42
WORKSPACE
@ -33,33 +33,25 @@ http_archive(
|
||||
url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.7.7/bazel-lib-v2.7.7.tar.gz",
|
||||
)
|
||||
|
||||
# rules_js defines an older rules_nodejs, so we override it here
|
||||
http_archive(
|
||||
name = "rules_nodejs",
|
||||
sha256 = "3e8369256ad63197959d2253c473a9dcc57c2841d176190e59b91d25d4fe9e67",
|
||||
strip_prefix = "rules_nodejs-6.1.1",
|
||||
url = "https://github.com/bazelbuild/rules_nodejs/releases/download/v6.1.1/rules_nodejs-v6.1.1.tar.gz",
|
||||
)
|
||||
|
||||
http_archive(
|
||||
name = "aspect_rules_js",
|
||||
sha256 = "2cfb3875e1231cefd3fada6774f2c0c5a99db0070e0e48ea398acbff7c6c765b",
|
||||
strip_prefix = "rules_js-1.42.3",
|
||||
url = "https://github.com/aspect-build/rules_js/releases/download/v1.42.3/rules_js-v1.42.3.tar.gz",
|
||||
sha256 = "25e06ac98ce2dd44d74e728e63e1c88e707d0972db20d7e7339c8e458335b4e3",
|
||||
strip_prefix = "rules_js-2.0.0-rc2",
|
||||
url = "https://github.com/aspect-build/rules_js/releases/download/v2.0.0-rc2/rules_js-v2.0.0-rc2.tar.gz",
|
||||
)
|
||||
|
||||
http_archive(
|
||||
name = "aspect_rules_ts",
|
||||
sha256 = "da6620683ab2c28014e9c82e8a8fdbb724cd67f6a1d27317f42a8ceb14048b9b",
|
||||
strip_prefix = "rules_ts-2.4.1",
|
||||
url = "https://github.com/aspect-build/rules_ts/releases/download/v2.4.1/rules_ts-v2.4.1.tar.gz",
|
||||
sha256 = "3ea5cdb825d5dbffe286b3d9c5197a2648cf04b5e6bd8b913a45823cdf0ae960",
|
||||
strip_prefix = "rules_ts-3.0.0-rc0",
|
||||
url = "https://github.com/aspect-build/rules_ts/releases/download/v3.0.0-rc0/rules_ts-v3.0.0-rc0.tar.gz",
|
||||
)
|
||||
|
||||
http_archive(
|
||||
name = "aspect_rules_swc",
|
||||
sha256 = "1908691bde56321423c3f3beaf37f5fc21c51614869572e5f626cea058649373",
|
||||
strip_prefix = "rules_swc-1.2.3",
|
||||
url = "https://github.com/aspect-build/rules_swc/releases/download/v1.2.3/rules_swc-v1.2.3.tar.gz",
|
||||
sha256 = "c085647585c3d01bee3966eb9ba433a1efbb0ee79bb1b8c67882a81d82a9b37f",
|
||||
strip_prefix = "rules_swc-2.0.0-rc0",
|
||||
url = "https://github.com/aspect-build/rules_swc/releases/download/v2.0.0-rc0/rules_swc-v2.0.0-rc0.tar.gz",
|
||||
)
|
||||
|
||||
http_archive(
|
||||
@ -207,16 +199,12 @@ load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
|
||||
|
||||
rules_js_dependencies()
|
||||
|
||||
# node toolchain setup ==========================
|
||||
load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
|
||||
load("@aspect_rules_js//js:toolchains.bzl", "rules_js_register_toolchains")
|
||||
|
||||
nodejs_register_toolchains(
|
||||
name = "nodejs",
|
||||
node_version = "20.8.0",
|
||||
)
|
||||
rules_js_register_toolchains(node_version = "20.8.0")
|
||||
|
||||
# rules_js npm setup ============================
|
||||
load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
|
||||
load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
|
||||
|
||||
npm_translate_lock(
|
||||
name = "npm",
|
||||
@ -270,9 +258,9 @@ swc_register_toolchains(
|
||||
# rules_esbuild setup ===========================
|
||||
http_archive(
|
||||
name = "aspect_rules_esbuild",
|
||||
sha256 = "46aab76044f040c1c0bd97672d56324619af4913cb9e96606ec37ddd4605831d",
|
||||
strip_prefix = "rules_esbuild-0.16.0",
|
||||
url = "https://github.com/aspect-build/rules_esbuild/releases/download/v0.16.0/rules_esbuild-v0.16.0.tar.gz",
|
||||
sha256 = "ef7163a2e8e319f8a9a70560788dd899126aebf3538c76f8bc1f0b4b52ba4b56",
|
||||
strip_prefix = "rules_esbuild-0.21.0-rc1",
|
||||
url = "https://github.com/aspect-build/rules_esbuild/releases/download/v0.21.0-rc1/rules_esbuild-v0.21.0-rc1.tar.gz",
|
||||
)
|
||||
|
||||
load("@aspect_rules_esbuild//esbuild:dependencies.bzl", "rules_esbuild_dependencies")
|
||||
|
||||
@ -4,6 +4,8 @@ load("@aspect_rules_esbuild//esbuild:defs.bzl", _esbuild = "esbuild")
|
||||
def esbuild(name, **kwargs):
|
||||
_esbuild(
|
||||
name,
|
||||
# TODO: work through build failures when sandbox plugin is enabled so that bundling is hermetic
|
||||
bazel_sandbox_plugin = False,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
@ -12,6 +14,8 @@ def esbuild_web_app(name, **kwargs):
|
||||
|
||||
_esbuild(
|
||||
name = bundle_name,
|
||||
# TODO: work through build failures when sandbox plugin is enabled so that bundling is hermetic
|
||||
bazel_sandbox_plugin = False,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "COPY_FILE_TO_BIN_TOOLCHAINS", "copy_files_to_bin_actions")
|
||||
load("@aspect_rules_js//js:defs.bzl", "js_library")
|
||||
load("@aspect_rules_js//js:libs.bzl", "js_lib_helpers")
|
||||
load("@aspect_rules_js//js:providers.bzl", "JsInfo")
|
||||
load("//dev:js_lib.bzl", "gather_files_from_js_providers", "gather_runfiles")
|
||||
|
||||
def eslint_config_and_lint_root(name = "eslint_config", config_deps = [], root_js_deps = []):
|
||||
"""
|
||||
@ -58,17 +58,17 @@ def _custom_eslint_impl(ctx):
|
||||
|
||||
inputs_depset = depset(
|
||||
copied_srcs + [ctx.executable.binary],
|
||||
transitive = [gather_files_from_js_providers(
|
||||
transitive = [js_lib_helpers.gather_files_from_js_infos(
|
||||
targets = [ctx.attr.config] + ctx.attr.deps,
|
||||
include_sources = False,
|
||||
include_types = True, # we have to include types because we need to lint the types.
|
||||
include_transitive_sources = False,
|
||||
# We have to include declarations because we need to lint the types.
|
||||
include_declarations = True,
|
||||
include_npm_linked_packages = True,
|
||||
include_transitive_types = True, # we have to include types because we need to lint the types.
|
||||
include_npm_sources = True,
|
||||
)],
|
||||
)
|
||||
|
||||
runfiles = gather_runfiles(
|
||||
runfiles = js_lib_helpers.gather_runfiles(
|
||||
ctx = ctx,
|
||||
sources = [],
|
||||
data = [ctx.attr.config],
|
||||
|
||||
126
dev/js_lib.bzl
126
dev/js_lib.bzl
@ -1,126 +0,0 @@
|
||||
"""`js_binary` helper functions. Copied from rules_js internals.
|
||||
"""
|
||||
|
||||
load("@aspect_rules_js//js:providers.bzl", "JsInfo")
|
||||
load("@aspect_rules_js//npm:providers.bzl", "NpmPackageStoreInfo")
|
||||
|
||||
def gather_files_from_js_providers(
|
||||
targets,
|
||||
include_sources,
|
||||
include_transitive_sources,
|
||||
include_declarations,
|
||||
include_npm_linked_packages):
|
||||
"""Gathers files from JsInfo and NpmPackageStoreInfo providers.
|
||||
|
||||
Args:
|
||||
targets: list of target to gather from
|
||||
include_sources: see js_filegroup documentation
|
||||
include_transitive_sources: see js_filegroup documentation
|
||||
include_declarations: see js_filegroup documentation
|
||||
include_npm_linked_packages: see js_filegroup documentation
|
||||
|
||||
Returns:
|
||||
A depset of files
|
||||
"""
|
||||
|
||||
files_depsets = []
|
||||
|
||||
files_depsets.extend([
|
||||
target[DefaultInfo].default_runfiles.files
|
||||
for target in targets
|
||||
if DefaultInfo in target and hasattr(target[DefaultInfo], "default_runfiles")
|
||||
])
|
||||
|
||||
if include_sources:
|
||||
files_depsets.extend([
|
||||
target[JsInfo].sources
|
||||
for target in targets
|
||||
if JsInfo in target and hasattr(target[JsInfo], "sources")
|
||||
])
|
||||
|
||||
if include_transitive_sources:
|
||||
files_depsets.extend([
|
||||
target[JsInfo].transitive_sources
|
||||
for target in targets
|
||||
if JsInfo in target and hasattr(target[JsInfo], "transitive_sources")
|
||||
])
|
||||
|
||||
if include_declarations:
|
||||
files_depsets.extend([
|
||||
target[JsInfo].transitive_declarations
|
||||
for target in targets
|
||||
if JsInfo in target and hasattr(target[JsInfo], "transitive_declarations")
|
||||
])
|
||||
|
||||
if include_npm_linked_packages:
|
||||
files_depsets.extend([
|
||||
target[JsInfo].transitive_npm_linked_package_files
|
||||
for target in targets
|
||||
if JsInfo in target and hasattr(target[JsInfo], "transitive_npm_linked_package_files")
|
||||
])
|
||||
files_depsets.extend([
|
||||
target[NpmPackageStoreInfo].transitive_files
|
||||
for target in targets
|
||||
if NpmPackageStoreInfo in target and hasattr(target[NpmPackageStoreInfo], "transitive_files")
|
||||
])
|
||||
|
||||
# print(files_depsets)
|
||||
|
||||
return depset([], transitive = files_depsets)
|
||||
|
||||
def gather_runfiles(ctx, sources, data, deps):
|
||||
"""Creates a runfiles object containing files in `sources`, default outputs from `data` and transitive runfiles from `data` & `deps`.
|
||||
|
||||
As a defense in depth against `data` & `deps` targets not supplying all required runfiles, also
|
||||
gathers the transitive sources & transitive npm linked packages from the `JsInfo` &
|
||||
`NpmPackageStoreInfo` providers of `data` & `deps` targets.
|
||||
|
||||
See https://bazel.build/extending/rules#runfiles for more info on providing runfiles in build rules.
|
||||
|
||||
Args:
|
||||
ctx: the rule context
|
||||
|
||||
sources: list or depset of files which should be included in runfiles
|
||||
|
||||
data: list of data targets; default outputs and transitive runfiles are gather from these targets
|
||||
|
||||
See https://bazel.build/reference/be/common-definitions#typical.data and
|
||||
https://bazel.build/concepts/dependencies#data-dependencies for more info and guidance
|
||||
on common usage of the `data` attribute in build rules.
|
||||
|
||||
deps: list of dependency targets; only transitive runfiles are gather from these targets
|
||||
|
||||
Returns:
|
||||
A [runfiles](https://bazel.build/rules/lib/runfiles) object created with [ctx.runfiles](https://bazel.build/rules/lib/ctx#runfiles).
|
||||
"""
|
||||
|
||||
# Includes sources
|
||||
if type(sources) == "list":
|
||||
sources = depset(sources)
|
||||
transitive_files_depsets = [sources]
|
||||
|
||||
# Gather the default outputs of data targets
|
||||
transitive_files_depsets.extend([
|
||||
target[DefaultInfo].files
|
||||
for target in data
|
||||
])
|
||||
|
||||
# Gather the transitive sources & transitive npm linked packages from the JsInfo &
|
||||
# NpmPackageStoreInfo providers of data & deps targets.
|
||||
transitive_files_depsets.append(gather_files_from_js_providers(
|
||||
targets = data + deps,
|
||||
include_sources = True,
|
||||
include_transitive_sources = True,
|
||||
include_declarations = False,
|
||||
include_npm_linked_packages = True,
|
||||
))
|
||||
|
||||
# Merge the above with the transitive runfiles of data & deps.
|
||||
runfiles = ctx.runfiles(
|
||||
transitive_files = depset(transitive = transitive_files_depsets),
|
||||
).merge_all([
|
||||
target[DefaultInfo].default_runfiles
|
||||
for target in data + deps
|
||||
])
|
||||
|
||||
return runfiles
|
||||
@ -49,6 +49,8 @@ def mocha_test(name, tests, deps = [], args = [], data = [], env = {}, is_percy_
|
||||
".node": "copy",
|
||||
},
|
||||
},
|
||||
# TODO: work through build failures when sandbox plugin is enabled so that bundling is hermetic
|
||||
bazel_sandbox_plugin = False,
|
||||
)
|
||||
|
||||
args = [
|
||||
|
||||
Loading…
Reference in New Issue
Block a user