diff --git a/packages/cli/src/config/settings.test.ts b/packages/cli/src/config/settings.test.ts index 809b8f48ff..eb7e991e6b 100644 --- a/packages/cli/src/config/settings.test.ts +++ b/packages/cli/src/config/settings.test.ts @@ -3294,6 +3294,32 @@ MALICIOUS_VAR=allowed-because-trusted expect(process.env['GOOGLE_CLOUD_PROJECT']).toBe('my-vertex-project'); }); + it('should respect .env override for GOOGLE_CLOUD_PROJECT in Cloud Shell when auth type is vertex-ai', () => { + vi.stubEnv('CLOUD_SHELL', 'true'); + vi.stubEnv('GOOGLE_CLOUD_PROJECT', 'my-vertex-project'); + process.argv = ['node', 'gemini', '-s', 'prompt']; + vi.mocked(isWorkspaceTrusted).mockReturnValue({ + isTrusted: true, + source: 'file', + }); + + // Mock .env file to override the shell project + vi.mocked(fs.existsSync).mockReturnValue(true); + vi.mocked(fs.readFileSync).mockReturnValue( + 'GOOGLE_CLOUD_PROJECT=env-vertex-project', + ); + + loadEnvironment( + createMockSettings({ + tools: { sandbox: false }, + security: { auth: { selectedType: AuthType.USE_VERTEX_AI } }, + }).merged, + MOCK_WORKSPACE_DIR, + ); + + expect(process.env['GOOGLE_CLOUD_PROJECT']).toBe('env-vertex-project'); + }); + it('should clear cloudshell-gca when switching to Vertex AI without an original project', () => { process.env['CLOUD_SHELL'] = 'true'; process.argv = ['node', 'gemini', '-s', 'prompt']; diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts index 2d94e719b2..5a52e5af3c 100644 --- a/packages/cli/src/config/settings.ts +++ b/packages/cli/src/config/settings.ts @@ -553,15 +553,6 @@ export function setUpCloudShellEnvironment( // However, if the user has explicitly selected Vertex AI auth, they intend // to use their own GCP project, so we restore the original value and skip // the Cloud Shell override to respect their .env settings. - if (selectedAuthType === AuthType.USE_VERTEX_AI) { - const saved = process.env[USER_GCP_PROJECT]; - if (saved !== undefined) { - process.env['GOOGLE_CLOUD_PROJECT'] = saved; - } else if (process.env['GOOGLE_CLOUD_PROJECT'] === 'cloudshell-gca') { - delete process.env['GOOGLE_CLOUD_PROJECT']; - } - return; - } // Save the user's original value before overwriting, so it can be restored // if the user later switches to Vertex AI (even after a process restart). @@ -572,7 +563,11 @@ export function setUpCloudShellEnvironment( } } - let value = 'cloudshell-gca'; + let value: string | undefined = 'cloudshell-gca'; + + if (selectedAuthType === AuthType.USE_VERTEX_AI) { + value = process.env[USER_GCP_PROJECT]; + } if (envFilePath && fs.existsSync(envFilePath)) { const envFileContent = fs.readFileSync(envFilePath); @@ -585,7 +580,12 @@ export function setUpCloudShellEnvironment( } } } - process.env['GOOGLE_CLOUD_PROJECT'] = value; + + if (value !== undefined) { + process.env['GOOGLE_CLOUD_PROJECT'] = value; + } else if (process.env['GOOGLE_CLOUD_PROJECT'] === 'cloudshell-gca') { + delete process.env['GOOGLE_CLOUD_PROJECT']; + } } export function loadEnvironment(