all: fix issues found by staticcheck

Staticcheck still has issues on trybots, but it can find things locally.
Until we fully enable, we fix issues it finds locally.

Change-Id: Ia9f587e756281832d3300ae2ea1a1d2c53096528
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/477356
Run-TryBot: Zvonimir Pavlinovic <zpavlinovic@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/cmd/govulncheck_sandbox/govulncheck_sandbox_test.go b/cmd/govulncheck_sandbox/govulncheck_sandbox_test.go
index 0c993b2..469b0f2 100644
--- a/cmd/govulncheck_sandbox/govulncheck_sandbox_test.go
+++ b/cmd/govulncheck_sandbox/govulncheck_sandbox_test.go
@@ -77,7 +77,7 @@
 	t.Run("binary", func(t *testing.T) {
 		t.Skip("govulncheck may not support the Go version")
 		const binary = "testdata/module/vuln"
-		cmd := exec.Command("go build")
+		cmd := exec.Command("go", "build")
 		cmd.Dir = "testdata/module"
 		if _, err := cmd.Output(); err != nil {
 			t.Fatal(derrors.IncludeStderr(err))
diff --git a/go.mod b/go.mod
index bb727ec..3d247e4 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,6 @@
 	cloud.google.com/go/bigquery v1.43.0
 	cloud.google.com/go/cloudtasks v1.8.0
 	cloud.google.com/go/errorreporting v0.1.0
-	cloud.google.com/go/logging v1.6.1
 	cloud.google.com/go/secretmanager v1.9.0
 	cloud.google.com/go/storage v1.27.0
 	github.com/GoogleCloudPlatform/opentelemetry-operations-go v1.0.0
@@ -39,7 +38,6 @@
 	cloud.google.com/go/compute v1.12.1 // indirect
 	cloud.google.com/go/compute/metadata v0.2.1 // indirect
 	cloud.google.com/go/iam v0.7.0 // indirect
-	cloud.google.com/go/longrunning v0.3.0 // indirect
 	cloud.google.com/go/monitoring v1.8.0 // indirect
 	cloud.google.com/go/trace v1.4.0 // indirect
 	github.com/BurntSushi/toml v0.3.1 // indirect
diff --git a/go.sum b/go.sum
index f39e849..5b770e9 100644
--- a/go.sum
+++ b/go.sum
@@ -54,10 +54,7 @@
 cloud.google.com/go/errorreporting v0.1.0/go.mod h1:cZSiBMvrnl0X13pD9DwKf9sQ8Eqy3EzHqkyKBZxiIrM=
 cloud.google.com/go/iam v0.7.0 h1:k4MuwOsS7zGJJ+QfZ5vBK8SgHBAvYN/23BWsiihJ1vs=
 cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg=
-cloud.google.com/go/logging v1.6.1 h1:ZBsZK+JG+oCDT+vaxwqF2egKNRjz8soXiS6Xv79benI=
-cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw=
 cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs=
-cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc=
 cloud.google.com/go/monitoring v1.2.0/go.mod h1:tE8I08OzjWmXLhCopnPaUDpfGOEJOonfWXGR9E9SsFo=
 cloud.google.com/go/monitoring v1.8.0 h1:c9riaGSPQ4dUKWB+M1Fl0N+iLxstMbCktdEwYSPGDvA=
 cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4=
diff --git a/internal/log/log.go b/internal/log/log.go
index 3cd28b9..4440dc0 100644
--- a/internal/log/log.go
+++ b/internal/log/log.go
@@ -8,10 +8,7 @@
 import (
 	"context"
 	"fmt"
-	"log"
-	"strings"
 
-	"cloud.google.com/go/logging"
 	"golang.org/x/exp/slog"
 )
 
@@ -62,30 +59,3 @@
 		l.Log(ctx, level, fmt.Sprintf(format, args...), slog.ErrorKey, err)
 	}
 }
-
-// toLevel returns the logging.Severity for a given string.
-// Possible input values are "", "debug", "info", "warning", "error", "fatal".
-// In case of invalid string input, it maps to DefaultLevel.
-func toLevel(v string) logging.Severity {
-	v = strings.ToLower(v)
-
-	switch v {
-	case "":
-		// default log level will print everything.
-		return logging.Default
-	case "debug":
-		return logging.Debug
-	case "info":
-		return logging.Info
-	case "warning":
-		return logging.Warning
-	case "error":
-		return logging.Error
-	case "fatal":
-		return logging.Critical
-	}
-
-	// Default log level in case of invalid input.
-	log.Printf("Error: %s is invalid LogLevel. Possible values are [debug, info, warning, error, fatal]", v)
-	return logging.Default
-}
diff --git a/internal/pkgsitedb/db.go b/internal/pkgsitedb/db.go
index 1ef7c86..a583067 100644
--- a/internal/pkgsitedb/db.go
+++ b/internal/pkgsitedb/db.go
@@ -17,10 +17,10 @@
 	_ "github.com/lib/pq"
 
 	secretmanager "cloud.google.com/go/secretmanager/apiv1"
+	smpb "cloud.google.com/go/secretmanager/apiv1/secretmanagerpb"
 	"golang.org/x/pkgsite-metrics/internal/config"
 	"golang.org/x/pkgsite-metrics/internal/derrors"
 	"golang.org/x/pkgsite-metrics/internal/scan"
-	smpb "google.golang.org/genproto/googleapis/cloud/secretmanager/v1"
 )
 
 // Open creates a connection to the pkgsite database.
diff --git a/internal/queue/queue.go b/internal/queue/queue.go
index 22c085f..32f1e6e 100644
--- a/internal/queue/queue.go
+++ b/internal/queue/queue.go
@@ -17,10 +17,10 @@
 	"time"
 
 	cloudtasks "cloud.google.com/go/cloudtasks/apiv2"
+	taskspb "cloud.google.com/go/cloudtasks/apiv2/cloudtaskspb"
 	"golang.org/x/pkgsite-metrics/internal/config"
 	"golang.org/x/pkgsite-metrics/internal/derrors"
 	"golang.org/x/pkgsite-metrics/internal/log"
-	taskspb "google.golang.org/genproto/googleapis/cloud/tasks/v2"
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"
 	"google.golang.org/protobuf/types/known/durationpb"
diff --git a/internal/queue/queue_test.go b/internal/queue/queue_test.go
index a7cbf48..2fcb7ef 100644
--- a/internal/queue/queue_test.go
+++ b/internal/queue/queue_test.go
@@ -7,9 +7,9 @@
 import (
 	"testing"
 
+	taskspb "cloud.google.com/go/cloudtasks/apiv2/cloudtaskspb"
 	"github.com/google/go-cmp/cmp"
 	"golang.org/x/pkgsite-metrics/internal/config"
-	taskspb "google.golang.org/genproto/googleapis/cloud/tasks/v2"
 	"google.golang.org/protobuf/testing/protocmp"
 	"google.golang.org/protobuf/types/known/durationpb"
 )
diff --git a/internal/scan/parse.go b/internal/scan/parse.go
index 6347296..1efcd76 100644
--- a/internal/scan/parse.go
+++ b/internal/scan/parse.go
@@ -117,9 +117,7 @@
 	if modulePath == "" {
 		return ModuleURLPath{}, fmt.Errorf("invalid path %q: missing module", requestPath)
 	}
-	if strings.HasPrefix(versionAndSuffix, "v/") {
-		versionAndSuffix = versionAndSuffix[2:]
-	}
+	versionAndSuffix = strings.TrimPrefix(versionAndSuffix, "v/")
 	// Now versionAndSuffix begins with a version.
 	version, suffix, _ := strings.Cut(versionAndSuffix, "/")
 	if version == "" {
diff --git a/internal/worker/analysis_test.go b/internal/worker/analysis_test.go
index 9a965da..4388abc 100644
--- a/internal/worker/analysis_test.go
+++ b/internal/worker/analysis_test.go
@@ -23,7 +23,6 @@
 
 func TestRunAnalysisBinary(t *testing.T) {
 	mustMakeBinaryDir(t)
-	const binary = "./analyzer"
 	binPath, cleanup := buildtest.GoBuild(t, "testdata/analyzer", "")
 	defer cleanup()
 
@@ -95,7 +94,6 @@
 
 func TestAnalysisScan(t *testing.T) {
 	const (
-		binary     = "./analyzer"
 		modulePath = "a.com/m"
 		version    = "v1.2.3"
 	)
diff --git a/internal/worker/govulncheck_scan.go b/internal/worker/govulncheck_scan.go
index ea18a6e..fe93283 100644
--- a/internal/worker/govulncheck_scan.go
+++ b/internal/worker/govulncheck_scan.go
@@ -8,7 +8,6 @@
 	"context"
 	"errors"
 	"fmt"
-	"io"
 	"net/http"
 	"os"
 	"os/exec"
@@ -450,15 +449,6 @@
 	return res.Vulns, nil
 }
 
-func copyFromGCSToWriter(ctx context.Context, w io.Writer, bucket *storage.BucketHandle, srcPath string) error {
-	gcsReader, err := bucket.Object(srcPath).NewReader(ctx)
-	if err != nil {
-		return err
-	}
-	_, err = io.Copy(w, gcsReader)
-	return err
-}
-
 func isNoRequiredModule(err error) bool {
 	return strings.Contains(err.Error(), "no required module")
 }
diff --git a/internal/worker/server.go b/internal/worker/server.go
index cfaea7e..3fe43cf 100644
--- a/internal/worker/server.go
+++ b/internal/worker/server.go
@@ -16,7 +16,6 @@
 	"time"
 
 	"cloud.google.com/go/errorreporting"
-	"github.com/google/safehtml/template"
 	"golang.org/x/pkgsite-metrics/internal/bigquery"
 	"golang.org/x/pkgsite-metrics/internal/config"
 	"golang.org/x/pkgsite-metrics/internal/derrors"
@@ -35,9 +34,8 @@
 	proxyClient  *proxy.Client
 	queue        queue.Queue
 
-	devMode   bool
-	mu        sync.Mutex
-	templates map[string]*template.Template
+	devMode bool
+	mu      sync.Mutex
 }
 
 var errBQDisabled = &serverError{http.StatusPreconditionRequired, errors.New("BigQuery disabled on this server")}