blob: 64c8b79e95a079d531d950705b8147d1bb812197 [file] [log] [blame]
"""This file contains the rule to generate a license map for node modules"""
def _node_modules_licenses_impl(ctx):
"""Wrapper for the license-map-generator command-line tool"""
node_modules_args = ctx.actions.args()
node_modules_args.add_all(ctx.files.node_modules)
node_modules_args.use_param_file("%s", use_always = True)
licenses_texts_args = ctx.actions.args()
licenses_texts_args.add_all(ctx.files.licenses_texts)
licenses_texts_args.use_param_file("%s", use_always = True)
ctx.actions.run(
executable = ctx.executable._license_map_generator,
arguments = [ctx.file.licenses_config.path, node_modules_args, licenses_texts_args, ctx.outputs.json.path],
outputs = [ctx.outputs.json],
inputs = depset([ctx.file.licenses_config] + ctx.files.licenses_texts, transitive = [ctx.attr.node_modules.files]),
)
# Rule to run license-map-generator.ts
# node_modules - label of npm workspace in the format @npm//:node_modules
# The output contains information about licenses for the workspace.
# licenses_texts is a list of shared licenses
# For details - see comments in the
# tools/node_tools/node_modules_licenses/license-map-generator.ts file
node_modules_licenses = rule(
implementation = _node_modules_licenses_impl,
attrs = {
"node_modules": attr.label(mandatory = True),
"licenses_texts": attr.label_list(allow_files = True, mandatory = True),
"licenses_config": attr.label(allow_single_file = True, mandatory = True),
"_license_map_generator": attr.label(
default = Label("//tools/node_tools/node_modules_licenses:license-map-generator-bin"),
executable = True,
cfg = "host",
),
},
outputs = {
"json": "%{name}.json",
},
)