Skip to content

Commit 0be0eeb

Browse files
thesayynalexeagle
andauthored
fix(jasmine): can not reference runner when exports_directories_only=… (#3293)
* fix(jasmine): can not reference runner when exports_directories_only=True * chore: code review comments Co-authored-by: Alex Eagle <alex@aspect.dev>
1 parent ed0249b commit 0be0eeb

File tree

9 files changed

+82
-25
lines changed

9 files changed

+82
-25
lines changed

docs/Jasmine.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,14 +98,17 @@ Defaults to `None`
9898
<h4 id="jasmine_node_test-jasmine">jasmine</h4>
9999

100100
A label providing the `@bazel/jasmine` npm dependency.
101+
Intended for internal use only.
101102

102-
Defaults to `"@npm//@bazel/jasmine"`
103+
Defaults to `None`
103104

104105
<h4 id="jasmine_node_test-jasmine_entry_point">jasmine_entry_point</h4>
105106

106107
A label providing the `@bazel/jasmine` entry point.
108+
This is a custom wrapper which adds features like sharding and ibazel support.
109+
Intended for internal use only.
107110

108-
Defaults to `Label("@npm//@bazel/jasmine:jasmine_runner.js")`
111+
Defaults to `None`
109112

110113
<h4 id="jasmine_node_test-kwargs">kwargs</h4>
111114

examples/nestjs/WORKSPACE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install")
3030

3131
yarn_install(
3232
name = "npm",
33-
exports_directories_only = False,
33+
exports_directories_only = True,
3434
package_json = "//:package.json",
3535
yarn_lock = "//:yarn.lock",
3636
)

internal/npm_install/generate_build_file.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,8 @@ async function generatePackageBuildFiles(pkg: Dep) {
386386
// If there's an index.bzl in the package then copy all the package's files
387387
// other than the BUILD file which we'll write below.
388388
// (maybe we shouldn't copy .js though, since it belongs under node_modules?)
389-
if (pkg._files.includes('index.bzl')) {
389+
const hasIndexBzl = pkg._files.includes('index.bzl')
390+
if (hasIndexBzl) {
390391
await pkg._files.filter(f => f !== 'BUILD' && f !== 'BUILD.bazel').reduce(async (prev, file) => {
391392
if (/^node_modules[/\\]/.test(file)) {
392393
// don't copy over nested node_modules
@@ -406,16 +407,23 @@ async function generatePackageBuildFiles(pkg: Dep) {
406407
await mkdirp(path.dirname(destFile));
407408
await fs.copyFile(src, destFile);
408409
}, Promise.resolve());
409-
} else {
410+
}
411+
412+
410413
const indexFile = printIndexBzl(pkg);
411414
if (indexFile.length) {
412-
await writeFile(path.posix.join(pkg._dir, 'index.bzl'), indexFile);
413-
buildFile += `
415+
await writeFile(path.posix.join(pkg._dir, hasIndexBzl ? 'private' : '', 'index.bzl'), indexFile);
416+
const buildContent = `
414417
# For integration testing
415418
exports_files(["index.bzl"])
416419
`;
420+
if (hasIndexBzl) {
421+
await writeFile(path.posix.join(pkg._dir, 'private', 'BUILD.bazel'), buildContent);
422+
} else {
423+
buildFile += buildContent;
424+
}
417425
}
418-
}
426+
419427

420428
if (!symlinkBuildFile) {
421429
await writeFile(

internal/npm_install/index.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,8 @@ async function generatePackageBuildFiles(pkg) {
249249
await writeFile(path.posix.join(pkg._dir, 'bin', 'BUILD.bazel'), generateBuildFileHeader(visibility) + binBuildFile);
250250
}
251251
}
252-
if (pkg._files.includes('index.bzl')) {
252+
const hasIndexBzl = pkg._files.includes('index.bzl');
253+
if (hasIndexBzl) {
253254
await pkg._files.filter(f => f !== 'BUILD' && f !== 'BUILD.bazel').reduce(async (prev, file) => {
254255
if (/^node_modules[/\\]/.test(file)) {
255256
return;
@@ -266,14 +267,18 @@ async function generatePackageBuildFiles(pkg) {
266267
await fs_1.promises.copyFile(src, destFile);
267268
}, Promise.resolve());
268269
}
269-
else {
270-
const indexFile = printIndexBzl(pkg);
271-
if (indexFile.length) {
272-
await writeFile(path.posix.join(pkg._dir, 'index.bzl'), indexFile);
273-
buildFile += `
270+
const indexFile = printIndexBzl(pkg);
271+
if (indexFile.length) {
272+
await writeFile(path.posix.join(pkg._dir, hasIndexBzl ? 'private' : '', 'index.bzl'), indexFile);
273+
const buildContent = `
274274
# For integration testing
275275
exports_files(["index.bzl"])
276276
`;
277+
if (hasIndexBzl) {
278+
await writeFile(path.posix.join(pkg._dir, 'private', 'BUILD.bazel'), buildContent);
279+
}
280+
else {
281+
buildFile += buildContent;
277282
}
278283
}
279284
if (!symlinkBuildFile) {

packages/jasmine/BUILD.bazel

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ stardoc(
3939
out = "README.md",
4040
input = "index.bzl",
4141
tags = ["fix-windows"],
42-
deps = [":bzl"],
42+
deps = [
43+
":bzl",
44+
"//packages/jasmine/private:bzl",
45+
],
4346
)
4447

4548
nodejs_test(
@@ -80,9 +83,6 @@ pkg_npm(
8083
"package.json",
8184
],
8285
build_file_content = "",
83-
substitutions = {
84-
"//packages/jasmine:jasmine_runner.js": "//:node_modules/@bazel/jasmine/jasmine_runner.js",
85-
},
8686
deps = [
8787
":README.md",
8888
":npm_version_check",

packages/jasmine/jasmine_node_test.bzl

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ than launching a test in Karma, for example.
1919
"""
2020

2121
load("@rules_nodejs//nodejs:providers.bzl", "JSModuleInfo")
22+
load("//packages/jasmine/private:index.bzl", "bazel_jasmine_runner_test")
2223
load("@build_bazel_rules_nodejs//internal/node:node.bzl", nodejs_test = "nodejs_test_macro")
2324

2425
def _js_sources_impl(ctx):
@@ -66,10 +67,9 @@ def jasmine_node_test(
6667
tags = [],
6768
config_file = None,
6869
use_direct_specs = None,
69-
# Replaced by pkg_npm with jasmine = "//@bazel/jasmine",
70-
jasmine = "//packages/jasmine",
71-
# Replaced by pkg_npm with jasmine_entry_point = "//:node_modules/@bazel/jasmine/jasmine_runner.js",
72-
jasmine_entry_point = Label("//packages/jasmine:jasmine_runner.js"),
70+
# TODO(6.0): remove these two attributes, users should never interact with them
71+
jasmine = None,
72+
jasmine_entry_point = None,
7373
**kwargs):
7474
"""Runs tests in NodeJS using the Jasmine test runner.
7575
@@ -103,7 +103,12 @@ def jasmine_node_test(
103103
More info: https://github.com/bazelbuild/rules_nodejs/pull/2576
104104
105105
jasmine: A label providing the `@bazel/jasmine` npm dependency.
106+
Intended for internal use only.
107+
106108
jasmine_entry_point: A label providing the `@bazel/jasmine` entry point.
109+
This is a custom wrapper which adds features like sharding and ibazel support.
110+
Intended for internal use only.
111+
107112
**kwargs: Remaining arguments are passed to the test rule
108113
"""
109114
if kwargs.pop("coverage", False):
@@ -117,7 +122,10 @@ def jasmine_node_test(
117122
use_direct_specs = use_direct_specs,
118123
)
119124

120-
all_data = data + srcs + deps + [Label(jasmine)]
125+
all_data = data + srcs + deps
126+
127+
if jasmine != None:
128+
all_data.append(jasmine)
121129

122130
# BEGIN-INTERNAL
123131
# Only used when running tests in the rules_nodejs repo.
@@ -142,13 +150,20 @@ def jasmine_node_test(
142150
pkg = Label("%s//%s:__pkg__" % (native.repository_name(), native.package_name()))
143151
all_data.append(pkg.relative(config_file))
144152

145-
nodejs_test(
153+
kwargs = dict(
146154
name = name,
147155
data = all_data,
148-
entry_point = jasmine_entry_point,
149156
templated_args = templated_args,
150157
testonly = 1,
151158
expected_exit_code = expected_exit_code,
152159
tags = tags,
153160
**kwargs
154161
)
162+
163+
if jasmine_entry_point:
164+
nodejs_test(
165+
entry_point = jasmine_entry_point,
166+
**kwargs
167+
)
168+
else:
169+
bazel_jasmine_runner_test(**kwargs)

packages/jasmine/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
"jasmine",
1616
"bazel"
1717
],
18+
"bin": {
19+
"bazel-jasmine-runner": "jasmine_runner.js"
20+
},
1821
"main": "index.js",
1922
"dependencies": {
2023
"jasmine-reporters": "~2.5.0",

packages/jasmine/private/BUILD.bazel

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
2+
3+
bzl_library(
4+
name = "bzl",
5+
srcs = glob(["*.bzl"]),
6+
visibility = ["//packages/jasmine:__pkg__"],
7+
deps = [
8+
"@build_bazel_rules_nodejs//internal/node:bzl",
9+
],
10+
)

packages/jasmine/private/index.bzl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"""
2+
This file mimics what we would get when we install a npm package with bin entries. Only used when jasmine_node_test is used directly
3+
from rnj sources and should not be published.
4+
"""
5+
6+
load("@build_bazel_rules_nodejs//internal/node:node.bzl", nodejs_test = "nodejs_test_macro")
7+
8+
def bazel_jasmine_runner_test(**kwargs):
9+
nodejs_test(
10+
entry_point = "//packages/jasmine:jasmine_runner.js",
11+
data = ["//packages/jasmine"] + kwargs.pop("data", []),
12+
**kwargs
13+
)

0 commit comments

Comments
 (0)