rules_license
rules_license copied to clipboard
Native Java provider appears when using REPO.bazel
@fmeum (https://github.com/bazelbuild/bazel-gazelle/pull/1852) and I (https://github.com/bazelbuild/bazel-gazelle/pull/1917) have been trying to make the bazel-gazelle go_repository
PackageInfo functional.
bazel-gazelle generates a target @some-go-package//:gazelle_generated_package_info
for each package installed, you can observe this working with cquery
for example:
% bazel cquery --output=starlark --starlark:expr='providers(target)["@@rules_license//rules:providers.bzl%PackageInfo"]' @com_github_spf13_cobra//:gazelle_generated_package_info
INFO: Analyzed target @@com_github_spf13_cobra//:gazelle_generated_package_info (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
struct(label = Label("@@com_github_spf13_cobra//:gazelle_generated_package_info"), package_name = "github.com/spf13/cobra", package_url = "https://github.com/spf13/cobra", package_version = "1.8.1", type = "package_info")
struct(label = Label("@@com_github_spf13_cobra//:gazelle_generated_package_info"), package_name = "github.com/spf13/cobra", package_url = "https://github.com/spf13/cobra", package_version = "1.8.1", type = "package_info")
This package info isn't attached directly to go_library
targets. Rather it uses the (new?) repo()
function in the REPO.bazel
for that external repo (after all, every target there is licensed the same way)
https://github.com/bazelbuild/bazel-gazelle/blob/089096315dcaa0aea52e87ecc2bd6b89b531da1e/internal/go_repository.bzl#L369-L371
However when we cquery
on a go_library
target that may be reachable through the dep graph from a Go application:
The only relevant provider hanging from that go_library
is LicenseInfo
:
% bazel cquery --output=starlark --starlark:expr='providers(target).keys()' @com_github_spf13_cobra//:cobra
[
"LicenseInfo",
"@@io_bazel_rules_go//go/private:providers.bzl%GoLibrary",
"@@io_bazel_rules_go//go/private:providers.bzl%GoSource",
"@@io_bazel_rules_go//go/private:providers.bzl%GoArchive",
"InstrumentedFilesInfo",
"FileProvider",
"FilesToRunProvider",
"OutputGroupInfo"
]
% bazel cquery --output=starlark --starlark:expr='providers(target)["LicenseInfo"]' @com_github_spf13_cobra//:cobra
INFO: Analyzed target @@com_github_spf13_cobra//:cobra (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
<instance of provider LicenseInfo>
LicenseInfo here is the one built-into Bazel's Java code, not the one declared in rules_license.
Does this mean the go_repository
implementation needs to attach the PackageInfo to each go_library
as well?