Skip to content

Commit a78bb57

Browse files
committed
feat(bazel): support Karma spec bundling with rules_js
We need AMD spec bundling for Karma, until we have our own IIFE-capable ruleset. This is a small layer on top of our much simpler spec bundling rule. Note that we switch to `rules_esbuild` as otherwise Esbuild can escape sandbox due to its Go-based resolution.
1 parent 78f80fa commit a78bb57

File tree

5 files changed

+45
-21
lines changed

5 files changed

+45
-21
lines changed

WORKSPACE

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,3 +164,23 @@ setup_dependencies_1()
164164
load("//bazel:setup_dependencies_2.bzl", "setup_dependencies_2")
165165

166166
setup_dependencies_2()
167+
168+
# TODO: Move this to the setup scripts. E.g. following proposals like:
169+
# go/ng:sharing-infra-code.
170+
http_archive(
171+
name = "aspect_rules_esbuild",
172+
sha256 = "550e33ddeb86a564b22b2c5d3f84748c6639b1b2b71fae66bf362c33392cbed8",
173+
strip_prefix = "rules_esbuild-0.21.0",
174+
url = "https://github.com/aspect-build/rules_esbuild/releases/download/v0.21.0/rules_esbuild-v0.21.0.tar.gz",
175+
)
176+
177+
load("@aspect_rules_esbuild//esbuild:dependencies.bzl", "rules_esbuild_dependencies")
178+
179+
rules_esbuild_dependencies()
180+
181+
load("@aspect_rules_esbuild//esbuild:repositories.bzl", "LATEST_ESBUILD_VERSION", "esbuild_register_toolchains")
182+
183+
esbuild_register_toolchains(
184+
name = "esbuild",
185+
esbuild_version = LATEST_ESBUILD_VERSION,
186+
)

bazel/karma/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package(default_visibility = ["//visibility:public"])
22

3-
exports_files(["karma-debug-config.js"])
3+
exports_files(["karma-debug-config.cjs"])
44

55
# Make source files available for distribution via pkg_npm
66
filegroup(

bazel/karma/index.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def _karma_debug_browsers_target(name, **web_test_args):
1515
# that is manually connected to.
1616
_karma_web_test(
1717
name = "%s_bin" % name,
18-
config_file = "//bazel/karma:karma-debug-config.js",
18+
config_file = "@devinfra//bazel/karma:karma-debug-config.cjs",
1919
tags = ["manual"],
2020
**web_test_args
2121
)
@@ -24,7 +24,7 @@ def _karma_debug_browsers_target(name, **web_test_args):
2424
native.sh_test(
2525
name = name,
2626
srcs = ["%s_bin" % name],
27-
tags = ["manual", "local", "ibazel_notify_changes"],
27+
tags = ["manual", "requires-network", "ibazel_notify_changes"],
2828
testonly = True,
2929
)
3030

File renamed without changes.

bazel/spec-bundling/index_rjs.bzl

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
load("@aspect_rules_esbuild//esbuild:defs.bzl", "esbuild")
12
load("@devinfra//bazel/spec-bundling:spec-entrypoint.bzl", "spec_entrypoint")
2-
load("@devinfra_npm//bazel:esbuild/package_json.bzl", esbuild = "bin")
33

44
def spec_bundle(name, deps, bootstrap = [], testonly = True, **kwargs):
55
spec_entrypoint(
@@ -9,29 +9,33 @@ def spec_bundle(name, deps, bootstrap = [], testonly = True, **kwargs):
99
testonly = testonly,
1010
)
1111

12-
esbuild.esbuild(
12+
esbuild(
1313
name = name,
1414
# Note: `deps` are added here to automatically collect transitive NPM
1515
# sources etc. and make them available for bundling.
1616
srcs = deps + [
1717
":%s_entrypoint" % name,
1818
],
1919
testonly = testonly,
20-
outs = [
21-
"%s_spec_bundle.spec.js" % name,
22-
"%s_spec_bundle.spec.js.map" % name,
23-
],
24-
args = [
25-
"--format=iife",
26-
"--bundle",
27-
"--resolve-extensions=.mjs,.js",
28-
"--minify",
29-
"--sourcemap=external",
30-
"--platform=node",
31-
"--outfile=%s/%s_spec_bundle.spec.js " % (native.package_name(), name),
32-
"%s/%s_entrypoint.mjs" % (native.package_name(), name),
33-
],
34-
progress_message = "Creating spec-bundle",
35-
silent_on_success = True,
20+
bundle = True,
21+
format = "iife",
22+
minify = True,
23+
sourcemap = "external",
24+
platform = "node",
25+
entry_point = ":%s_entrypoint" % name,
26+
output = "%s.spec.js" % name,
27+
**kwargs
28+
)
29+
30+
def spec_bundle_amd(name, workspace_name, **kwargs):
31+
amd_name = "%s/%s/%s" % (workspace_name, native.package_name(), name + ".spec")
32+
33+
spec_bundle(
34+
name,
35+
config = {
36+
"globalName": "__exports",
37+
"banner": {"js": "define(\"%s\", [], function() {" % amd_name},
38+
"footer": {"js": "return __exports;})"},
39+
},
3640
**kwargs
3741
)

0 commit comments

Comments
 (0)