internal/gaby: add -netrc flag

This allows running gaby against Cloud-hosted databases
and using the Gemini API without needing access to the
Cloud Secret Manager.

Change-Id: I0b6e2d3d146fecf5f855530a7c914060a4aa8697
Reviewed-on: https://go-review.googlesource.com/c/oscar/+/708879
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/internal/gaby/main.go b/internal/gaby/main.go
index a7cccb1..7bca036 100644
--- a/internal/gaby/main.go
+++ b/internal/gaby/main.go
@@ -62,6 +62,7 @@
 	enablesync    bool
 	enablechanges bool
 	testactions   bool
+	netrc         bool
 	level         string
 	overlay       string
 	autoApprove   string // list of packages that do not require manual approval
@@ -81,6 +82,7 @@
 	flag.StringVar(&flags.overlay, "overlay", "", "spec for overlay to DB; see internal/dbspec for syntax")
 	flag.StringVar(&flags.autoApprove, "autoapprove", "", "comma-separated list of packages whose actions do not require approval")
 	flag.BoolVar(&flags.enforcePolicy, "enforcepolicy", false, "whether to enforce safety policies on LLM inputs and outputs")
+	flag.BoolVar(&flags.netrc, "netrc", false, "use netrc for secrets")
 }
 
 // Gaby holds the state for gaby's execution.
@@ -356,11 +358,15 @@
 		log.Fatal("missing -firestoredb flag")
 	}
 
-	sdb, err := gcpsecret.NewSecretDB(g.ctx, flags.project)
-	if err != nil {
-		log.Fatal(err)
+	if flags.netrc {
+		g.secret = secret.Netrc()
+	} else {
+		sdb, err := gcpsecret.NewSecretDB(g.ctx, flags.project)
+		if err != nil {
+			log.Fatal(err)
+		}
+		g.secret = sdb
 	}
-	g.secret = sdb
 
 	if flags.enforcePolicy {
 		llmchecker, err := checks.New(g.ctx, g.slog, flags.project, llm.AllPolicyTypes())