rules_license icon indicating copy to clipboard operation
rules_license copied to clipboard

Native Java provider appears when using REPO.bazel

Open alexeagle opened this issue 5 months ago • 2 comments

@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?

alexeagle avatar Sep 23 '24 16:09 alexeagle