fix(builtin): npm_package_bin include runfiles in DefaultInfo
Otherwise you can't use a data dep on one of these to gather runtime deps
fixes #3257
diff --git a/internal/node/npm_package_bin.bzl b/internal/node/npm_package_bin.bzl
index 91b8c33..c052758 100644
--- a/internal/node/npm_package_bin.bzl
+++ b/internal/node/npm_package_bin.bzl
@@ -87,8 +87,11 @@
exit_code_out = ctx.outputs.exit_code_out,
link_workspace_root = ctx.attr.link_workspace_root,
)
-
- return [DefaultInfo(files = depset(outputs + tool_outputs))]
+ files = outputs + tool_outputs
+ return [DefaultInfo(
+ files = depset(files),
+ runfiles = ctx.runfiles(files = files),
+ )]
_npm_package_bin = rule(
_impl,
diff --git a/internal/node/test/BUILD.bazel b/internal/node/test/BUILD.bazel
index 0b0cb8e..59b80fd 100644
--- a/internal/node/test/BUILD.bazel
+++ b/internal/node/test/BUILD.bazel
@@ -6,6 +6,7 @@
load("//third_party/github.com/bazelbuild/bazel-skylib:rules/copy_file.bzl", "copy_file")
load("//third_party/github.com/bazelbuild/bazel-skylib:rules/write_file.bzl", "write_file")
load(":nodejs_toolchain_test.bzl", "nodejs_toolchain_test")
+load(":npm_package_bin_test.bzl", "npm_package_bin_test_suite")
# You can have a nodejs_binary with no node_modules attribute
# and no fine grained deps
@@ -260,6 +261,8 @@
stdout = "minified.stdout.js",
)
+npm_package_bin_test_suite()
+
generated_file_test(
name = "stdout_output_test",
src = "stdout_output_test.golden",
diff --git a/internal/node/test/npm_package_bin_test.bzl b/internal/node/test/npm_package_bin_test.bzl
new file mode 100644
index 0000000..73eeb0b
--- /dev/null
+++ b/internal/node/test/npm_package_bin_test.bzl
@@ -0,0 +1,21 @@
+"Unit tests for js_library rule"
+
+load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest")
+
+def _impl(ctx):
+ env = unittest.begin(ctx)
+
+ runfiles = []
+ for r in ctx.attr.lib[DefaultInfo].default_runfiles.files.to_list():
+ runfiles.append(r.basename)
+ asserts.equals(env, ctx.attr.expected_runfiles, sorted(runfiles))
+
+ return unittest.end(env)
+
+runfiles_test = unittest.make(_impl, attrs = {
+ "lib": attr.label(default = ":run_terser"),
+ "expected_runfiles": attr.string_list(default = ["minified.js"]),
+})
+
+def npm_package_bin_test_suite():
+ unittest.suite("runfiles", runfiles_test)