wip: show how to create rules_license PackageInfo
diff --git a/MODULE.bazel b/MODULE.bazel index b94a1a7..b7d590b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel
@@ -13,6 +13,7 @@ bazel_dep(name = "bazel_skylib", version = "1.4.1") bazel_dep(name = "rules_nodejs", version = "5.8.2") bazel_dep(name = "platforms", version = "0.0.5") +bazel_dep(name = "rules_license", version = "0.0.7") node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node") use_repo(node, "nodejs_linux_amd64")
diff --git a/npm/private/npm_import.bzl b/npm/private/npm_import.bzl index 2247a99..7a7b3ee 100644 --- a/npm/private/npm_import.bzl +++ b/npm/private/npm_import.bzl
@@ -351,6 +351,7 @@ src = ":{extract_to_dirname}", package = "{package}", version = "{version}", + license = "{license}", visibility = ["//visibility:public"], ) @@ -359,6 +360,7 @@ src = ":{extract_to_dirname}", package = "{package}", version = "{version}", + license = "{license}", visibility = ["//visibility:public"], ) """ @@ -522,6 +524,7 @@ extract_to_dirname = _EXTRACT_TO_DIRNAME, package = rctx.attr.package, version = rctx.attr.version, + license = pkg_json["license"], )) if rctx.attr.extra_build_content:
diff --git a/npm/private/npm_package_info.bzl b/npm/private/npm_package_info.bzl index 20583ed..985118a 100644 --- a/npm/private/npm_package_info.bzl +++ b/npm/private/npm_package_info.bzl
@@ -8,5 +8,6 @@ "directory": "the directory (typically a TreeArtifact) that contains the package sources", "npm_package_store_deps": "A depset of NpmPackageStoreInfo providers from npm dependencies of the package and the packages's transitive deps to use as direct dependencies when linking with npm_link_package", "hardlink": "internal use only", + "license": "TODO", }, )
diff --git a/npm/private/npm_package_internal.bzl b/npm/private/npm_package_internal.bzl index f4120e9..ee8cca4 100644 --- a/npm/private/npm_package_internal.bzl +++ b/npm/private/npm_package_internal.bzl
@@ -16,6 +16,7 @@ doc = """The package version.""", mandatory = True, ), + "license": attr.string(doc = "todo"), } def _impl(ctx): @@ -35,6 +36,7 @@ directory = dst, npm_package_store_deps = depset(), hardlink = True, # always hardlink downstream + license = ctx.attr.license, ), ]
diff --git a/npm/private/npm_package_store.bzl b/npm/private/npm_package_store.bzl index 229f5d3..f8dd28c 100644 --- a/npm/private/npm_package_store.bzl +++ b/npm/private/npm_package_store.bzl
@@ -2,6 +2,7 @@ load("@aspect_bazel_lib//lib:copy_directory.bzl", "copy_directory_bin_action") load("@bazel_skylib//lib:paths.bzl", "paths") +load("@rules_license//rules:providers.bzl", "PackageInfo") load(":utils.bzl", "utils") load(":npm_package_info.bzl", "NpmPackageInfo") load(":npm_package_store_info.bzl", "NpmPackageStoreInfo") @@ -160,6 +161,7 @@ def _impl(ctx): package = ctx.attr.package if ctx.attr.package else ctx.attr.src[NpmPackageInfo].package version = ctx.attr.version if ctx.attr.version else ctx.attr.src[NpmPackageInfo].version + license = getattr(ctx.attr.src[NpmPackageInfo], "license", "") if ctx.attr.src else None if not package: fail("No package name specified to link to. Package name must either be specified explicitly via 'package' attribute or come from the 'src' 'NpmPackageInfo', typically a 'npm_package' target") @@ -306,6 +308,19 @@ transitive_files = transitive_files_depset, dev = ctx.attr.dev, ), + PackageInfo( + # Metadata providers must include a type discriminator. We don't need it + # to collect the providers, but we do need it to write the JSON. We + # key on the type field to look up the correct block of code to pull + # data out and format it. We can't to the lookup on the provider class. + type = "package_info", + label = ctx.label, + package_name = package, + #package_url = ctx.attr.package_url, + package_version = version, + # TODO: need to provide a LicenseInfo also? + # license = license, + ), ] if virtual_store_directory: # Provide an output group that provides a single file which is the