| Go workspace rules |
| ================== |
| |
| .. Links to other sites and pages |
| .. _gazelle: tools/gazelle/README.rst |
| .. _github.com/bazelbuild/bazel-skylib: https://github.com/bazelbuild/bazel-skylib |
| .. _github.com/gogo/protobuf: https://github.com/gogo/protobuf |
| .. _github.com/golang/protobuf: https://github.com/golang/protobuf/ |
| .. _github.com/google/protobuf: https://github.com/google/protobuf/ |
| .. _github.com/googleapis/googleapis: https://github.com/googleapis/googleapis |
| .. _github.com/mwitkow/go-proto-validators: https://github.com/mwitkow/go-proto-validators |
| .. _golang.org/x/net: https://github.com/golang/net/ |
| .. _golang.org/x/sys: https://github.com/golang/sys/ |
| .. _golang.org/x/text: https://github.com/golang/text/ |
| .. _golang.org/x/tools: https://github.com/golang/tools/ |
| .. _google.golang.org/genproto: https://github.com/google/go-genproto |
| .. _google.golang.org/grpc: https://github.com/grpc/grpc-go |
| .. _http_archive: https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/repo/http.bzl |
| .. _nested workspaces: https://bazel.build/designs/2016/09/19/recursive-ws-parsing.html |
| .. _nogo: nogo.rst#nogo |
| .. _normal go logic: https://golang.org/cmd/go/#hdr-Remote_import_paths |
| .. _repositories.bzl: https://github.com/bazelbuild/rules_go/blob/master/go/private/repositories.bzl |
| .. _rules_proto: https://github.com/bazelbuild/rules_proto |
| .. _third_party: https://github.com/bazelbuild/rules_go/tree/master/third_party |
| .. _toolchains: toolchains.rst |
| |
| .. Go rules |
| .. _go_library: /docs/go/core/rules.md#go_library |
| .. _go_proto_library: https://github.com/bazelbuild/rules_go/blob/master/proto/core.rst#go-proto-library |
| .. _go_register_toolchains: toolchains.rst#go_register_toolchains |
| .. _go_repository: https://github.com/bazelbuild/bazel-gazelle/blob/master/repository.rst#go_repository |
| .. _go_toolchain: toolchains.rst#go_toolchain |
| |
| .. Other rules |
| .. _git_repository: https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/repo/git.bzl |
| .. _proto_library: https://github.com/bazelbuild/rules_proto |
| |
| .. Issues |
| .. _#1986: https://github.com/bazelbuild/rules_go/issues/1986 |
| |
| .. role:: param(kbd) |
| .. role:: type(emphasis) |
| .. role:: value(code) |
| .. |mandatory| replace:: **mandatory value** |
| |
| This document describes workspace rules, functions, and dependencies intended |
| to be used in the ``WORKSPACE`` file.a |
| |
| See also the `toolchains`_ for information on `go_register_toolchains`_ and |
| other rules used to download and register toolchains. |
| |
| Contents |
| -------- |
| |
| * `go_rules_dependencies`_ |
| * `Proto dependencies`_ |
| * `gRPC dependencies`_ |
| * `Overriding dependencies`_ |
| |
| |
| go_rules_dependencies |
| --------------------- |
| |
| ``go_rules_dependencies`` is a function that registers external dependencies |
| needed by the Go rules. Projects that use rules_go should *always* call it from |
| WORKSPACE. It may be called before or after other workspace rules. |
| |
| See `Overriding dependencies`_ for instructions on using a different version |
| of one of the repositories below. |
| |
| ``go_rules_dependencies`` declares the repositories in the table below. |
| It also declares some internal repositories not described here. |
| |
| +-------------------------------------------------+-------------------------------------------+ |
| | **Name** | **Path** | |
| +-------------------------------------------------+-------------------------------------------+ |
| | :value:`bazel_skylib` | `github.com/bazelbuild/bazel-skylib`_ | |
| +-------------------------------------------------+-------------------------------------------+ |
| | A library of useful Starlark functions, used in the implementation | |
| | of rules_go. | |
| +-------------------------------------------------+-------------------------------------------+ |
| | :value:`org_golang_x_tools` | `golang.org/x/tools`_ | |
| +-------------------------------------------------+-------------------------------------------+ |
| | The Go tools module. Provides the analysis framework that nogo_ is based on. | |
| | Also provides other package loading and testing infrastructure. | |
| +-------------------------------------------------+-------------------------------------------+ |
| | :value:`com_github_golang_protobuf` | `github.com/golang/protobuf`_ | |
| +-------------------------------------------------+-------------------------------------------+ |
| | The Go protobuf plugin and runtime. When overriding this, make sure to use | |
| | ``@io_bazel_rules_go//third_party:com_github_golang_protobuf-extras.patch``. | |
| | This is needed to support both pre-generated and dynamically generated | |
| | proto libraries. | |
| +-------------------------------------------------+-------------------------------------------+ |
| | :value:`com_github_mwitkow_go_proto_validators` | `github.com/mwitkow/go-proto-validators`_ | |
| +-------------------------------------------------+-------------------------------------------+ |
| | Legacy definition for proto plugin. Ideally ``go_rules_dependencies`` should | |
| | not provide this. | |
| +-------------------------------------------------+-------------------------------------------+ |
| | :value:`com_github_gogo_protobuf` | `github.com/gogo/protobuf`_ | |
| +-------------------------------------------------+-------------------------------------------+ |
| | Legacy definition for proto plugins. Ideally ``go_rules_dependencies`` should | |
| | not provide this. | |
| +-------------------------------------------------+-------------------------------------------+ |
| | :value:`org_golang_google_genproto` | `google.golang.org/genproto`_ | |
| +-------------------------------------------------+-------------------------------------------+ |
| | Pre-generated proto libraries for gRPC and Google APIs. Ideally, | |
| | ``go_rules_dependencies`` should provide this, but it doesn't change often, | |
| | and many things break without it. | |
| +-------------------------------------------------+-------------------------------------------+ |
| | :value:`go_googleapis` | `github.com/googleapis/googleapis`_ | |
| +-------------------------------------------------+-------------------------------------------+ |
| | Like :value:`org_golang_google_genproto` but provides ``go_proto_library`` | |
| | targets instead of ``go_library``. Ideally we should use | |
| | ``com_google_googleapis``, but Gazelle still resolves imports to this repo. | |
| | See `#1986`_. | |
| +-------------------------------------------------+-------------------------------------------+ |
| |
| Proto dependencies |
| ------------------ |
| |
| In order to build `proto_library`_ and `go_proto_library`_ rules, you must |
| add a dependency on ``com_google_protobuf`` in order to build the ``protoc`` |
| compiler. Version 3.14.0 is the minimum supported version, but higher minor |
| versions shoudl work. You'll need a C/C++ toolchain for the execution platform |
| to build ``protoc``. |
| |
| .. code:: bzl |
| |
| load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") |
| |
| http_archive( |
| name = "com_google_protobuf", |
| sha256 = "d0f5f605d0d656007ce6c8b5a82df3037e1d8fe8b121ed42e536f569dec16113", |
| strip_prefix = "protobuf-3.14.0", |
| urls = [ |
| "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz", |
| "https://github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz", |
| ], |
| ) |
| |
| load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") |
| |
| protobuf_deps() |
| |
| The `proto_library`_ rule is provided by the `rules_proto`_ |
| repository. ``protoc-gen-go``, the Go proto compiler plugin, is provided by the |
| repository ``com_github_golang_protobuf``. Both are declared by |
| `go_rules_dependencies`_ by default. You won't need to declare an |
| explicit dependency unless you specifically want to use a different version. See |
| `Overriding dependencies`_ for instructions on using a different version. |
| |
| gRPC dependencies |
| ----------------- |
| |
| In order to build ``go_proto_library`` rules with the gRPC plugin, |
| several additional dependencies are needed. At minimum, you'll need to |
| declare ``org_golang_google_grpc``, ``org_golang_x_net``, and |
| ``org_golang_x_text``. |
| |
| If you're using Gazelle, and you already import ``google.golang.org/grpc`` |
| from a .go file somewhere in your repository, and you're also using Go modules |
| to manage dependencies, you can generate these rules with |
| ``bazel run //:gazelle -- update-repos -from_file=go.mod``. |
| |
| Make sure you set ``build_file_proto_mode = "disable"`` on the |
| `go_repository`_ rule for ``org_golang_google_grpc``. |
| |
| For example: |
| |
| .. code:: bzl |
| |
| load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") |
| |
| gazelle_dependencies() |
| |
| go_repository( |
| name = "org_golang_google_grpc", |
| build_file_proto_mode = "disable", |
| importpath = "google.golang.org/grpc", |
| sum = "h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw=", |
| version = "v1.22.0", |
| ) |
| |
| go_repository( |
| name = "org_golang_x_net", |
| importpath = "golang.org/x/net", |
| sum = "h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=", |
| version = "v0.0.0-20190311183353-d8887717615a", |
| ) |
| |
| go_repository( |
| name = "org_golang_x_text", |
| importpath = "golang.org/x/text", |
| sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=", |
| version = "v0.3.0", |
| ) |
| |
| Overriding dependencies |
| ----------------------- |
| |
| You can override a dependency declared in ``go_rules_dependencies`` by |
| declaring a repository rule in WORKSPACE with the same name *before* the call |
| to ``go_rules_dependencies``. |
| |
| For example, this is how you would override ``com_github_golang_protobuf``: |
| |
| .. code:: bzl |
| |
| load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") |
| load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") |
| |
| http_archive( |
| name = "io_bazel_rules_go", |
| sha256 = "7b9bbe3ea1fccb46dcfa6c3f3e29ba7ec740d8733370e21cdc8937467b4a4349", |
| urls = [ |
| "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", |
| "https://github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", |
| ], |
| ) |
| |
| http_archive( |
| name = "bazel_gazelle", |
| sha256 = "d8c45ee70ec39a57e7a05e5027c32b1576cc7f16d9dd37135b0eddde45cf1b10", |
| urls = [ |
| "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", |
| "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", |
| ], |
| ) |
| |
| http_archive( |
| name = "com_google_protobuf", |
| sha256 = "d0f5f605d0d656007ce6c8b5a82df3037e1d8fe8b121ed42e536f569dec16113", |
| strip_prefix = "protobuf-3.14.0", |
| urls = [ |
| "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz", |
| "https://github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz", |
| ], |
| ) |
| |
| load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") |
| load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") |
| load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") |
| |
| go_repository( |
| name = "com_github_golang_protobuf", |
| build_file_proto_mode = "disable_global", |
| importpath = "github.com/golang/protobuf", |
| patch_args = ["-p1"], |
| patches = ["@io_bazel_rules_go//third_party:com_github_golang_protobuf-extras.patch"], |
| sum = "h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=", |
| version = "v1.3.5", |
| ) |
| |
| go_rules_dependencies() |
| |
| go_register_toolchains() |
| |
| gazelle_dependencies() |
| |
| protobuf_deps() |
| |
| Some of the dependencies declared by ``go_rules_dependencies`` require |
| additional patches and or adjustments compared to what `go_repository`_ |
| generates by default (as ``com_github_golang_protobuf`` does in the example |
| above). Patches may be found in the `third_party`_ directory. |
| See notes in `repositories.bzl`_. If you're generated build files with |
| `go_repository`_, you do not need the ``*-gazelle.patch`` files. |