@fmeum (bazel-contrib/bazel-gazelle#1852) and I (bazel-contrib/bazel-gazelle#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?
@fmeum (bazel-contrib/bazel-gazelle#1852) and I (bazel-contrib/bazel-gazelle#1917) have been trying to make the bazel-gazelle
go_repositoryPackageInfo functional.bazel-gazelle generates a target
@some-go-package//:gazelle_generated_package_infofor each package installed, you can observe this working withcqueryfor example:This package info isn't attached directly to
go_librarytargets. Rather it uses the (new?)repo()function in theREPO.bazelfor 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
cqueryon ago_librarytarget that may be reachable through the dep graph from a Go application:The only relevant provider hanging from that
go_libraryisLicenseInfo:LicenseInfo here is the one built-into Bazel's Java code, not the one declared in rules_license.
Does this mean the
go_repositoryimplementation needs to attach the PackageInfo to eachgo_libraryas well?