Skip to content

Conversation

@stephen-taipei
Copy link

Summary

  • Add uninstall-before-install flow for global npm auto-updates to avoid ENOTEMPTY failures
  • Apply the uninstall + install sequence to nightly/latest resolution in handleAutoUpdate
  • Update handleAutoUpdate tests to expect the new command flow

Details

  • When package manager is npm and install scope is global, prepend npm uninstall -g @google/gemini-cli before the resolved update command
  • Ran npm run build to ensure packages compile

Related Issues

Fixes #4664

How to Validate

  • npm --workspace=@google/gemini-cli test -- src/utils/handleAutoUpdate.test.ts

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Podman
      • Seatbelt
    • Windows
      • npm run
      • npx
      • Docker
    • Linux
      • npm run
      • npx
      • Docker

@stephen-taipei stephen-taipei requested a review from a team as a code owner December 6, 2025 02:06
@google-cla
Copy link

google-cla bot commented Dec 6, 2025

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @stephen-taipei, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the CLI's auto-update mechanism by addressing a common issue with global npm installations. Previously, direct updates could fail due to directory conflicts. The change introduces a robust pre-uninstall step for global npm packages, ensuring a clean and successful update process, thereby improving the overall reliability and user experience of the auto-updater.

Highlights

  • Global NPM Auto-Update Fix: Implemented an 'uninstall-before-install' flow for global npm auto-updates to prevent ENOTEMPTY errors that can occur during direct updates.
  • Update Command Logic: The new uninstall-then-install sequence is applied specifically when the package manager is npm and the installation scope is global, covering both 'nightly' and 'latest' resolutions.
  • Test Coverage: Updated existing tests for handleAutoUpdate to reflect the new command flow, ensuring the pre-uninstall step is correctly invoked and error messages are accurate.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request addresses an issue with global npm auto-updates by introducing an uninstall-before-install flow to prevent ENOTEMPTY errors. The changes correctly modify the update command for global npm installations, and the tests have been updated to reflect this new command flow. I have one suggestion to improve the maintainability of the implementation by avoiding a hardcoded package name.

Comment on lines 71 to 75
const updateCommand =
installationInfo.packageManager === PackageManager.NPM &&
installationInfo.isGlobal
? `npm uninstall -g @google/gemini-cli && ${resolvedUpdateCommand}`
: resolvedUpdateCommand;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The package name @google/gemini-cli is hardcoded in the generated uninstall command. To improve maintainability and prevent potential issues if the package name changes in the future, it's better to use the dynamic package name available from the info.update.name property.

Suggested change
const updateCommand =
installationInfo.packageManager === PackageManager.NPM &&
installationInfo.isGlobal
? `npm uninstall -g @google/gemini-cli && ${resolvedUpdateCommand}`
: resolvedUpdateCommand;
const updateCommand =
installationInfo.packageManager === PackageManager.NPM &&
installationInfo.isGlobal
? `npm uninstall -g ${info.update.name} && ${resolvedUpdateCommand}`
: resolvedUpdateCommand;

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the suggestion. The update has been applied.
Please let me know if more adjustments are required.

@stephen-taipei stephen-taipei force-pushed the fix/npm-auto-update-enotempty branch from 3245f92 to 75cce0d Compare December 6, 2025 02:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add an "auto-update" feature

1 participant