rules-proto-grpc / rules_proto_grpc

Bazel rules for building Protobuf and gRPC code and libraries from proto_library targets
https://rules-proto-grpc.com
Apache License 2.0
250 stars 157 forks source link

Issues with go@1.20.x #260

Closed ramilmsh closed 1 year ago

ramilmsh commented 1 year ago

Issue Description

I have tried integrating rules_proto_grpc into my golang1.20 monorepo and received a message:

in libs attribute of go_sdk rule @go_sdk//:go_sdk: '@go_sdk//:libs' does not produce any go_sdk libs files (expected .a)

From googling, it would appear to be an issue that's extinct and should no longer exist.

I have decided to investigate, so I created a fresh workspace copying code from examples and doing

bazel clean --expunge && bazel run //:gazelle

and got the same error message again. I then tried downgrading to go@1.19.x, which appears to have solved the issue.

go_register_toolchains(version = "1.20.1") seems to work in my main repo, where I used

git_repository(
    name = "io_bazel_rules_go",
    commit = "3201de057813297022bb3882b615ca61442e1409",
    remote = "https://github.com/bazelbuild/rules_go.git",
)

Any ideas?

Log Output

INFO: Starting clean (this may take a while). Consider using --async if the clean takes more than several minutes.
Starting local Bazel server and connecting to it...
ERROR: /private/var/tmp/_bazel_r/70dea11f9b50e1b67938344c10c934c2/external/go_sdk/BUILD.bazel:34:7: in libs attribute of go_sdk rule @go_sdk//:go_sdk: '@go_sdk//:libs' does not produce any go_sdk libs files (expected .a)
ERROR: /private/var/tmp/_bazel_r/70dea11f9b50e1b67938344c10c934c2/external/go_sdk/BUILD.bazel:34:7: Analysis of target '@go_sdk//:go_sdk' failed
ERROR: Analysis of target '//:gazelle' failed; build aborted: 
INFO: Elapsed time: 9.548s
INFO: 0 processes.
ERROR: Build failed. Not running target
FAILED: Build did NOT complete successfully (68 packages loaded, 9179 targets configured)
    Fetching repository @local_config_cc; Running xcode-locator
    Fetching repository @com_github_pelletier_go_toml; Restarting.
    Fetching repository @org_golang_x_mod; Restarting.
    Fetching repository @org_golang_x_sync; Restarting.
    Fetching repository @bazel_gazelle_go_repository_config; Restarting.
    Fetching repository @com_github_bazelbuild_buildtools; Restarting.
    Fetching repository @com_github_pmezard_go_difflib; Restarting.
    Fetching repository @bazel_gazelle_go_repository_tools; Restarting. ... (10 fetches)

rules_proto_grpc Version

4.4.0

Bazel Version

bazel 6.2.0-homebrew

OS

MacOS 13.3.1 (Ventura)

Link to Demo Repo

No response

WORKSPACE Content

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "rules_proto_grpc",
    sha256 = "928e4205f701b7798ce32f3d2171c1918b363e9a600390a25c876f075f1efc0a",
    strip_prefix = "rules_proto_grpc-4.4.0",
    urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/releases/download/4.4.0/rules_proto_grpc-4.4.0.tar.gz"],
)

load("@rules_proto_grpc//:repositories.bzl", "rules_proto_grpc_repos", "rules_proto_grpc_toolchains")

rules_proto_grpc_toolchains()

rules_proto_grpc_repos()

load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")

rules_proto_dependencies()

rules_proto_toolchains()

load("@rules_proto_grpc//:repositories.bzl", "bazel_gazelle", "io_bazel_rules_go")  # buildifier: disable=same-origin-load

io_bazel_rules_go()

load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")

go_rules_dependencies()

go_register_toolchains(
    version = "1.20.1",
)

bazel_gazelle()

load("@rules_proto_grpc//go:repositories.bzl", rules_proto_grpc_go_repos = "go_repos")

rules_proto_grpc_go_repos()

load("@rules_proto_grpc//grpc-gateway:repositories.bzl", rules_proto_grpc_gateway_repos = "gateway_repos")

rules_proto_grpc_gateway_repos()

load("@com_github_grpc_ecosystem_grpc_gateway_v2//:repositories.bzl", "go_repositories")

go_repositories()

load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")

gazelle_dependencies()

BUILD Content

load("@bazel_gazelle//:def.bzl", "gazelle")

gazelle(name = "gazelle")

Proto Content

No response

Any Other Content

/private/var/tmp/_bazel_r/70dea11f9b50e1b67938344c10c934c2/external/go_sdk/BUILD.bazel:

     1  load("@io_bazel_rules_go//go/private/rules:binary.bzl", "go_tool_binary")
     2  load("@io_bazel_rules_go//go/private/rules:sdk.bzl", "package_list")
     3  load("@io_bazel_rules_go//go:def.bzl", "declare_toolchains", "go_sdk")
     4  load("@bazel_skylib//lib:selects.bzl", "selects")
     5
     6  package(default_visibility = ["//visibility:public"])
     7
     8  filegroup(
     9      name = "libs",
    10      srcs = glob(
    11          ["pkg/darwin_arm64/**/*.a"],
    12          exclude = ["pkg/darwin_arm64/**/cmd/**"],
    13      ),
    14  )
    15
    16  filegroup(
    17      name = "headers",
    18      srcs = glob(["pkg/include/*.h"]),
    19  )
    20
    21  filegroup(
    22      name = "srcs",
    23      srcs = glob(["src/**"]),
    24  )
    25
    26  filegroup(
    27      name = "tools",
    28      srcs = glob([
    29          "pkg/tool/**",
    30          "bin/gofmt*",
    31      ]),
    32  )
    33
    34  go_sdk(
    35      name = "go_sdk",
    36      srcs = [":srcs"],
    37      go = "bin/go",
    38      goarch = "arm64",
    39      goos = "darwin",
    40      headers = [":headers"],
    41      libs = [":libs"],
    42      package_list = ":package_list",
    43      root_file = "ROOT",
    44      tools = [":tools"],
    45  )
    46
    47  go_tool_binary(
    48      name = "builder",
    49      srcs = ["@io_bazel_rules_go//go/tools/builders:builder_srcs"],
    50      sdk = ":go_sdk",
    51  )
    52
    53  # TODO(jayconrod): Gazelle depends on this file directly. This dependency
    54  # should be broken, and this rule should be folded into go_sdk.
    55  package_list(
    56      name = "package_list",
    57      srcs = [":srcs"],
    58      out = "packages.txt",
    59      root_file = "ROOT",
    60  )
    61
    62  sdk_version_label = "@io_bazel_rules_go//go/toolchain:sdk_version"
    63
    64  config_setting(
    65      name = "match_all_versions",
    66      flag_values = {
    67          sdk_version_label: "",
    68      },
    69      visibility = ["//visibility:private"],
    70  )
    71
    72  config_setting(
    73      name = "match_major_version",
    74      flag_values = {
    75          sdk_version_label: "1",
    76      },
    77      visibility = ["//visibility:private"],
    78  )
    79
    80  config_setting(
    81      name = "match_major_minor_version",
    82      flag_values = {
    83          sdk_version_label: "1.20",
    84      },
    85      visibility = ["//visibility:private"],
    86  )
    87
    88  config_setting(
    89      name = "match_patch_version",
    90      flag_values = {
    91          sdk_version_label: "1.20.1",
    92      },
    93      visibility = ["//visibility:private"],
    94  )
    95
    96  # If prerelease version is "", this will be the same as ":match_patch_version", but that's fine since we use match_any in config_setting_group.
    97  config_setting(
    98      name = "match_prerelease_version",
    99      flag_values = {
   100          sdk_version_label: "1.20.1",
   101      },
   102      visibility = ["//visibility:private"],
   103  )
   104
   105  config_setting(
   106      name = "match_sdk_type",
   107      flag_values = {
   108          sdk_version_label: "remote",
   109      },
   110      visibility = ["//visibility:private"],
   111  )
   112
   113  selects.config_setting_group(
   114      name = "sdk_version_setting",
   115      match_any = [
   116          ":match_all_versions",
   117          ":match_major_version",
   118          ":match_major_minor_version",
   119          ":match_patch_version",
   120          ":match_prerelease_version",
   121          ":match_sdk_type",
   122      ],
   123      visibility = ["//visibility:private"],
   124  )
   125
   126  declare_toolchains(
   127      builder = ":builder",
   128      host = "darwin_arm64",
   129      sdk = ":go_sdk",
   130      sdk_version_setting = ":sdk_version_setting",
   131  )
   132
   133  filegroup(
   134      name = "files",
   135      srcs = glob([
   136          "bin/go*",
   137          "src/**",
   138          "pkg/**",
   139      ]),
   140  )
   141
   142  exports_files(
   143      glob([
   144          "lib/time/zoneinfo.zip",
   145          "misc/wasm/**",
   146      ]),
   147      visibility = ["//visibility:public"],
   148  )
ramilmsh commented 1 year ago

Okay, simply adding

git_repository(
    name = "io_bazel_rules_go",
    commit = "3201de057813297022bb3882b615ca61442e1409",
    remote = "https://github.com/bazelbuild/rules_go.git",
)

to my workspace fixed the issue. I assume updating the dependency version in //:repositories.bzl should the issue