build/analysis: replace nogo staticcheck adapter

The upstream repo is not very active and requires us to override the rules_go
dependency name. By building our own adapter, we don't need it anymore.

Change-Id: I6e539881a23a1934d0bf6ebc2d79d02469bd4c6a
Reviewed-on: https://review.monogon.dev/c/monogon/+/4481
Tested-by: Jenkins CI
Reviewed-by: Leopold Schabel <leo@monogon.tech>
diff --git a/build/analysis/staticcheck/generate_analyzers/BUILD.bazel b/build/analysis/staticcheck/generate_analyzers/BUILD.bazel
new file mode 100644
index 0000000..0280cdb
--- /dev/null
+++ b/build/analysis/staticcheck/generate_analyzers/BUILD.bazel
@@ -0,0 +1,21 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
+load(":def.bzl", "generate_analyzers")
+
+generate_analyzers(
+    name = "analyzers",
+    visibility = ["//build/analysis/staticcheck:__pkg__"],
+)
+
+go_library(
+    name = "generate_analyzers_lib",
+    srcs = ["main.go"],
+    importpath = "source.monogon.dev/build/analysis/staticcheck/generate_analyzers",
+    visibility = ["//visibility:private"],
+    deps = ["//build/analysis/staticcheck:staticcheck_lib"],
+)
+
+go_binary(
+    name = "generate_analyzers",
+    embed = [":generate_analyzers_lib"],
+    visibility = ["//visibility:public"],
+)
diff --git a/build/analysis/staticcheck/generate_analyzers/def.bzl b/build/analysis/staticcheck/generate_analyzers/def.bzl
new file mode 100644
index 0000000..2356103
--- /dev/null
+++ b/build/analysis/staticcheck/generate_analyzers/def.bzl
@@ -0,0 +1,25 @@
+def _generate_analyzers_impl(ctx):
+    analyzers_file = ctx.actions.declare_file("analyzers.bzl")
+
+    args = ctx.actions.args()
+    args.add("-out")
+    args.add(analyzers_file)
+
+    ctx.actions.run(
+        outputs = [analyzers_file],
+        executable = ctx.executable._generate_analyzers,
+        arguments = [args],
+    )
+
+    return [DefaultInfo(files = depset([analyzers_file]), runfiles = ctx.runfiles(files = [analyzers_file]))]
+
+generate_analyzers = rule(
+    implementation = _generate_analyzers_impl,
+    attrs = {
+        "_generate_analyzers": attr.label(
+            default = ":generate_analyzers",
+            executable = True,
+            cfg = "exec",
+        ),
+    },
+)
diff --git a/build/analysis/staticcheck/generate_analyzers/main.go b/build/analysis/staticcheck/generate_analyzers/main.go
new file mode 100644
index 0000000..bcf96ff
--- /dev/null
+++ b/build/analysis/staticcheck/generate_analyzers/main.go
@@ -0,0 +1,44 @@
+// Copyright The Monogon Project Authors.
+// SPDX-License-Identifier: Apache-2.0
+
+package main
+
+import (
+	"flag"
+	"fmt"
+	"log"
+	"maps"
+	"os"
+	"slices"
+	"sort"
+
+	"source.monogon.dev/build/analysis/staticcheck"
+)
+
+func main() {
+	out := flag.String("out", "", "The output file to write the list to")
+	flag.Parse()
+
+	if *out == "" {
+		log.Fatal("-out argument is required")
+	}
+
+	outFile, err := os.OpenFile(*out, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0655)
+	if err != nil {
+		log.Fatalf("failed opening file: %v", err)
+	}
+	defer outFile.Close()
+
+	const fileHeader = "# Generated by //build/analysis/staticcheck/generate_analyzers\n# Do not modify!\n\nANALYZER_NAMES = [\n"
+	fmt.Fprint(outFile, fileHeader)
+
+	analyzerNames := slices.Collect(maps.Keys(staticcheck.Analyzers))
+	sort.Strings(analyzerNames)
+
+	for _, name := range analyzerNames {
+		fmt.Fprintf(outFile, "    %q,\n", name)
+	}
+
+	const fileFooter = "]\n"
+	fmt.Fprint(outFile, fileFooter)
+}