go: re-do the entire thing

This is a mega-change, but attempting to split this up further is
probably not worth the effort.

Summary:

1. Bump up bazel, rules_go, and others.
2. Switch to new go target naming (bye bye go_default_library)
3. Move go deps to go.mod/go.sum, use make gazelle generate from that
4. Bump up Python deps a bit

And also whatever was required to actually get things to work - loads of
small useless changes.

Tested to work on NixOS and Ubuntu 20.04:

   $ bazel build //...
   $ bazel test //...

Change-Id: I8364bdaa1406b9ae4d0385a6b607f3e7989f98a9
Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1583
Reviewed-by: q3k <q3k@hackerspace.pl>
diff --git a/WORKSPACE b/WORKSPACE
index 2b8dc07..376fe43 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -2,50 +2,15 @@
     name = "hscloud",
 )
 
+local_repository(
+    name = "rules_jvm_external",
+    path = "/home/q3k/Software/rules_jvm_external",
+)
+
 load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file")
 
-# Protobuf deps (shared between many rules).
-# Load this as early as possible, to avoid a different version being pulled in by deps of something else
-http_archive(
-    name = "com_google_protobuf",
-    sha256 = "8b28fdd45bab62d15db232ec404248901842e5340299a57765e48abe8a80d930",
-    strip_prefix = "protobuf-3.20.1",
-    urls = ["https://github.com/google/protobuf/archive/v3.20.1.tar.gz"],
-)
-
-load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
-
-protobuf_deps()
-
-rules_python_version = "0.13.0"
-http_archive(
-    name = "rules_python",
-    sha256 = "8c8fe44ef0a9afc256d1e75ad5f448bb59b81aba149b8958f02f7b3a98f5d9b4",
-    strip_prefix = "rules_python-{}".format(rules_python_version),
-    url = "https://github.com/bazelbuild/rules_python/archive/refs/tags/{}.tar.gz".format(rules_python_version),
-)
-
-# Download Go/Gazelle rules
-http_archive(
-    name = "io_bazel_rules_go",
-    sha256 = "099a9fb96a376ccbbb7d291ed4ecbdfd42f6bc822ab77ae6f1b5cb9e914e94fa",
-    urls = [
-        "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.35.0/rules_go-v0.35.0.zip",
-        "https://github.com/bazelbuild/rules_go/releases/download/v0.35.0/rules_go-v0.35.0.zip",
-    ],
-)
-
-http_archive(
-    name = "bazel_gazelle",
-    sha256 = "448e37e0dbf61d6fa8f00aaa12d191745e14f07c31cabfa731f0c8e8a4f41b97",
-    urls = [
-        "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.28.0/bazel-gazelle-v0.28.0.tar.gz",
-        "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.28.0/bazel-gazelle-v0.28.0.tar.gz",
-    ],
-)
-
-# Gazelle started requiring this after we bumped the version to v0.28.0.
+# Load skylib
 http_archive(
     name = "bazel_skylib",
     sha256 = "74d544d96f4a5bb630d465ca8bbcfe231e3594e5aae57e1edbf17a6eb3ca2506",
@@ -59,6 +24,67 @@
 
 bazel_skylib_workspace()
 
+load("@bazel_skylib//lib:versions.bzl", "versions")
+
+versions.check(minimum_bazel_version = "5.4.1")
+
+# Protobuf deps (shared between many rules).
+# Load this as early as possible, to avoid a different version being pulled in by deps of something else
+http_archive(
+    name = "com_google_protobuf",
+    sha256 = "76a33e2136f23971ce46c72fd697cd94dc9f73d56ab23b753c3e16854c90ddfd",
+    strip_prefix = "protobuf-2c5fa078d8e86e5f4bd34e6f4c9ea9e8d7d4d44a",
+    urls = [
+        "https://github.com/protocolbuffers/protobuf/archive/2c5fa078d8e86e5f4bd34e6f4c9ea9e8d7d4d44a.tar.gz",
+    ],
+)
+
+http_archive(
+    name = "rules_proto",
+    sha256 = "dc3fb206a2cb3441b485eb1e423165b231235a1ea9b031b4433cf7bc1fa460dd",
+    strip_prefix = "rules_proto-5.3.0-21.7",
+    urls = [
+        "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz",
+    ],
+)
+
+load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
+
+rules_proto_dependencies()
+
+rules_proto_toolchains()
+
+rules_python_version = "0.24.0"
+
+http_archive(
+    name = "rules_python",
+    sha256 = "0a8003b044294d7840ac7d9d73eef05d6ceb682d7516781a4ec62eeb34702578",
+    strip_prefix = "rules_python-{}".format(rules_python_version),
+    url = "https://github.com/bazelbuild/rules_python/archive/refs/tags/{}.tar.gz".format(rules_python_version),
+)
+
+# Download Go/Gazelle rules
+http_archive(
+    name = "io_bazel_rules_go",
+    sha256 = "51dc53293afe317d2696d4d6433a4c33feedb7748a9e352072e2ec3c0dafd2c6",
+    urls = [
+        "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.40.1/rules_go-v0.40.1.zip",
+        "https://github.com/bazelbuild/rules_go/releases/download/v0.40.1/rules_go-v0.40.1.zip",
+    ],
+)
+
+http_archive(
+    name = "bazel_gazelle",
+    sha256 = "29d5dafc2a5582995488c6735115d1d366fcd6a0fc2e2a153f02988706349825",
+    urls = [
+        "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.31.0/bazel-gazelle-v0.31.0.tar.gz",
+        "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.31.0/bazel-gazelle-v0.31.0.tar.gz",
+    ],
+)
+
+load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
+load("//third_party/go:repositories.bzl", "go_repositories")
+
 # Python rules
 load("@rules_python//python:repositories.bzl", "python_register_toolchains")
 
@@ -77,19 +103,38 @@
 )
 
 load("@pydeps//:requirements.bzl", "install_deps")
+
 install_deps()
 
 # Setup Go toolchain.
-load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains")
 
-go_register_toolchains(version = "1.18.3")
+# gazelle:repository_macro third_party/go/repositories.bzl%go_repositories
+# gazelle:repository go_repository name=hscloud importpath=code.hackerspace.pl/hscloud
+go_repositories()
 
-# IMPORTANT: match protobuf version above with the one loaded by grpc
+load("@bazel_gazelle//:deps.bzl", "go_repository")
+
+go_repository(
+    name = "org_golang_x_mod",
+    build_external = "external",
+    importpath = "golang.org/x/mod",
+    sum = "h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=",
+    version = "v0.10.0",
+)
+
+go_rules_dependencies()
+
+go_register_toolchains(go_version = "1.20.5")
+
 http_archive(
     name = "com_github_grpc_grpc",
-    sha256 = "419dba362eaf8f1d36849ceee17c3e2ff8ff12ac666b42d3ff02a164ebe090e9",
-    strip_prefix = "grpc-1.30.0",
-    urls = ["https://github.com/grpc/grpc/archive/v1.30.0.tar.gz"],
+    patch_args = ["-p1"],
+    patches = [
+        "//third_party:grpc_extra_deps.patch",
+    ],
+    sha256 = "931f07db9d48cff6a6007c1033ba6d691fe655bea2765444bc1ad974dfc840aa",
+    strip_prefix = "grpc-1.56.2",
+    urls = ["https://github.com/grpc/grpc/archive/v1.56.2.tar.gz"],
 )
 
 # Load grpc deps after Go, to prevent overriding Go toolchains/SDK.
@@ -101,47 +146,20 @@
 
 grpc_extra_deps()
 
-load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies")
-
-go_rules_dependencies()
-
-# gazelle:repository_macro third_party/go/repositories.bzl%go_repositories
-load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")
-
-# Force newer version of golang.org/x/crypto that gazelle_dependencies would
-# usually get.
-go_repository(
-    name = "org_golang_x_crypto",
-    build_naming_convention = "go_default_library",
-    importpath = "golang.org/x/crypto",
-    sum = "h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=",
-    version = "v0.0.0-20210921155107-089bfa567519",
-)
+load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
 
 gazelle_dependencies()
 
-# Load Go third-party packages.
-load("//third_party/go:repositories.bzl", "go_repositories")
-
-go_repositories()
-
 # Docker rules
 
 http_archive(
     name = "io_bazel_rules_docker",
-    sha256 = "27d53c1d646fc9537a70427ad7b034734d08a9c38924cc6357cc973fed300820",
-    strip_prefix = "rules_docker-0.24.0",
-    urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.24.0/rules_docker-v0.24.0.tar.gz"],
+    sha256 = "b1e80761a8a8243d03ebca8845e9cc1ba6c82ce7c5179ce2b295cd36f7e394bf",
+    urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.25.0/rules_docker-v0.25.0.tar.gz"],
 )
 
 load("@io_bazel_rules_docker//toolchains/docker:toolchain.bzl", docker_toolchain_configure = "toolchain_configure")
 
-# This forces the use of Docker $HOME/.docker configuration.
-docker_toolchain_configure(
-    name = "docker_config",
-    docker_path = "/usr/bin/docker",
-)
-
 load(
     "@io_bazel_rules_docker//repositories:repositories.bzl",
     container_repositories = "repositories",
@@ -254,12 +272,16 @@
 
 # Go image repos for Docker
 
-load("@io_bazel_rules_docker//go:image.bzl", go_image_repositories = "repositories")
+load(
+    "@io_bazel_rules_docker//go:image.bzl",
+    go_image_repos = "repositories",
+)
 
-go_image_repositories()
+go_image_repos()
 
 # //hswaw/site deps.
 load("//hswaw/site:deps.bzl", "hswaw_site_deps")
+
 hswaw_site_deps()
 
 # noVNC, used by //dc/drackvm.
@@ -287,7 +309,7 @@
 http_file(
     name = "calicoctl_3_15",
     downloaded_file_path = "calicoctl",
-    urls = ["https://github.com/projectcalico/calicoctl/releases/download/v3.15.5/calicoctl"],
-    sha256 = "f49e9e8d25108f7f22d5a51c756b2fe40cbe36347ad297e31a767376172f2845",
     executable = True,
+    sha256 = "f49e9e8d25108f7f22d5a51c756b2fe40cbe36347ad297e31a767376172f2845",
+    urls = ["https://github.com/projectcalico/calicoctl/releases/download/v3.15.5/calicoctl"],
 )