agent-starter-pack icon indicating copy to clipboard operation
agent-starter-pack copied to clipboard

fix: Windows compatibility for gcloud commands and file encoding (#67)

Open fabrizioamort opened this issue 1 month ago • 2 comments

Summary

Fixes #67 - Windows compatibility issues with gcloud command execution and file encoding

Problem

Windows users were experiencing:

  1. "Unknown account" error when creating agents
  2. [WinError 2] when running gcloud commands
  3. File encoding issues with JSON files containing special characters

Root Cause

  1. File Encoding: No explicit UTF-8 encoding on file operations (Windows defaults to cp1252)
  2. gcloud.cmd Path Resolution: shutil.which() fails when PATH contains directories with spaces (e.g., C:\...\Google Cloud SDK\...)
  3. Shell Context: gcloud.cmd requires shell=True on Windows to execute properly

Solution

  1. Added encoding="utf-8" to all open() calls for JSON files (3 locations)
  2. 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
  3. Added shell=(os.name == "nt") to all gcloud subprocess.run() calls (7 locations)
  4. Increased timeout from 3s to 10s for gcloud commands
  5. Updated affected tests to mock shutil.which and expect shell parameter

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

fabrizioamort avatar Dec 14 '25 09:12 fabrizioamort

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=True for subprocess.run calls on Windows and introduced a robust _get_gcloud_cmd() helper to correctly locate the gcloud executable, even when PATH contains 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 gcloud commands from 3 to 10 seconds to accommodate slower execution environments.
  • Enhanced Test Coverage: Updated relevant tests to mock shutil.which and correctly assert the shell parameter in subprocess.run calls, 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.

gemini-code-assist[bot] avatar Dec 14 '25 09:12 gemini-code-assist[bot]

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!

eliasecchig avatar Dec 14 '25 23:12 eliasecchig

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!

fabrizioamort avatar Dec 15 '25 08:12 fabrizioamort

Perfect! Merged, closing this. I aim to make a release later in the day

eliasecchig avatar Dec 15 '25 10:12 eliasecchig