Describe the bug
A newly opened GitHub Codespace starts with GitHub Copilot CLI 1.0.3 installed at /usr/local/bin/copilot.
Running copilot update reports that version 1.0.80 was downloaded, but the installed binary is not replaced and copilot --version continues to report 1.0.3, even after opening a new terminal or restarting the Codespace.
Running sudo copilot update does successfully install the update. This indicates that the normal updater cannot replace the root-owned binary in /usr/local/bin, but still prints a success message.
Affected version
- Preinstalled version in the Codespace: 1.0.3
- Version reported as downloaded by the updater: 1.0.80
Steps to reproduce the behavior
- Open a GitHub Codespace.
- Run
copilot --version and confirm that it reports GitHub Copilot CLI 1.0.3.
- Run
copilot update.
- Observe the message:
Copilot CLI version 1.0.80 downloaded.
- Run
copilot --version again.
- Open a new terminal or restart the Codespace and run
copilot --version again.
- Run
sudo copilot update and observe that the update succeeds.
Actual output
$ copilot --version
GitHub Copilot CLI 1.0.3.
Run 'copilot update' to check for updates.
$ copilot update
Checking for updates...
Copilot CLI version 1.0.80 downloaded.
$ copilot --version
GitHub Copilot CLI 1.0.3.
Run 'copilot update' to check for updates.
The version remains 1.0.3 after opening a new terminal and after restarting the Codespace. The update succeeds only when run as sudo copilot update.
Investigation
which -a copilot returns a single path: /usr/local/bin/copilot.
ls -la /usr/local/bin/copilot shows that the file is still dated March 9 after the non-sudo update, so the installed binary was not overwritten.
- The normal updater appears unable to write to the root-owned
/usr/local/bin/copilot binary.
- Despite not replacing the binary, it prints a successful download message instead of reporting the installation failure.
- Running
sudo copilot update successfully performs the update.
Expected behavior
- New GitHub Codespaces should start with the current supported stable Copilot CLI version (1.0.80 at the time of this report, or the latest stable version), rather than the outdated 1.0.3 binary.
copilot update should actually replace the installed binary.
- If the updater cannot write to
/usr/local/bin/copilot, it should exit with a non-zero status and clearly explain that elevated permissions are required, for example by suggesting sudo copilot update.
- It should not display a success message unless the installed binary has been replaced and the new version can be verified.
Workaround
Environment
- GitHub Codespaces (devcontainer)
- Linux Codespace
- Initial Copilot CLI version: 1.0.3
- Update version reported by the CLI: 1.0.80
- Installed binary:
/usr/local/bin/copilot
- Exact
uname -a output was not captured
Related issue
Describe the bug
A newly opened GitHub Codespace starts with GitHub Copilot CLI 1.0.3 installed at
/usr/local/bin/copilot.Running
copilot updatereports that version 1.0.80 was downloaded, but the installed binary is not replaced andcopilot --versioncontinues to report 1.0.3, even after opening a new terminal or restarting the Codespace.Running
sudo copilot updatedoes successfully install the update. This indicates that the normal updater cannot replace the root-owned binary in/usr/local/bin, but still prints a success message.Affected version
Steps to reproduce the behavior
copilot --versionand confirm that it reports GitHub Copilot CLI 1.0.3.copilot update.Copilot CLI version 1.0.80 downloaded.copilot --versionagain.copilot --versionagain.sudo copilot updateand observe that the update succeeds.Actual output
The version remains 1.0.3 after opening a new terminal and after restarting the Codespace. The update succeeds only when run as
sudo copilot update.Investigation
which -a copilotreturns a single path:/usr/local/bin/copilot.ls -la /usr/local/bin/copilotshows that the file is still dated March 9 after the non-sudo update, so the installed binary was not overwritten./usr/local/bin/copilotbinary.sudo copilot updatesuccessfully performs the update.Expected behavior
copilot updateshould actually replace the installed binary./usr/local/bin/copilot, it should exit with a non-zero status and clearly explain that elevated permissions are required, for example by suggestingsudo copilot update.Workaround
Environment
/usr/local/bin/copilotuname -aoutput was not capturedRelated issue