summaryrefslogtreecommitdiff
path: root/packages/cli/src/config/settings.ts
diff options
context:
space:
mode:
authorMarat Boshernitsan <[email protected]>2025-07-07 15:02:13 -0700
committerGitHub <[email protected]>2025-07-07 22:02:13 +0000
commit48c2aa296a7ed8b17e861d54682b0ea71695ca66 (patch)
treeaf686139688bfca8e2fd9c7fedb944d012d52ff6 /packages/cli/src/config/settings.ts
parent357546a2aac918702f6ebfa4a97bd95ccd614e5d (diff)
Enable Gemini CLI to reuse user's auth in Cloud Shell (#3070)
Diffstat (limited to 'packages/cli/src/config/settings.ts')
-rw-r--r--packages/cli/src/config/settings.ts27
1 files changed, 27 insertions, 0 deletions
diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts
index 93f042aa..c2d03167 100644
--- a/packages/cli/src/config/settings.ts
+++ b/packages/cli/src/config/settings.ts
@@ -203,8 +203,35 @@ function findEnvFile(startDir: string): string | null {
}
}
+export function setUpCloudShellEnvironment(envFilePath: string | null): void {
+ // Special handling for GOOGLE_CLOUD_PROJECT in Cloud Shell:
+ // Because GOOGLE_CLOUD_PROJECT in Cloud Shell tracks the project
+ // set by the user using "gcloud config set project" we do not want to
+ // use its value. So, unless the user overrides GOOGLE_CLOUD_PROJECT in
+ // one of the .env files, we set the Cloud Shell-specific default here.
+ if (envFilePath && fs.existsSync(envFilePath)) {
+ const envFileContent = fs.readFileSync(envFilePath);
+ const parsedEnv = dotenv.parse(envFileContent);
+ if (parsedEnv.GOOGLE_CLOUD_PROJECT) {
+ // .env file takes precedence in Cloud Shell
+ process.env.GOOGLE_CLOUD_PROJECT = parsedEnv.GOOGLE_CLOUD_PROJECT;
+ } else {
+ // If not in .env, set to default and override global
+ process.env.GOOGLE_CLOUD_PROJECT = 'cloudshell-gca';
+ }
+ } else {
+ // If no .env file, set to default and override global
+ process.env.GOOGLE_CLOUD_PROJECT = 'cloudshell-gca';
+ }
+}
+
export function loadEnvironment(): void {
const envFilePath = findEnvFile(process.cwd());
+
+ if (process.env.CLOUD_SHELL === 'true') {
+ setUpCloudShellEnvironment(envFilePath);
+ }
+
if (envFilePath) {
dotenv.config({ path: envFilePath, quiet: true });
}