fix(cli): use resolved sandbox state for auto-update check (#26285)

This commit is contained in:
Adib234
2026-04-30 18:06:01 -04:00
committed by GitHub
parent 892c8a720d
commit f497240f7e
3 changed files with 31 additions and 16 deletions
+6 -1
View File
@@ -179,7 +179,12 @@ export async function startInteractiveUI(
checkForUpdates(settings)
.then((info) => {
handleAutoUpdate(info, settings, config.getProjectRoot());
handleAutoUpdate(
info,
settings,
config.getProjectRoot(),
config.getSandboxEnabled(),
);
})
.catch((err) => {
// Silently ignore update check errors.
+23 -14
View File
@@ -96,7 +96,7 @@ describe('handleAutoUpdate', () => {
});
it('should do nothing if update info is null', () => {
handleAutoUpdate(null, mockSettings, '/root', mockSpawn);
handleAutoUpdate(null, mockSettings, '/root', false, mockSpawn);
expect(mockGetInstallationInfo).not.toHaveBeenCalled();
expect(updateEventEmitter.emit).not.toHaveBeenCalled();
expect(mockSpawn).not.toHaveBeenCalled();
@@ -112,7 +112,7 @@ describe('handleAutoUpdate', () => {
expect(isUpdateInProgress()).toBe(false);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(isUpdateInProgress()).toBe(true);
@@ -129,7 +129,7 @@ describe('handleAutoUpdate', () => {
packageManager: PackageManager.NPM,
});
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(isUpdateInProgress()).toBe(true);
@@ -178,7 +178,7 @@ describe('handleAutoUpdate', () => {
it('should do nothing if update prompts are disabled', () => {
mockSettings.merged.general.enableAutoUpdateNotification = false;
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(mockGetInstallationInfo).not.toHaveBeenCalled();
expect(updateEventEmitter.emit).not.toHaveBeenCalled();
expect(mockSpawn).not.toHaveBeenCalled();
@@ -193,7 +193,7 @@ describe('handleAutoUpdate', () => {
packageManager: PackageManager.NPM,
});
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(updateEventEmitter.emit).toHaveBeenCalledTimes(1);
expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-received', {
@@ -219,7 +219,7 @@ describe('handleAutoUpdate', () => {
packageManager,
});
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(updateEventEmitter.emit).not.toHaveBeenCalled();
expect(mockSpawn).not.toHaveBeenCalled();
@@ -234,7 +234,7 @@ describe('handleAutoUpdate', () => {
packageManager: PackageManager.NPM,
});
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(updateEventEmitter.emit).toHaveBeenCalledTimes(1);
expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-received', {
@@ -253,7 +253,7 @@ describe('handleAutoUpdate', () => {
packageManager: PackageManager.NPM,
});
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(updateEventEmitter.emit).toHaveBeenCalledTimes(1);
expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-received', {
@@ -276,7 +276,7 @@ describe('handleAutoUpdate', () => {
mockChildProcess.emit('close', 0);
}, 0);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(mockSpawn).toHaveBeenCalledOnce();
});
@@ -296,7 +296,7 @@ describe('handleAutoUpdate', () => {
resolve();
}, 0);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
});
expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-failed', {
@@ -320,7 +320,7 @@ describe('handleAutoUpdate', () => {
resolve();
}, 0);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
});
expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-failed', {
@@ -345,7 +345,7 @@ describe('handleAutoUpdate', () => {
packageManager: PackageManager.NPM,
});
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(mockSpawn).toHaveBeenCalledWith(
'npm i -g @google/gemini-cli@nightly',
@@ -372,7 +372,7 @@ describe('handleAutoUpdate', () => {
packageManager: PackageManager.NPM,
});
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
expect(mockSpawn).not.toHaveBeenCalled();
});
@@ -392,7 +392,7 @@ describe('handleAutoUpdate', () => {
resolve();
}, 0);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn);
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', false, mockSpawn);
});
expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-success', {
@@ -400,6 +400,15 @@ describe('handleAutoUpdate', () => {
'Update successful! The new version will be used on your next run.',
});
});
it('should suppress update if isSandboxEnabled is true', () => {
handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', true, mockSpawn);
expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-info', {
message: `${mockUpdateInfo.message}\nAutomatic update is not available in sandbox mode.`,
});
expect(mockSpawn).not.toHaveBeenCalled();
});
});
describe('setUpdateHandler', () => {
+2 -1
View File
@@ -68,13 +68,14 @@ export function handleAutoUpdate(
info: UpdateObject | null,
settings: LoadedSettings,
projectRoot: string,
isSandboxEnabled: boolean,
spawnFn: typeof spawn = spawnWrapper,
) {
if (!info) {
return;
}
if (settings.merged.tools.sandbox || process.env['GEMINI_SANDBOX']) {
if (isSandboxEnabled) {
updateEventEmitter.emit('update-info', {
message: `${info.message}\nAutomatic update is not available in sandbox mode.`,
});