Import gazelle
This patch imports gazelle as a linter. It automatically generates
BUILD file entries for Go code and at the same time keeps BUILD files
formatted.
The `tools/lint:run-ci` target is set up to automatically add new Go
repositories as well.
I added a tool at `//tools/go:mirror_go_repos` that needs to be run
before anyone can merge code that uses third-party Go libraries.
Change-Id: I1fbf6761439d45893f5be88d294ccc3c567840ca
Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
diff --git a/tools/go/tweak_gazelle_go_deps.py b/tools/go/tweak_gazelle_go_deps.py
new file mode 100644
index 0000000..7189d43
--- /dev/null
+++ b/tools/go/tweak_gazelle_go_deps.py
@@ -0,0 +1,42 @@
+"""Tweaks the gazelle-generated go_deps.bzl to work with our mirrors.
+
+This script changes all invocations of go_repository() in go_deps.bzl to use
+maybe_override_go_dep(). That lets us more easily switch between upstream
+sources and our mirrored versions of the code.
+
+The motivation is to let folks use upstream sources during local development.
+For CI runs, however, we have to restrict ourselves to mirrored dependencies.
+"""
+
+import argparse
+import sys
+import textwrap
+
+import tools.go.mirror_lib
+
+def main(argv):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("go_deps_bzl", type=str)
+ args = parser.parse_args(argv[1:])
+
+ repos = tools.go.mirror_lib.parse_go_repositories(args.go_deps_bzl)
+
+ with open(args.go_deps_bzl, "w") as file:
+ file.write(textwrap.dedent("""\
+ # This file is auto-generated. Do not edit.
+ load("//tools/go:mirrored_go_deps.bzl", "maybe_override_go_dep")
+
+ def go_dependencies():
+ """))
+ for repo in repos:
+ file.write(textwrap.indent(textwrap.dedent(f"""\
+ maybe_override_go_dep(
+ name = "{repo['name']}",
+ importpath = "{repo['importpath']}",
+ sum = "{repo['sum']}",
+ version = "{repo['version']}",
+ )
+ """), " " * 4))
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv))