From 48c2aa296a7ed8b17e861d54682b0ea71695ca66 Mon Sep 17 00:00:00 2001 From: Marat Boshernitsan Date: Mon, 7 Jul 2025 15:02:13 -0700 Subject: Enable Gemini CLI to reuse user's auth in Cloud Shell (#3070) --- packages/cli/src/config/settings.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'packages/cli/src/config/settings.ts') 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 }); } -- cgit v1.2.3