Skip to content

chore: Migrate gsutil usage to gcloud storage#10002

Open
bhandarivijay-png wants to merge 1 commit intoGoogleContainerTools:mainfrom
bhandarivijay-png:ai-gsutil-migration-916f6e8b285f44f3844d957ef093407d
Open

chore: Migrate gsutil usage to gcloud storage#10002
bhandarivijay-png wants to merge 1 commit intoGoogleContainerTools:mainfrom
bhandarivijay-png:ai-gsutil-migration-916f6e8b285f44f3844d957ef093407d

Conversation

@bhandarivijay-png
Copy link

Automated: Migrate {target_path} from gsutil to gcloud storage

This CL is part of the on going effort to migrate from the legacy gsutil tool to the new and improved gcloud storage command-line interface.
gcloud storage is the recommended and modern tool for interacting with Google Cloud Storage, offering better performance, unified authentication, and a more consistent command structure with other gcloud components. 🚀

Automation Details

This change was generated automatically by an agent that targets users of gsutil.
The transformations applied are based on the gsutil to gcloud storage migration guide.

⚠️ Action Required: Please Review and Test Carefully

While we have based the automation on the migration guide, every use case is unique.
It is crucial that you thoroughly test these changes in environments appropriate to your use-case before merging.
Be aware of potential differences between gsutil and gcloud storage that could impact your workflows.
For instance, the structure of command output may have changed, requiring updates to any scripts that parse it. Similarly, command behavior can differ subtly; the gcloud storage rsync command has a different file deletion logic than gsutil rsync, which could lead to unintended file deletions.

Our migration guides can help guide you through a list of mappings and some notable differences between the two tools.

Standard presubmit tests are run as part of this CL's workflow. If you need to target an additional test workflow or require assistance with testing, please let us know.

Please verify that all your Cloud Storage operations continue to work as expected to avoid any potential disruptions in production.

Support and Collaboration

The GCS CLI team is here to help! If you encounter any issues, have a complex use case that this automated change doesn't cover, or face any other blockers, please don't hesitate to reach out.
We are happy to work with you to test and adjust these changes as needed.

Contact: gcs-cli-hyd@google.com

We appreciate your partnership in this important migration effort!

#gsutil-migration

@bhandarivijay-png bhandarivijay-png requested a review from a team as a code owner March 4, 2026 09:54
@bhandarivijay-png
Copy link
Author

Hi @ruhi-chaddha, Can we get your review on this PR? Thanks!

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, 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 completes a significant migration by replacing all occurrences of the gsutil command-line tool with gcloud storage. This transition aligns with Google Cloud's recommendation for using the modern gcloud storage CLI, which offers enhanced performance, streamlined authentication, and a more consistent command structure within the gcloud ecosystem. The changes ensure that all interactions with Google Cloud Storage leverage the updated tool, improving maintainability and adherence to current best practices.

Highlights

  • Migration to gcloud storage: All instances of gsutil commands have been systematically replaced with their gcloud storage equivalents across various shell scripts and Go code.
  • Automated Change: This pull request was generated automatically by an agent as part of an ongoing effort to migrate from the legacy gsutil tool to the modern gcloud storage command-line interface.
  • Codebase Updates: The changes include updating shell scripts (deploy/setup-secret.sh, hack/update-lts-dependencies.sh), Go source code (pkg/skaffold/gcs/gsutil.go), test files (pkg/skaffold/gcs/gsutil_test.go), and documentation (vendor/cloud.google.com/go/CONTRIBUTING.md, vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-api.json) to reflect the new gcloud storage syntax.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • deploy/setup-secret.sh
    • Replaced gsutil cp with gcloud storage cp for downloading and uploading service account keys.
  • hack/update-lts-dependencies.sh
    • Updated gsutil -q cp commands to gcloud storage cp for uploading Helm, Kustomize, and KPT binaries to GCS.
  • pkg/skaffold/gcs/gsutil.go
    • Modified the GsutilExec constant from "gsutil" to "gcloud".
    • Updated the Copy method to use gcloud storage cp with --recursive instead of gsutil cp -r.
  • pkg/skaffold/gcs/gsutil_test.go
    • Adjusted test commands to reflect the new gcloud storage cp syntax and --recursive flag.
  • vendor/cloud.google.com/go/CONTRIBUTING.md
    • Migrated gsutil mb to gcloud storage buckets create for bucket creation.
    • Updated gsutil acl ch to gcloud storage buckets update --add-acl-grant for managing bucket ACLs.
    • Replaced gsutil kms authorize with gcloud storage service-agent --authorize-cmek for KMS authorization.
  • vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-api.json
    • Updated an enum description to reference the "gcloud storage" tool instead of "gsutil".
Activity
  • This change was generated automatically by an agent targeting users of gsutil for migration.
  • Standard presubmit tests are run as part of this CL's workflow.
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 automates the migration from gsutil to gcloud storage. The changes are mostly correct, but I've found a few issues. In hack/update-lts-dependencies.sh, the --quiet flag is missing from the new gcloud storage cp commands, which was present in the original gsutil commands. More critically, an automated change in vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-api.json has resulted in invalid JSON, which will cause parsing errors. I've provided suggestions to fix these issues.

"Unspecified defaults to GSUTIL.",
"Use the \"gsutil\" tool to download the source file.",
"Use the Cloud Storage Fetcher tool to download the source file."
"Use the \"gcloud storage\" tool to download the source file.", "Use the Cloud Storage Fetcher tool to download the source file."
Copy link
Contributor

Choose a reason for hiding this comment

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

critical

This automated change has resulted in invalid JSON. The enumDescriptions array is malformed because two string elements have been merged into a single line without proper separation. This will cause parsing errors. The array should contain three distinct string elements to match the enum field.

            "Use the \"gcloud storage\" tool to download the source file.",
            "Use the Cloud Storage Fetcher tool to download the source file."


# upload the binary to skaffold gcs bucket
gsutil -q cp helm.tar.gz gs://skaffold/deps/helm/helm-${HELM_VERSION}-linux-amd64.tar.gz
gcloud storage cp helm.tar.gz gs://skaffold/deps/helm/helm-${HELM_VERSION}-linux-amd64.tar.gz
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The original gsutil command used the -q flag for quiet output. The migrated gcloud storage cp command should include the --quiet flag to maintain the same behavior and prevent progress indicators from being printed to stdout.

Suggested change
gcloud storage cp helm.tar.gz gs://skaffold/deps/helm/helm-${HELM_VERSION}-linux-amd64.tar.gz
gcloud storage cp --quiet helm.tar.gz gs://skaffold/deps/helm/helm-${HELM_VERSION}-linux-amd64.tar.gz

Copy link
Contributor

Choose a reason for hiding this comment

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

Any specific reason why the quiet flag is no longer being included?

Copy link
Author

Choose a reason for hiding this comment

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

The omission of the --quiet flag was an oversight during the initial script conversion. Since the original gsutil command used -q to suppress progress indicators,which is critical for keeping CI/CD logs clean and preventing stdout clutter. we should definitely include it in the cloud storage version to maintain the same behavior. I'll update the migration logic to ensure this flag is preserved.


# upload the binary to skaffold gcs bucket
gsutil -q cp kustomize.tar.gz gs://skaffold/deps/kustomize/v${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz
gcloud storage cp kustomize.tar.gz gs://skaffold/deps/kustomize/v${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The original gsutil command used the -q flag for quiet output. The migrated gcloud storage cp command should include the --quiet flag to maintain the same behavior and prevent progress indicators from being printed to stdout.

Suggested change
gcloud storage cp kustomize.tar.gz gs://skaffold/deps/kustomize/v${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz
gcloud storage cp --quiet kustomize.tar.gz gs://skaffold/deps/kustomize/v${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz


# upload the binary to skaffold gcs bucket
gsutil -q cp kpt gs://skaffold/deps/kpt/v${KPT_VERSION}/kpt_linux_amd64
gcloud storage cp kpt gs://skaffold/deps/kpt/v${KPT_VERSION}/kpt_linux_amd64
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The original gsutil command used the -q flag for quiet output. The migrated gcloud storage cp command should include the --quiet flag to maintain the same behavior and prevent progress indicators from being printed to stdout.

Suggested change
gcloud storage cp kpt gs://skaffold/deps/kpt/v${KPT_VERSION}/kpt_linux_amd64
gcloud storage cp --quiet kpt gs://skaffold/deps/kpt/v${KPT_VERSION}/kpt_linux_amd64

@menahyouyeah menahyouyeah added the kokoro:force-run forces a kokoro re-run on a PR label Mar 5, 2026
@kokoro-team kokoro-team removed the kokoro:force-run forces a kokoro re-run on a PR label Mar 5, 2026
@menahyouyeah menahyouyeah added kokoro:force-run forces a kokoro re-run on a PR and removed kokoro:force-run forces a kokoro re-run on a PR labels Mar 5, 2026
@kokoro-team kokoro-team removed the kokoro:force-run forces a kokoro re-run on a PR label Mar 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants