build/analysis: make nogo stricter by enabling more checks

Change-Id: I2164e17ff0c11ffc22793bb8789f218ceda3706a
Reviewed-on: https://review.monogon.dev/c/monogon/+/2975
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/WORKSPACE b/WORKSPACE
index c66d693..867a99b 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -365,6 +365,16 @@
     ],
 )
 
+# CockroachDB repository used for linter passes.
+http_archive(
+    name = "com_github_cockroachdb_cockroach",
+    integrity = "sha256-3xYgvXmuPvrGgtSzfoK/K9p/FCH0eMZywAAL10A41k0=",
+    strip_prefix = "cockroach-23.2.4",
+    urls = [
+        "https://github.com/cockroachdb/cockroach/archive/v23.2.4.tar.gz",
+    ],
+)
+
 # bazeldnf is used to generate our sandbox root.
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
@@ -392,3 +402,13 @@
         "https://cloud.debian.org/images/cloud/bullseye/20230124-1270/debian-11-genericcloud-amd64-20230124-1270.qcow2",
     ],
 )
+
+# Used to include staticcheck as nogo analyzer
+http_archive(
+    name = "com_github_sluongng_nogo_analyzer",
+    integrity = "sha256-p0peRHUdKS0XvYeeWqi0C6qUtdwvBD3x46y7PiPq0HM=",
+    strip_prefix = "nogo-analyzer-0.0.2",
+    urls = [
+        "https://github.com/sluongng/nogo-analyzer/archive/refs/tags/v0.0.2.tar.gz",
+    ],
+)
diff --git a/build/analysis/BUILD.bazel b/build/analysis/BUILD.bazel
index cb3739a..ac7036a 100644
--- a/build/analysis/BUILD.bazel
+++ b/build/analysis/BUILD.bazel
@@ -1,46 +1,250 @@
+load("@com_github_sluongng_nogo_analyzer//staticcheck:def.bzl", ALL_STATICCHECK_ANALYZERS = "ANALYZERS", format_staticcheck_analyzers = "staticcheck_analyzers")
+load("@com_github_sluongng_nogo_analyzer//:def.bzl", gen_nogo_config = "nogo_config")
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
 load("@io_bazel_rules_go//go:def.bzl", "nogo")
 
+# NOGO_PASSES contains all enabled analyzers that nogo should execute.
+NOGO_PASSES = []
+
 # These deps enable the analyses equivalent to running `go vet`.
 # Passing vet = True enables only a tiny subset of these (the ones
 # that are always correct).
 # You can see the what `go vet` does by running `go doc cmd/vet`.
-govet = [
-    "@org_golang_x_tools//go/analysis/passes/asmdecl:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/assign:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/atomic:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/bools:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/buildtag:go_default_library",
+NOGO_PASSES += [
+    "@org_golang_x_tools//go/analysis/passes/appends",
+    "@org_golang_x_tools//go/analysis/passes/asmdecl",
+    "@org_golang_x_tools//go/analysis/passes/assign",
+    "@org_golang_x_tools//go/analysis/passes/atomic",
+    "@org_golang_x_tools//go/analysis/passes/atomicalign",
+    "@org_golang_x_tools//go/analysis/passes/bools",
+    "@org_golang_x_tools//go/analysis/passes/buildssa",
+    "@org_golang_x_tools//go/analysis/passes/buildtag",
     # Disable cgocall because it fails processing com_github_mattn_go_sqlite3 before exclusions are applied
-    #"@org_golang_x_tools//go/analysis/passes/cgocall:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/composite:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/copylock:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/httpresponse:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/lostcancel:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/nilfunc:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/printf:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/shift:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/stdmethods:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/structtag:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/tests:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/unmarshal:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/unreachable:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/unsafeptr:go_default_library",
-    "@org_golang_x_tools//go/analysis/passes/unusedresult:go_default_library",
+    #"@org_golang_x_tools//go/analysis/passes/cgocall",
+    "@org_golang_x_tools//go/analysis/passes/composite",
+    "@org_golang_x_tools//go/analysis/passes/copylock",
+    "@org_golang_x_tools//go/analysis/passes/deepequalerrors",
+    "@org_golang_x_tools//go/analysis/passes/defers",
+    "@org_golang_x_tools//go/analysis/passes/directive",
+    "@org_golang_x_tools//go/analysis/passes/errorsas",
+    # Disabled as there is no real benefit from it.
+    #"@org_golang_x_tools//go/analysis/passes/fieldalignment",
+    "@org_golang_x_tools//go/analysis/passes/framepointer",
+    "@org_golang_x_tools//go/analysis/passes/httpmux",
+    "@org_golang_x_tools//go/analysis/passes/httpresponse",
+    "@org_golang_x_tools//go/analysis/passes/ifaceassert",
+    # Disabled because we are using Go 1.22
+    # https://go.dev/blog/loopvar-preview
+    #"@org_golang_x_tools//go/analysis/passes/loopclosure",
+    "@org_golang_x_tools//go/analysis/passes/lostcancel",
+    "@org_golang_x_tools//go/analysis/passes/nilfunc",
+    "@org_golang_x_tools//go/analysis/passes/nilness",
+    "@org_golang_x_tools//go/analysis/passes/printf",
+    "@org_golang_x_tools//go/analysis/passes/reflectvaluecompare",
+    # Disabled because of too many false positives
+    # "@org_golang_x_tools//go/analysis/passes/shadow",
+    "@org_golang_x_tools//go/analysis/passes/shift",
+    "@org_golang_x_tools//go/analysis/passes/sigchanyzer",
+    "@org_golang_x_tools//go/analysis/passes/slog",
+    "@org_golang_x_tools//go/analysis/passes/sortslice",
+    "@org_golang_x_tools//go/analysis/passes/stdmethods",
+    "@org_golang_x_tools//go/analysis/passes/stringintconv",
+    "@org_golang_x_tools//go/analysis/passes/structtag",
+    "@org_golang_x_tools//go/analysis/passes/testinggoroutine",
+    "@org_golang_x_tools//go/analysis/passes/tests",
+    "@org_golang_x_tools//go/analysis/passes/timeformat",
+    "@org_golang_x_tools//go/analysis/passes/unmarshal",
+    "@org_golang_x_tools//go/analysis/passes/unreachable",
+    "@org_golang_x_tools//go/analysis/passes/unsafeptr",
+    "@org_golang_x_tools//go/analysis/passes/unusedresult",
+    "@org_golang_x_tools//go/analysis/passes/unusedwrite",
 ]
 
+# Append some passes provided by CockroachDB.
+NOGO_PASSES += [
+    "@com_github_cockroachdb_cockroach//pkg/testutils/lint/passes/errcmp",
+    # TODO(tim): Enable when fixed
+    # "@com_github_cockroachdb_cockroach//pkg/testutils/lint/passes/errwrap",
+    "@com_github_cockroachdb_cockroach//pkg/testutils/lint/passes/hash",
+    "@com_github_cockroachdb_cockroach//pkg/testutils/lint/passes/nilness",
+    "@com_github_cockroachdb_cockroach//pkg/testutils/lint/passes/nocopy",
+    "@com_github_cockroachdb_cockroach//pkg/testutils/lint/passes/returnerrcheck",
+    "@com_github_cockroachdb_cockroach//pkg/testutils/lint/passes/timer",
+    "@com_github_cockroachdb_cockroach//pkg/testutils/lint/passes/unconvert",
+]
+
+# Combine all staticcheck analyzers with a list
+# of all globally disabled staticcheck analyzers
+# and append them to the nogo passes.
+NOGO_PASSES += format_staticcheck_analyzers(ALL_STATICCHECK_ANALYZERS + [
+    "-ST1000",  # at least one file in a package should have a package comment
+    "-ST1003",  # should not use ALL_CAPS in Go names; use CamelCase instead
+    "-QF1006",  # could lift into loop condition
+    "-QF1003",  # could use tagged switch
+    "-QF1008",  # Omit embedded fields from selector expression
+
+    # TODO: Enable when fixed
+    "-SA4003",  # no value of type uint32 is less than 0
+])
+
+NOGO_PASSES += [
+    # This analyzer ensures that all comment lines are <= 80 characters long
+    # in Go source. This is in line with general practices around the Go
+    # community, where code lines can be as long as needed (and is expected
+    # to be soft-reflowable by text editors), but comments are kept at a
+    # 'standard' 80 characters long, as prose within comment blocks does not
+    # soft-reflow well.
+    "@com_github_corverroos_commentwrap//:go_default_library",
+    "//build/analysis/checkcompilerdirectives",
+    "//build/analysis/noioutil",
+    "//build/analysis/importsort",
+]
+
+# NOGO_CONFIG contains the overrides for nogo to exempt specific files
+# from being analyzed.
+NOGO_CONFIG = {
+    "shift": {
+        "exclude_files": {
+            "external/dev_gvisor_gvisor": "third_party",
+        },
+    },
+    "stringintconv": {
+        "exclude_files": {
+            "external/com_github_masterminds_goutils": "third_party",
+        },
+    },
+    "noioutil": {
+        "exclude_files": {
+            "external/": "TODO(tim): break me up and filter out unmaintained dependencies",
+        },
+    },
+    "nilness": {
+        "exclude_files": {
+            "external/org_golang_x_tools": "third_party",
+            "external/in_gopkg_yaml_v2": "third_party",
+            "external/com_github_google_cadvisor": "third_party",
+            "external/com_github_pkg_sftp": "third_party",
+            "external/com_github_vishvananda_netlink": "third_party",
+            "external/com_github_go_sql_driver_mysql": "third_party",
+            "external/com_github_google_go_tpm": "third_party",
+            "external/com_github_json_iterator_go": "third_party",
+            "external/com_github_gregjones_httpcache": "third_party",
+            "external/com_github_cilium_ebpf": "third_party",
+            "external/com_github_urfave_cli": "third_party",
+            "external/in_gopkg_square_go_jose_v2": "third_party",
+            "external/com_github_alecthomas_kingpin_v2": "third_party",
+            "external/io_k8s_mount_utils": "third_party",
+            "external/com_github_stefanberger_go_pkcs11uri": "third_party",
+            "external/com_github_go_delve_delve": "third_party",
+            "external/io_opencensus_go": "third_party",
+            "external/io_k8s_apimachinery": "third_party",
+            "external/io_k8s_kubernetes": "third_party",
+            "external/io_k8s_kube_openapi": "third_party",
+            "external/io_k8s_apiextensions_apiserver": "third_party",
+            "external/io_etcd_go_etcd_client_v3": "third_party",
+            "external/com_github_coredns_coredns": "third_party",
+            "external/io_etcd_go_etcd_server_v3": "third_party",
+            "external/com_github_containerd_containerd": "third_party",
+            "external/io_k8s_client_go": "third_party",
+            "external/io_k8s_apiserver": "third_party",
+            "external/io_k8s_kubectl": "third_party",
+            "external/com_github_spf13_pflag": "third_party",
+            "external/com_github_burntsushi_toml": "third_party",
+        },
+    },
+    "unsafeptr": {
+        "exclude_files": {
+            "external/com_github_modern_go_reflect2/": "third_party",
+            "sqlite3.*go": "third_party",
+            "external/dev_gvisor_gvisor/": "third_party",
+            "external/io_k8s_sigs_structured_merge_diff/": "third_party",
+            "external/com_github_go_delve_delve/": "third_party",
+            "external/com_github_mailru_easyjson/jlexer/": "third_party",
+            "external/com_github_cilium_ebpf/": "third_party",
+            "external/org_golang_x_sys": "third_party",
+            "external/net_starlark_go": "third_party",
+            "external/com_github_pingcap_tidb_parser": "third_party",
+            "external/com_github_dennwc_btrfs": "third_party",
+        },
+    },
+    "lostcancel": {
+        "exclude_files": {
+            "external/org_golang_x_tools": "third_party",
+            "external/com_github_grpc_ecosystem_grpc_gateway": "third_party",
+        },
+    },
+    "deepequalerrors": {
+        "exclude_files": {
+            "external/com_github_u_root_uio": "third_party",
+        },
+    },
+    "copylocks": {
+        "exclude_files": {
+            "external/org_golang_google_protobuf": "third_party",
+            "external/com_github_derekparker_trie": "third_party",
+            "external/com_github_hodgesds_perf_utils": "third_party",
+            "external/com_github_google_gnostic": "third_party",
+            "external/com_github_coredns_coredns": "third_party",
+            "external/com_github_pseudomuto_protoc_gen_doc": "third_party",
+            "external/io_k8s_apiserver": "third_party",
+        },
+    },
+    "defers": {
+        "exclude_files": {
+            "external/com_github_sbezverk_nfproxy": "third_party",
+        },
+    },
+    "unparam": {
+        "exclude_files": {
+            "external/": "third_party",
+            "bazel-out/": "generated_output",
+            "cgo/": "cgo",
+        },
+    },
+}
+
+# All analyzers that should be disabled for external, generated or cgo code.
+DISABLED_FOR_EXTERNAL_CODE = [
+    "exclude_files",
+    "commentwrap",
+    "importsort",
+    "unreachable",
+    "unusedwrite",
+    "composites",
+    "stdmethods",
+    "reflectvaluecompare",
+    "unconvert",
+    "errwrap",
+    "ruleguard",
+    "returnerrcheck",
+    "hash",
+    "errcmp",
+] + ALL_STATICCHECK_ANALYZERS
+
+# We override the variable with itself unioned with the other
+# config part, as the Intellij integration doesn't understand
+# the |= expression which makes editing this file kinda annoying.
+NOGO_CONFIG = NOGO_CONFIG | {
+    analyzer: {
+        "exclude_files": {
+            # Don't run linters on external dependencies
+            "external/": "third_party",
+            "bazel-out/": "generated_output",
+            "cgo/": "cgo",
+        },
+    }
+    for analyzer in DISABLED_FOR_EXTERNAL_CODE
+}
+
+write_file(
+    name = "nogo_config",
+    out = "nogo_config.json",
+    content = [json.encode_indent(NOGO_CONFIG)],
+)
+
 nogo(
     name = "nogo",
-    config = "nogo_config.json",
+    config = ":nogo_config",
     visibility = ["//visibility:public"],
-    deps = govet + [
-        # This analyzer ensures that all comment lines are <= 80 characters long
-        # in Go source. This is in line with general practices around the Go
-        # community, where code lines can be as long as needed (and is expected
-        # to be soft-reflowable by text editors), but comments are kept at a
-        # 'standard' 80 characters long, as prose within comment blocks does not
-        # soft-reflow well.
-        "@com_github_corverroos_commentwrap//:go_default_library",
-        "//build/analysis/noioutil",
-        "//build/analysis/importsort",
-    ],
+    deps = NOGO_PASSES,
 )
diff --git a/build/analysis/checkcompilerdirectives/BUILD.bazel b/build/analysis/checkcompilerdirectives/BUILD.bazel
new file mode 100644
index 0000000..4d0da9c
--- /dev/null
+++ b/build/analysis/checkcompilerdirectives/BUILD.bazel
@@ -0,0 +1,9 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+
+go_library(
+    name = "checkcompilerdirectives",
+    srcs = ["checkcompilerdirectives.go"],
+    importpath = "source.monogon.dev/build/analysis/checkcompilerdirectives",
+    visibility = ["//visibility:public"],
+    deps = ["@com_4d63_gocheckcompilerdirectives//checkcompilerdirectives"],
+)
diff --git a/build/analysis/checkcompilerdirectives/checkcompilerdirectives.go b/build/analysis/checkcompilerdirectives/checkcompilerdirectives.go
new file mode 100644
index 0000000..a3bbe85
--- /dev/null
+++ b/build/analysis/checkcompilerdirectives/checkcompilerdirectives.go
@@ -0,0 +1,5 @@
+package checkcompilerdirectives
+
+import "4d63.com/gocheckcompilerdirectives/checkcompilerdirectives"
+
+var Analyzer = checkcompilerdirectives.Analyzer()
diff --git a/build/analysis/nogo_config.json b/build/analysis/nogo_config.json
deleted file mode 100644
index 54c4caf..0000000
--- a/build/analysis/nogo_config.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "composites": {
-    "exclude_files": {
-      "external/": "third_party",
-      "metropolis/pkg/bootparam/": "gofuzz",
-      "go/algorithm/toposort/": "gofuzz"
-    }
-  },
-  "copylocks": {
-    "exclude_files": {
-      "external/": "third_party"
-    }
-  },
-  "lostcancel": {
-    "exclude_files": {
-      "external/": "third_party"
-    }
-  },
-  "unreachable": {
-    "exclude_files": {
-      "external/": "third_party"
-    }
-  },
-  "assign": {
-    "exclude_files": {
-      "external/bazel_gazelle/walk": "third_party"
-    }
-  },
-  "shift": {
-    "exclude_files": {
-      "external/dev_gvisor_gvisor/": "third_party"
-    }
-  },
-  "unsafeptr": {
-    "exclude_files": {
-      "external/com_github_modern_go_reflect2/": "third_party",
-      "sqlite3.*go": "third_party",
-      "external/dev_gvisor_gvisor/": "third_party",
-      "external/io_k8s_sigs_structured_merge_diff/": "third_party",
-      "external/com_github_go_delve_delve/": "third_party",
-      "external/com_github_mailru_easyjson/jlexer/": "third_party",
-      "external/com_github_cilium_ebpf/": "third_party",
-      "external/org_golang_x_sys": "third_party",
-      "external/net_starlark_go": "third_party",
-      "external/com_github_pingcap_tidb_parser": "third_party",
-      "external/com_github_dennwc_btrfs": "third_party"
-    }
-  },
-  "unusedresult": {
-    "exclude_files": {
-      "external/io_k8s_kubernetes/": "third_party",
-      "external/com_github_docker_spdystream": "third_party",
-      "external/io_k8s_apimachinery/": "third_party"
-    }
-  },
-  "structtag": {
-    "exclude_files": {
-      "external/io_k8s_kubernetes/": "third_party",
-      "external/com_github_c9s_goprocinfo/": "third_party"
-    }
-  },
-  "printf": {
-    "exclude_files": {
-      "external/": "third_party"
-    }
-  },
-  "commentwrap": {
-    "exclude_files": {
-      "external/": "third_party",
-      "cgo/": "cgo"
-    }
-  },
-  "noioutil": {
-    "exclude_files": {
-      "external/": "third_party"
-    }
-  },
-  "importsort": {
-    "exclude_files": {
-      "external/": "third_party",
-      "bazel-out/": "generated_output"
-    }
-  },
-  "stdmethods": {
-    "exclude_files": {
-      "external/": "third_party"
-    }
-  }
-}
diff --git a/build/analysis/tools.go b/build/analysis/tools.go
index e6403d4..7936b16 100644
--- a/build/analysis/tools.go
+++ b/build/analysis/tools.go
@@ -4,5 +4,7 @@
 package analysis
 
 import (
+	_ "4d63.com/gocheckcompilerdirectives/checkcompilerdirectives"
 	_ "github.com/corverroos/commentwrap/cmd/commentwrap"
+	_ "honnef.co/go/tools/cmd/staticcheck"
 )
diff --git a/go.mod b/go.mod
index 268e87b..2e10700 100644
--- a/go.mod
+++ b/go.mod
@@ -73,6 +73,7 @@
 replace golang.org/x/exp => golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
 
 require (
+	4d63.com/gocheckcompilerdirectives v1.2.1
 	cloud.google.com/go/storage v1.30.1
 	github.com/adrg/xdg v0.4.0
 	github.com/bazelbuild/rules_go v0.43.0
@@ -133,19 +134,20 @@
 	go.starlark.net v0.0.0-20230525235612-a134d8f9ddca
 	go.uber.org/multierr v1.11.0
 	go.uber.org/zap v1.25.0
-	golang.org/x/crypto v0.21.0
-	golang.org/x/mod v0.14.0
-	golang.org/x/net v0.23.0
-	golang.org/x/sync v0.5.0
-	golang.org/x/sys v0.18.0
+	golang.org/x/crypto v0.22.0
+	golang.org/x/mod v0.17.0
+	golang.org/x/net v0.24.0
+	golang.org/x/sync v0.7.0
+	golang.org/x/sys v0.19.0
 	golang.org/x/text v0.14.0
 	golang.org/x/time v0.3.0
-	golang.org/x/tools v0.16.1
+	golang.org/x/tools v0.20.0
 	golang.zx2c4.com/wireguard/wgctrl v0.0.0-20220208144051-fde48d68ee68
 	google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d
 	google.golang.org/grpc v1.59.0
 	google.golang.org/protobuf v1.33.0
 	gvisor.dev/gvisor v0.0.0-20230911190645-2e1d76499fd5
+	honnef.co/go/tools v0.4.2
 	k8s.io/api v0.28.8
 	k8s.io/apimachinery v0.28.8
 	k8s.io/apiserver v0.28.8
@@ -166,6 +168,7 @@
 	cloud.google.com/go/iam v1.1.1 // indirect
 	github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
 	github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 // indirect
+	github.com/BurntSushi/toml v1.2.1 // indirect
 	github.com/DataDog/appsec-internal-go v1.0.0 // indirect
 	github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.0-devel.0.20230725154044-2549ba9058df // indirect
 	github.com/DataDog/go-libddwaf v1.4.2 // indirect
@@ -210,7 +213,9 @@
 	github.com/prometheus/exporter-toolkit v0.10.0 // indirect
 	github.com/quic-go/qtls-go1-20 v0.3.1 // indirect
 	github.com/quic-go/quic-go v0.37.4 // indirect
+	github.com/rogpeppe/go-internal v1.11.0 // indirect
 	github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
+	github.com/stretchr/objx v0.5.1 // indirect
 	github.com/xhit/go-str2duration/v2 v2.1.0 // indirect
 	go.etcd.io/bbolt v1.3.9 // indirect
 	go.etcd.io/etcd/client/v2 v2.305.13 // indirect
@@ -229,6 +234,7 @@
 	go4.org/intern v0.0.0-20211027215823-ae77deb06f29 // indirect
 	go4.org/unsafe/assume-no-moving-gc v0.0.0-20220617031537-928513b29760 // indirect
 	golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 // indirect
+	golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
 	howett.net/plist v1.0.0 // indirect
 	inet.af/netaddr v0.0.0-20220811202034-502d2d690317 // indirect
@@ -360,7 +366,7 @@
 	github.com/josharian/native v1.1.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/karrick/godirwalk v1.17.0 // indirect
-	github.com/klauspost/compress v1.17.2
+	github.com/klauspost/compress v1.17.6
 	github.com/kr/fs v0.1.0 // indirect
 	github.com/kr/pty v1.1.8 // indirect
 	github.com/libopenstorage/openstorage v1.0.0 // indirect
@@ -442,7 +448,7 @@
 	go.uber.org/atomic v1.11.0 // indirect
 	golang.org/x/arch v0.3.0 // indirect
 	golang.org/x/oauth2 v0.14.0 // indirect
-	golang.org/x/term v0.18.0 // indirect
+	golang.org/x/term v0.19.0 // indirect
 	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
 	golang.zx2c4.com/wireguard v0.0.0-20220202223031-3b95c81cc178 // indirect
 	google.golang.org/api v0.136.0 // indirect
diff --git a/go.sum b/go.sum
index 0e7d409..c4e419a 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,5 @@
+4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA=
+4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs=
 4d63.com/gochecknoinits v0.0.0-20200108094044-eb73b47b9fc4/go.mod h1:4o1i5aXtIF5tJFt3UD1knCVmWOXg7fLYdHVu6jeNcnM=
 bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
 bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
@@ -690,6 +692,7 @@
 github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
 github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
 github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
 github.com/DataDog/appsec-internal-go v1.0.0 h1:2u5IkF4DBj3KVeQn5Vg2vjPUtt513zxEYglcqnd500U=
@@ -1995,8 +1998,8 @@
 github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI=
+github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
 github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE=
 github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
 github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
@@ -2567,8 +2570,9 @@
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
 github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
 github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
 github.com/rs/cors v1.8.0 h1:P2KMzcFwrPoSjkF1WLRPsp3UMLyql8L4v9hQpVeK5so=
 github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM=
@@ -2687,8 +2691,9 @@
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.1 h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0=
+github.com/stretchr/objx v0.5.1/go.mod h1:/iHQpkQwBD6DLUmQ4pE+s1TXdob1mORJ4/UFdrifcy0=
 github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
@@ -3034,10 +3039,12 @@
 golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
 golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
 golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
-golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
-golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
 golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
 golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
+golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a h1:Jw5wfR+h9mnIYH+OtGT2im5wV1YGGDora5vTv/aa5bE=
+golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
 golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
 golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -3078,8 +3085,9 @@
 golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
 golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
+golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -3189,8 +3197,8 @@
 golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
 golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
 golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
-golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
-golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
 golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -3249,8 +3257,9 @@
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
 golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
+golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -3441,8 +3450,8 @@
 golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.14.1-0.20231108175955-e4099bfacb8c/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
-golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -3461,8 +3470,8 @@
 golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
 golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
-golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
-golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -3599,8 +3608,9 @@
 golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
 golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
 golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
-golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
 golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
+golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY=
+golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -4045,6 +4055,8 @@
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
 honnef.co/go/tools v0.2.2/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY=
+honnef.co/go/tools v0.4.2 h1:6qXr+R5w+ktL5UkwEbPp+fEvfyoMPche6GkOpGHZcLc=
+honnef.co/go/tools v0.4.2/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA=
 howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
 howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=
 inet.af/netaddr v0.0.0-20220811202034-502d2d690317 h1:U2fwK6P2EqmopP/hFLTOAjWTki0qgd4GMJn5X8wOleU=
diff --git a/third_party/go/repositories.bzl b/third_party/go/repositories.bzl
index 646e24a..eea22c8 100644
--- a/third_party/go/repositories.bzl
+++ b/third_party/go/repositories.bzl
@@ -44,6 +44,12 @@
         version = "v0.4.2",
     )
     go_repository(
+        name = "com_4d63_gocheckcompilerdirectives",
+        importpath = "4d63.com/gocheckcompilerdirectives",
+        sum = "h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA=",
+        version = "v1.2.1",
+    )
+    go_repository(
         name = "com_4d63_gochecknoinits",
         importpath = "4d63.com/gochecknoinits",
         sum = "h1:bf5qocEKjrY58JO2GwywfLsb1199lIVs7qHkiplwHy0=",
@@ -3354,8 +3360,8 @@
     go_repository(
         name = "com_github_klauspost_compress",
         importpath = "github.com/klauspost/compress",
-        sum = "h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=",
-        version = "v1.17.2",
+        sum = "h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI=",
+        version = "v1.17.6",
     )
     go_repository(
         name = "com_github_klauspost_cpuid",
@@ -4698,8 +4704,8 @@
     go_repository(
         name = "com_github_rogpeppe_go_internal",
         importpath = "github.com/rogpeppe/go-internal",
-        sum = "h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=",
-        version = "v1.10.0",
+        sum = "h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=",
+        version = "v1.11.0",
     )
     go_repository(
         name = "com_github_rs_cors",
@@ -5039,8 +5045,8 @@
     go_repository(
         name = "com_github_stretchr_objx",
         importpath = "github.com/stretchr/objx",
-        sum = "h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=",
-        version = "v0.5.0",
+        sum = "h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0=",
+        version = "v0.5.1",
     )
     go_repository(
         name = "com_github_stretchr_testify",
@@ -7308,8 +7314,8 @@
     go_repository(
         name = "org_golang_x_crypto",
         importpath = "golang.org/x/crypto",
-        sum = "h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=",
-        version = "v0.21.0",
+        sum = "h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=",
+        version = "v0.22.0",
     )
     go_repository(
         name = "org_golang_x_exp",
@@ -7319,6 +7325,12 @@
         version = "v0.0.0-20231110203233-9a3e6036ecaa",
     )
     go_repository(
+        name = "org_golang_x_exp_typeparams",
+        importpath = "golang.org/x/exp/typeparams",
+        sum = "h1:Jw5wfR+h9mnIYH+OtGT2im5wV1YGGDora5vTv/aa5bE=",
+        version = "v0.0.0-20221208152030-732eee02a75a",
+    )
+    go_repository(
         name = "org_golang_x_image",
         importpath = "golang.org/x/image",
         sum = "h1:TcHcE0vrmgzNH1v3ppjcMGbhG5+9fMuvOmUYwNEF4q4=",
@@ -7337,14 +7349,14 @@
             "-go_naming_convention_external=import_alias",
         ],
         importpath = "golang.org/x/mod",
-        sum = "h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=",
-        version = "v0.14.0",
+        sum = "h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=",
+        version = "v0.17.0",
     )
     go_repository(
         name = "org_golang_x_net",
         importpath = "golang.org/x/net",
-        sum = "h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=",
-        version = "v0.23.0",
+        sum = "h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=",
+        version = "v0.24.0",
     )
     go_repository(
         name = "org_golang_x_oauth2",
@@ -7359,20 +7371,26 @@
             "-go_naming_convention_external=import_alias",
         ],
         importpath = "golang.org/x/sync",
-        sum = "h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=",
-        version = "v0.5.0",
+        sum = "h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=",
+        version = "v0.7.0",
     )
     go_repository(
         name = "org_golang_x_sys",
         importpath = "golang.org/x/sys",
-        sum = "h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=",
-        version = "v0.18.0",
+        sum = "h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=",
+        version = "v0.19.0",
+    )
+    go_repository(
+        name = "org_golang_x_telemetry",
+        importpath = "golang.org/x/telemetry",
+        sum = "h1:IRJeR9r1pYWsHKTRe/IInb7lYvbBVIqOgsX/u0mbOWY=",
+        version = "v0.0.0-20240228155512-f48c80bd79b2",
     )
     go_repository(
         name = "org_golang_x_term",
         importpath = "golang.org/x/term",
-        sum = "h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=",
-        version = "v0.18.0",
+        sum = "h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=",
+        version = "v0.19.0",
     )
     go_repository(
         name = "org_golang_x_text",
@@ -7393,8 +7411,8 @@
         patches = [
             "//third_party/go/patches:goimports-group-merging.patch",
         ],
-        sum = "h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=",
-        version = "v0.16.1",
+        sum = "h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY=",
+        version = "v0.20.0",
     )
     go_repository(
         name = "org_golang_x_xerrors",