fix: Windows compatibility for gcloud commands and file encoding (#67)
Summary
Fixes #67 - Windows compatibility issues with gcloud command execution and file encoding
Problem
Windows users were experiencing:
- "Unknown account" error when creating agents
-
[WinError 2]when running gcloud commands - File encoding issues with JSON files containing special characters
Root Cause
- File Encoding: No explicit UTF-8 encoding on file operations (Windows defaults to cp1252)
-
gcloud.cmd Path Resolution:
shutil.which()fails when PATH contains directories with spaces (e.g.,C:\...\Google Cloud SDK\...) -
Shell Context:
gcloud.cmdrequiresshell=Trueon Windows to execute properly
Solution
- Added
encoding="utf-8"to allopen()calls for JSON files (3 locations) - Created
_get_gcloud_cmd()helper that:- Tries
shutil.which()first (works on Linux/macOS) - Falls back to checking 3 common Windows installation paths
- Handles paths with spaces correctly
- Tries
- Added
shell=(os.name == "nt")to all gcloud subprocess.run() calls (7 locations) - Increased timeout from 3s to 10s for gcloud commands
- Updated affected tests to mock
shutil.whichand expectshellparameter
Testing
✅ Tested on Windows 11 with Google Cloud SDK installed
✅ Account now correctly detected (was "Unknown account")
✅ All gcloud commands work without errors
✅ Cross-platform safe (no changes to Linux/macOS behavior)
✅ All tests pass (make test: 196 passed, 3 skipped)
✅ Linting passes (make lint)
Files Changed
Production Code:
-
agent_starter_pack/cli/utils/gcp.py- Added path resolution logic and shell=True -
agent_starter_pack/cli/commands/create.py- Added shell=True to gcloud calls -
agent_starter_pack/cli/commands/register_gemini_enterprise.py- Added shell=True -
agent_starter_pack/deployment_targets/agent_engine/tests/load_test/load_test.py- UTF-8 encoding -
agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/app_utils/deploy.py- UTF-8 encoding
Tests:
-
tests/cli/commands/test_create.py- Updated test to expect shell parameter -
tests/cli/utils/test_register_gemini_enterprise.py- Updated test to expect shell parameter
Summary of Changes
Hello @fabrizioamort, I'm Gemini Code Assist[^1]! 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 significantly improves the application's compatibility and reliability for Windows users by addressing common issues related to gcloud command execution and file encoding. It ensures that gcloud commands run correctly, even with complex PATH configurations, and resolves problems with JSON files containing special characters, making the application more robust across different operating systems.
Highlights
-
Windows Compatibility for gcloud Commands: Implemented
shell=Trueforsubprocess.runcalls on Windows and introduced a robust_get_gcloud_cmd()helper to correctly locate thegcloudexecutable, even whenPATHcontains spaces. -
File Encoding Fixes: Ensured explicit
encoding="utf-8"is used for JSON file operations to prevent issues with special characters on Windows. -
Increased gcloud Command Timeout: Extended the timeout for
gcloudcommands from 3 to 10 seconds to accommodate slower execution environments. -
Enhanced Test Coverage: Updated relevant tests to mock
shutil.whichand correctly assert theshellparameter insubprocess.runcalls, reflecting the new Windows compatibility logic.
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 :thumbsup: and :thumbsdown: 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.
[^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.
thanks so much for raising it @fabrizioamort ! I extended your work in #648 to cover some of the missing commands being used! Thanks a lot again! Let me know what you think!
thanks so much for raising it @fabrizioamort ! I extended your work in #648 to cover some of the missing commands being used! Thanks a lot again! Let me know what you think!
Thank you @eliasecchig! I'm glad the PR was helpful, let me know if there's anything else I can test or contribute!
Perfect! Merged, closing this. I aim to make a release later in the day