fix(jasmine): can not reference runner when exports_directories_only=True
diff --git a/docs/Jasmine.md b/docs/Jasmine.md index 84f84e0..f47fd68 100755 --- a/docs/Jasmine.md +++ b/docs/Jasmine.md
@@ -99,13 +99,13 @@ A label providing the `@bazel/jasmine` npm dependency. -Defaults to `"@npm//@bazel/jasmine"` +Defaults to `None` <h4 id="jasmine_node_test-jasmine_entry_point">jasmine_entry_point</h4> A label providing the `@bazel/jasmine` entry point. -Defaults to `Label("@npm//@bazel/jasmine:jasmine_runner.js")` +Defaults to `None` <h4 id="jasmine_node_test-kwargs">kwargs</h4>
diff --git a/examples/nestjs/WORKSPACE b/examples/nestjs/WORKSPACE index a38a103..a9cf6ac 100644 --- a/examples/nestjs/WORKSPACE +++ b/examples/nestjs/WORKSPACE
@@ -30,7 +30,7 @@ yarn_install( name = "npm", - exports_directories_only = False, + exports_directories_only = True, package_json = "//:package.json", yarn_lock = "//:yarn.lock", )
diff --git a/internal/npm_install/generate_build_file.ts b/internal/npm_install/generate_build_file.ts index 5aeaf15..fa2448d 100644 --- a/internal/npm_install/generate_build_file.ts +++ b/internal/npm_install/generate_build_file.ts
@@ -386,7 +386,8 @@ // If there's an index.bzl in the package then copy all the package's files // other than the BUILD file which we'll write below. // (maybe we shouldn't copy .js though, since it belongs under node_modules?) - if (pkg._files.includes('index.bzl')) { + const hasIndexBzl = pkg._files.includes('index.bzl') + if (hasIndexBzl) { await pkg._files.filter(f => f !== 'BUILD' && f !== 'BUILD.bazel').reduce(async (prev, file) => { if (/^node_modules[/\\]/.test(file)) { // don't copy over nested node_modules @@ -406,16 +407,19 @@ await mkdirp(path.dirname(destFile)); await fs.copyFile(src, destFile); }, Promise.resolve()); - } else { + } + + const indexFile = printIndexBzl(pkg); + const indexFileName = hasIndexBzl ? 'private.bzl' : 'index.bzl' if (indexFile.length) { - await writeFile(path.posix.join(pkg._dir, 'index.bzl'), indexFile); + await writeFile(path.posix.join(pkg._dir, indexFileName), indexFile); buildFile += ` # For integration testing -exports_files(["index.bzl"]) +exports_files(["${indexFileName}"]) `; } - } + if (!symlinkBuildFile) { await writeFile(
diff --git a/internal/npm_install/index.js b/internal/npm_install/index.js index 8f2fddd..5dca4cd 100644 --- a/internal/npm_install/index.js +++ b/internal/npm_install/index.js
@@ -249,7 +249,8 @@ await writeFile(path.posix.join(pkg._dir, 'bin', 'BUILD.bazel'), generateBuildFileHeader(visibility) + binBuildFile); } } - if (pkg._files.includes('index.bzl')) { + const hasIndexBzl = pkg._files.includes('index.bzl'); + if (hasIndexBzl) { await pkg._files.filter(f => f !== 'BUILD' && f !== 'BUILD.bazel').reduce(async (prev, file) => { if (/^node_modules[/\\]/.test(file)) { return; @@ -266,15 +267,14 @@ await fs_1.promises.copyFile(src, destFile); }, Promise.resolve()); } - else { - const indexFile = printIndexBzl(pkg); - if (indexFile.length) { - await writeFile(path.posix.join(pkg._dir, 'index.bzl'), indexFile); - buildFile += ` + const indexFile = printIndexBzl(pkg); + const indexFileName = hasIndexBzl ? 'private.bzl' : 'index.bzl'; + if (indexFile.length) { + await writeFile(path.posix.join(pkg._dir, indexFileName), indexFile); + buildFile += ` # For integration testing -exports_files(["index.bzl"]) +exports_files(["${indexFileName}"]) `; - } } if (!symlinkBuildFile) { await writeFile(path.posix.join(pkg._dir, buildFilePath), generateBuildFileHeader(visibility) + buildFile);
diff --git a/packages/jasmine/BUILD.bazel b/packages/jasmine/BUILD.bazel index 83d71c1..2b09373 100644 --- a/packages/jasmine/BUILD.bazel +++ b/packages/jasmine/BUILD.bazel
@@ -39,7 +39,10 @@ out = "README.md", input = "index.bzl", tags = ["fix-windows"], - deps = [":bzl"], + deps = [ + ":bzl", + "//packages/jasmine/private:bzl", + ], ) nodejs_test( @@ -81,7 +84,7 @@ ], build_file_content = "", substitutions = { - "//packages/jasmine:jasmine_runner.js": "//:node_modules/@bazel/jasmine/jasmine_runner.js", + "//packages/jasmine/private:jasmine_runner_test.bzl": "//@bazel/jasmine:private.bzl", }, deps = [ ":README.md",
diff --git a/packages/jasmine/jasmine_node_test.bzl b/packages/jasmine/jasmine_node_test.bzl index 1a117ab..1a5d7d0 100644 --- a/packages/jasmine/jasmine_node_test.bzl +++ b/packages/jasmine/jasmine_node_test.bzl
@@ -19,6 +19,7 @@ """ load("@rules_nodejs//nodejs:providers.bzl", "JSModuleInfo") +load("//packages/jasmine/private:jasmine_runner_test.bzl", "jasmine_runner_test") load("@build_bazel_rules_nodejs//internal/node:node.bzl", nodejs_test = "nodejs_test_macro") def _js_sources_impl(ctx): @@ -66,10 +67,9 @@ tags = [], config_file = None, use_direct_specs = None, - # Replaced by pkg_npm with jasmine = "//@bazel/jasmine", - jasmine = "//packages/jasmine", - # Replaced by pkg_npm with jasmine_entry_point = "//:node_modules/@bazel/jasmine/jasmine_runner.js", - jasmine_entry_point = Label("//packages/jasmine:jasmine_runner.js"), + # Kept for backward compatibility + jasmine = None, + jasmine_entry_point = None, **kwargs): """Runs tests in NodeJS using the Jasmine test runner. @@ -117,7 +117,10 @@ use_direct_specs = use_direct_specs, ) - all_data = data + srcs + deps + [Label(jasmine)] + all_data = data + srcs + deps + + if jasmine != None: + all_data.append(jasmine) # BEGIN-INTERNAL # Only used when running tests in the rules_nodejs repo. @@ -142,13 +145,20 @@ pkg = Label("%s//%s:__pkg__" % (native.repository_name(), native.package_name())) all_data.append(pkg.relative(config_file)) - nodejs_test( + kwargs = dict( name = name, data = all_data, - entry_point = jasmine_entry_point, templated_args = templated_args, testonly = 1, expected_exit_code = expected_exit_code, tags = tags, **kwargs ) + + if jasmine_entry_point: + nodejs_test( + entry_point = jasmine_entry_point, + **kwargs + ) + else: + jasmine_runner_test(**kwargs)
diff --git a/packages/jasmine/package.json b/packages/jasmine/package.json index 923a568..5a51b18 100644 --- a/packages/jasmine/package.json +++ b/packages/jasmine/package.json
@@ -15,6 +15,9 @@ "jasmine", "bazel" ], + "bin": { + "jasmine_runner": "jasmine_runner.js" + }, "main": "index.js", "dependencies": { "jasmine-reporters": "~2.5.0",
diff --git a/packages/jasmine/private/BUILD.bazel b/packages/jasmine/private/BUILD.bazel new file mode 100644 index 0000000..d3f93df --- /dev/null +++ b/packages/jasmine/private/BUILD.bazel
@@ -0,0 +1,10 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "bzl", + srcs = glob(["*.bzl"]), + visibility = ["//packages/jasmine:__pkg__"], + deps = [ + "@build_bazel_rules_nodejs//internal/node:bzl", + ], +)
diff --git a/packages/jasmine/private/jasmine_runner_test.bzl b/packages/jasmine/private/jasmine_runner_test.bzl new file mode 100644 index 0000000..22ff288 --- /dev/null +++ b/packages/jasmine/private/jasmine_runner_test.bzl
@@ -0,0 +1,13 @@ +""" +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 +from rnj sources and should not be published. +""" + +load("@build_bazel_rules_nodejs//internal/node:node.bzl", nodejs_test = "nodejs_test_macro") + +def jasmine_runner_test(**kwargs): + nodejs_test( + entry_point = "//packages/jasmine:jasmine_runner.js", + data = ["//packages/jasmine"] + kwargs.pop("data", []), + **kwargs + )