forked from hswaw/hscloud
53 lines
1.9 KiB
Markdown
53 lines
1.9 KiB
Markdown
Go dependency managment
|
|
=======================
|
|
|
|
Status: managed by [Gazelle](https://github.com/bazelbuild/bazel-gazelle).
|
|
|
|
|
|
.--------.
|
|
| go.mod |------------.
|
|
'--------' |
|
|
| go mod tidy | bazel //:gazelle-update-repos
|
|
V |
|
|
.--------. |
|
|
| go.sum |-----------.|
|
|
'--------' |
|
|
V
|
|
.---------------------------------.
|
|
| third_party/go/repositories.bzl |
|
|
'---------------------------------'
|
|
| bazel run //:gazelle
|
|
V
|
|
.----------------.
|
|
| **/BUILD.bazel |.
|
|
'----------------'|
|
|
'----------------'
|
|
| bazel build //...
|
|
V
|
|
.-----------------.
|
|
| build artifacts |
|
|
'-----------------'
|
|
|
|
Updating and adding new dependencies
|
|
------------------------------------
|
|
|
|
Add a Go dependency to your code, then:
|
|
|
|
$ bazel run @io_bazel_rules_go//go -- mod tidy
|
|
$ bazel run //:gazelle-update-repos
|
|
|
|
All generated sources (eg. protobuf stubs) that are usually built by Bazel are invisible to go(mod)-based tooling. To get around this, we place `gomod-generated-placeholder.go` files in package directories that would otherwise contain generated files. These are ignored by Gazelle (and thus by Bazel builds) but not by go(mod)-based tooling.
|
|
|
|
Adding a tool dependency
|
|
------------------------
|
|
|
|
If you want some go-based tool to be built (which isn't depended upon by existing Go code) you'll have to add a synthetic import to `//third_party/go/tools.go`. Then run go mod tidy and gazelle-update-repos.
|
|
|
|
Regenerating BUILDfiles
|
|
-----------------------
|
|
|
|
To traverse the monorepo and generate BUILD(.bazel) files for all Go code:
|
|
|
|
$ bazel run //:gazelle
|
|
|