1*9bb1b549SSpandan DasGo workspace rules 2*9bb1b549SSpandan Das================== 3*9bb1b549SSpandan Das 4*9bb1b549SSpandan Das.. Links to other sites and pages 5*9bb1b549SSpandan Das.. _gazelle: tools/gazelle/README.rst 6*9bb1b549SSpandan Das.. _github.com/bazelbuild/bazel-skylib: https://github.com/bazelbuild/bazel-skylib 7*9bb1b549SSpandan Das.. _github.com/gogo/protobuf: https://github.com/gogo/protobuf 8*9bb1b549SSpandan Das.. _github.com/golang/protobuf: https://github.com/golang/protobuf/ 9*9bb1b549SSpandan Das.. _github.com/google/protobuf: https://github.com/google/protobuf/ 10*9bb1b549SSpandan Das.. _github.com/googleapis/googleapis: https://github.com/googleapis/googleapis 11*9bb1b549SSpandan Das.. _github.com/mwitkow/go-proto-validators: https://github.com/mwitkow/go-proto-validators 12*9bb1b549SSpandan Das.. _golang.org/x/net: https://github.com/golang/net/ 13*9bb1b549SSpandan Das.. _golang.org/x/sys: https://github.com/golang/sys/ 14*9bb1b549SSpandan Das.. _golang.org/x/text: https://github.com/golang/text/ 15*9bb1b549SSpandan Das.. _golang.org/x/tools: https://github.com/golang/tools/ 16*9bb1b549SSpandan Das.. _google.golang.org/genproto: https://github.com/google/go-genproto 17*9bb1b549SSpandan Das.. _google.golang.org/grpc: https://github.com/grpc/grpc-go 18*9bb1b549SSpandan Das.. _http_archive: https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/repo/http.bzl 19*9bb1b549SSpandan Das.. _nested workspaces: https://bazel.build/designs/2016/09/19/recursive-ws-parsing.html 20*9bb1b549SSpandan Das.. _nogo: nogo.rst#nogo 21*9bb1b549SSpandan Das.. _normal go logic: https://golang.org/cmd/go/#hdr-Remote_import_paths 22*9bb1b549SSpandan Das.. _repositories.bzl: https://github.com/bazelbuild/rules_go/blob/master/go/private/repositories.bzl 23*9bb1b549SSpandan Das.. _rules_proto: https://github.com/bazelbuild/rules_proto 24*9bb1b549SSpandan Das.. _third_party: https://github.com/bazelbuild/rules_go/tree/master/third_party 25*9bb1b549SSpandan Das.. _toolchains: toolchains.rst 26*9bb1b549SSpandan Das 27*9bb1b549SSpandan Das.. Go rules 28*9bb1b549SSpandan Das.. _go_library: /docs/go/core/rules.md#go_library 29*9bb1b549SSpandan Das.. _go_proto_library: https://github.com/bazelbuild/rules_go/blob/master/proto/core.rst#go-proto-library 30*9bb1b549SSpandan Das.. _go_register_toolchains: toolchains.rst#go_register_toolchains 31*9bb1b549SSpandan Das.. _go_repository: https://github.com/bazelbuild/bazel-gazelle/blob/master/repository.md#go_repository 32*9bb1b549SSpandan Das.. _go_toolchain: toolchains.rst#go_toolchain 33*9bb1b549SSpandan Das 34*9bb1b549SSpandan Das.. Other rules 35*9bb1b549SSpandan Das.. _git_repository: https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/repo/git.bzl 36*9bb1b549SSpandan Das.. _proto_library: https://github.com/bazelbuild/rules_proto 37*9bb1b549SSpandan Das 38*9bb1b549SSpandan Das.. Issues 39*9bb1b549SSpandan Das.. _#1986: https://github.com/bazelbuild/rules_go/issues/1986 40*9bb1b549SSpandan Das 41*9bb1b549SSpandan Das.. role:: param(kbd) 42*9bb1b549SSpandan Das.. role:: type(emphasis) 43*9bb1b549SSpandan Das.. role:: value(code) 44*9bb1b549SSpandan Das.. |mandatory| replace:: **mandatory value** 45*9bb1b549SSpandan Das 46*9bb1b549SSpandan DasThis document describes workspace rules, functions, and dependencies intended 47*9bb1b549SSpandan Dasto be used in the ``WORKSPACE`` file.a 48*9bb1b549SSpandan Das 49*9bb1b549SSpandan DasSee also the `toolchains`_ for information on `go_register_toolchains`_ and 50*9bb1b549SSpandan Dasother rules used to download and register toolchains. 51*9bb1b549SSpandan Das 52*9bb1b549SSpandan DasContents 53*9bb1b549SSpandan Das-------- 54*9bb1b549SSpandan Das 55*9bb1b549SSpandan Das* `go_rules_dependencies`_ 56*9bb1b549SSpandan Das* `Proto dependencies`_ 57*9bb1b549SSpandan Das* `gRPC dependencies`_ 58*9bb1b549SSpandan Das* `Overriding dependencies`_ 59*9bb1b549SSpandan Das 60*9bb1b549SSpandan Das 61*9bb1b549SSpandan Dasgo_rules_dependencies 62*9bb1b549SSpandan Das--------------------- 63*9bb1b549SSpandan Das 64*9bb1b549SSpandan Das``go_rules_dependencies`` is a function that registers external dependencies 65*9bb1b549SSpandan Dasneeded by the Go rules. Projects that use rules_go should *always* call it from 66*9bb1b549SSpandan DasWORKSPACE. It may be called before or after other workspace rules. 67*9bb1b549SSpandan Das 68*9bb1b549SSpandan DasSee `Overriding dependencies`_ for instructions on using a different version 69*9bb1b549SSpandan Dasof one of the repositories below. 70*9bb1b549SSpandan Das 71*9bb1b549SSpandan Das``go_rules_dependencies`` declares the repositories in the table below. 72*9bb1b549SSpandan DasIt also declares some internal repositories not described here. 73*9bb1b549SSpandan Das 74*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 75*9bb1b549SSpandan Das| **Name** | **Path** | 76*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 77*9bb1b549SSpandan Das| :value:`bazel_skylib` | `github.com/bazelbuild/bazel-skylib`_ | 78*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 79*9bb1b549SSpandan Das| A library of useful Starlark functions, used in the implementation | 80*9bb1b549SSpandan Das| of rules_go. | 81*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 82*9bb1b549SSpandan Das| :value:`org_golang_x_tools` | `golang.org/x/tools`_ | 83*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 84*9bb1b549SSpandan Das| The Go tools module. Provides the analysis framework that nogo_ is based on. | 85*9bb1b549SSpandan Das| Also provides other package loading and testing infrastructure. | 86*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 87*9bb1b549SSpandan Das| :value:`com_github_golang_protobuf` | `github.com/golang/protobuf`_ | 88*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 89*9bb1b549SSpandan Das| The Go protobuf plugin and runtime. When overriding this, make sure to use | 90*9bb1b549SSpandan Das| ``@io_bazel_rules_go//third_party:com_github_golang_protobuf-extras.patch``. | 91*9bb1b549SSpandan Das| This is needed to support both pre-generated and dynamically generated | 92*9bb1b549SSpandan Das| proto libraries. | 93*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 94*9bb1b549SSpandan Das| :value:`com_github_mwitkow_go_proto_validators` | `github.com/mwitkow/go-proto-validators`_ | 95*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 96*9bb1b549SSpandan Das| Legacy definition for proto plugin. Ideally ``go_rules_dependencies`` should | 97*9bb1b549SSpandan Das| not provide this. | 98*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 99*9bb1b549SSpandan Das| :value:`com_github_gogo_protobuf` | `github.com/gogo/protobuf`_ | 100*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 101*9bb1b549SSpandan Das| Legacy definition for proto plugins. Ideally ``go_rules_dependencies`` should | 102*9bb1b549SSpandan Das| not provide this. | 103*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 104*9bb1b549SSpandan Das| :value:`org_golang_google_genproto` | `google.golang.org/genproto`_ | 105*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 106*9bb1b549SSpandan Das| Pre-generated proto libraries for gRPC and Google APIs. Ideally, | 107*9bb1b549SSpandan Das| ``go_rules_dependencies`` should provide this, but it doesn't change often, | 108*9bb1b549SSpandan Das| and many things break without it. | 109*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 110*9bb1b549SSpandan Das| :value:`go_googleapis` | `github.com/googleapis/googleapis`_ | 111*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 112*9bb1b549SSpandan Das| Like :value:`org_golang_google_genproto` but provides ``go_proto_library`` | 113*9bb1b549SSpandan Das| targets instead of ``go_library``. Ideally we should use | 114*9bb1b549SSpandan Das| ``com_google_googleapis``, but Gazelle still resolves imports to this repo. | 115*9bb1b549SSpandan Das| See `#1986`_. | 116*9bb1b549SSpandan Das+-------------------------------------------------+-------------------------------------------+ 117*9bb1b549SSpandan Das 118*9bb1b549SSpandan DasProto dependencies 119*9bb1b549SSpandan Das------------------ 120*9bb1b549SSpandan Das 121*9bb1b549SSpandan DasIn order to build `proto_library`_ and `go_proto_library`_ rules, you must 122*9bb1b549SSpandan Dasadd a dependency on ``com_google_protobuf`` in order to build the ``protoc`` 123*9bb1b549SSpandan Dascompiler. Version 3.14.0 is the minimum supported version, but higher minor 124*9bb1b549SSpandan Dasversions shoudl work. You'll need a C/C++ toolchain for the execution platform 125*9bb1b549SSpandan Dasto build ``protoc``. 126*9bb1b549SSpandan Das 127*9bb1b549SSpandan Das.. code:: bzl 128*9bb1b549SSpandan Das 129*9bb1b549SSpandan Das load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 130*9bb1b549SSpandan Das 131*9bb1b549SSpandan Das http_archive( 132*9bb1b549SSpandan Das name = "com_google_protobuf", 133*9bb1b549SSpandan Das sha256 = "d0f5f605d0d656007ce6c8b5a82df3037e1d8fe8b121ed42e536f569dec16113", 134*9bb1b549SSpandan Das strip_prefix = "protobuf-3.14.0", 135*9bb1b549SSpandan Das urls = [ 136*9bb1b549SSpandan Das "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz", 137*9bb1b549SSpandan Das "https://github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz", 138*9bb1b549SSpandan Das ], 139*9bb1b549SSpandan Das ) 140*9bb1b549SSpandan Das 141*9bb1b549SSpandan Das load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") 142*9bb1b549SSpandan Das 143*9bb1b549SSpandan Das protobuf_deps() 144*9bb1b549SSpandan Das 145*9bb1b549SSpandan DasThe `proto_library`_ rule is provided by the `rules_proto`_ 146*9bb1b549SSpandan Dasrepository. ``protoc-gen-go``, the Go proto compiler plugin, is provided by the 147*9bb1b549SSpandan Dasrepository ``com_github_golang_protobuf``. Both are declared by 148*9bb1b549SSpandan Das`go_rules_dependencies`_ by default. You won't need to declare an 149*9bb1b549SSpandan Dasexplicit dependency unless you specifically want to use a different version. See 150*9bb1b549SSpandan Das`Overriding dependencies`_ for instructions on using a different version. 151*9bb1b549SSpandan Das 152*9bb1b549SSpandan DasgRPC dependencies 153*9bb1b549SSpandan Das----------------- 154*9bb1b549SSpandan Das 155*9bb1b549SSpandan DasIn order to build ``go_proto_library`` rules with the gRPC plugin, 156*9bb1b549SSpandan Dasseveral additional dependencies are needed. At minimum, you'll need to 157*9bb1b549SSpandan Dasdeclare ``org_golang_google_grpc``, ``org_golang_x_net``, and 158*9bb1b549SSpandan Das``org_golang_x_text``. 159*9bb1b549SSpandan Das 160*9bb1b549SSpandan DasIf you're using Gazelle, and you already import ``google.golang.org/grpc`` 161*9bb1b549SSpandan Dasfrom a .go file somewhere in your repository, and you're also using Go modules 162*9bb1b549SSpandan Dasto manage dependencies, you can generate these rules with 163*9bb1b549SSpandan Das``bazel run //:gazelle -- update-repos -from_file=go.mod``. 164*9bb1b549SSpandan Das 165*9bb1b549SSpandan DasMake sure you set ``build_file_proto_mode = "disable"`` on the 166*9bb1b549SSpandan Das`go_repository`_ rule for ``org_golang_google_grpc``. 167*9bb1b549SSpandan Das 168*9bb1b549SSpandan DasFor example: 169*9bb1b549SSpandan Das 170*9bb1b549SSpandan Das.. code:: bzl 171*9bb1b549SSpandan Das 172*9bb1b549SSpandan Das load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") 173*9bb1b549SSpandan Das 174*9bb1b549SSpandan Das gazelle_dependencies() 175*9bb1b549SSpandan Das 176*9bb1b549SSpandan Das go_repository( 177*9bb1b549SSpandan Das name = "org_golang_google_grpc", 178*9bb1b549SSpandan Das build_file_proto_mode = "disable", 179*9bb1b549SSpandan Das importpath = "google.golang.org/grpc", 180*9bb1b549SSpandan Das sum = "h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw=", 181*9bb1b549SSpandan Das version = "v1.22.0", 182*9bb1b549SSpandan Das ) 183*9bb1b549SSpandan Das 184*9bb1b549SSpandan Das go_repository( 185*9bb1b549SSpandan Das name = "org_golang_x_net", 186*9bb1b549SSpandan Das importpath = "golang.org/x/net", 187*9bb1b549SSpandan Das sum = "h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=", 188*9bb1b549SSpandan Das version = "v0.0.0-20190311183353-d8887717615a", 189*9bb1b549SSpandan Das ) 190*9bb1b549SSpandan Das 191*9bb1b549SSpandan Das go_repository( 192*9bb1b549SSpandan Das name = "org_golang_x_text", 193*9bb1b549SSpandan Das importpath = "golang.org/x/text", 194*9bb1b549SSpandan Das sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=", 195*9bb1b549SSpandan Das version = "v0.3.0", 196*9bb1b549SSpandan Das ) 197*9bb1b549SSpandan Das 198*9bb1b549SSpandan DasOverriding dependencies 199*9bb1b549SSpandan Das----------------------- 200*9bb1b549SSpandan Das 201*9bb1b549SSpandan DasYou can override a dependency declared in ``go_rules_dependencies`` by 202*9bb1b549SSpandan Dasdeclaring a repository rule in WORKSPACE with the same name *before* the call 203*9bb1b549SSpandan Dasto ``go_rules_dependencies``. 204*9bb1b549SSpandan Das 205*9bb1b549SSpandan DasFor example, this is how you would override ``com_github_golang_protobuf``: 206*9bb1b549SSpandan Das 207*9bb1b549SSpandan Das.. code:: bzl 208*9bb1b549SSpandan Das 209*9bb1b549SSpandan Das load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 210*9bb1b549SSpandan Das load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") 211*9bb1b549SSpandan Das 212*9bb1b549SSpandan Das http_archive( 213*9bb1b549SSpandan Das name = "io_bazel_rules_go", 214*9bb1b549SSpandan Das sha256 = "7b9bbe3ea1fccb46dcfa6c3f3e29ba7ec740d8733370e21cdc8937467b4a4349", 215*9bb1b549SSpandan Das urls = [ 216*9bb1b549SSpandan Das "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", 217*9bb1b549SSpandan Das "https://github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", 218*9bb1b549SSpandan Das ], 219*9bb1b549SSpandan Das ) 220*9bb1b549SSpandan Das 221*9bb1b549SSpandan Das http_archive( 222*9bb1b549SSpandan Das name = "bazel_gazelle", 223*9bb1b549SSpandan Das sha256 = "d8c45ee70ec39a57e7a05e5027c32b1576cc7f16d9dd37135b0eddde45cf1b10", 224*9bb1b549SSpandan Das urls = [ 225*9bb1b549SSpandan Das "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", 226*9bb1b549SSpandan Das "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", 227*9bb1b549SSpandan Das ], 228*9bb1b549SSpandan Das ) 229*9bb1b549SSpandan Das 230*9bb1b549SSpandan Das http_archive( 231*9bb1b549SSpandan Das name = "com_google_protobuf", 232*9bb1b549SSpandan Das sha256 = "d0f5f605d0d656007ce6c8b5a82df3037e1d8fe8b121ed42e536f569dec16113", 233*9bb1b549SSpandan Das strip_prefix = "protobuf-3.14.0", 234*9bb1b549SSpandan Das urls = [ 235*9bb1b549SSpandan Das "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz", 236*9bb1b549SSpandan Das "https://github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz", 237*9bb1b549SSpandan Das ], 238*9bb1b549SSpandan Das ) 239*9bb1b549SSpandan Das 240*9bb1b549SSpandan Das load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") 241*9bb1b549SSpandan Das load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") 242*9bb1b549SSpandan Das load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") 243*9bb1b549SSpandan Das 244*9bb1b549SSpandan Das go_repository( 245*9bb1b549SSpandan Das name = "com_github_golang_protobuf", 246*9bb1b549SSpandan Das build_file_proto_mode = "disable_global", 247*9bb1b549SSpandan Das importpath = "github.com/golang/protobuf", 248*9bb1b549SSpandan Das patch_args = ["-p1"], 249*9bb1b549SSpandan Das patches = ["@io_bazel_rules_go//third_party:com_github_golang_protobuf-extras.patch"], 250*9bb1b549SSpandan Das sum = "h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=", 251*9bb1b549SSpandan Das version = "v1.3.5", 252*9bb1b549SSpandan Das ) 253*9bb1b549SSpandan Das 254*9bb1b549SSpandan Das go_rules_dependencies() 255*9bb1b549SSpandan Das 256*9bb1b549SSpandan Das go_register_toolchains() 257*9bb1b549SSpandan Das 258*9bb1b549SSpandan Das gazelle_dependencies() 259*9bb1b549SSpandan Das 260*9bb1b549SSpandan Das protobuf_deps() 261*9bb1b549SSpandan Das 262*9bb1b549SSpandan DasSome of the dependencies declared by ``go_rules_dependencies`` require 263*9bb1b549SSpandan Dasadditional patches and or adjustments compared to what `go_repository`_ 264*9bb1b549SSpandan Dasgenerates by default (as ``com_github_golang_protobuf`` does in the example 265*9bb1b549SSpandan Dasabove). Patches may be found in the `third_party`_ directory. 266*9bb1b549SSpandan DasSee notes in `repositories.bzl`_. If you're generated build files with 267*9bb1b549SSpandan Das`go_repository`_, you do not need the ``*-gazelle.patch`` files. 268