GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — chore: release versions by googleworkspace-bot · Pull Request #614 · googleworkspace/cli

Conversation

@googleworkspace-bot

@googleworkspace-bot googleworkspace-bot commented Mar 24, 2026

Copy link
Copy Markdown
Collaborator

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@googleworkspace/[email protected]

Minor Changes

  • 029e5de: Extract google-workspace library crate for programmatic Rust API access (closes feat: expose minimal library crate for programmatic API access #386)

    Introduces a Cargo workspace with a new google-workspace library crate (crates/google-workspace/)
    that exposes the core modules for use as a Rust dependency:

    • discovery — Discovery Document types and fetching
    • error — Structured GwsError type
    • services — Service registry and resolution
    • validate — Input validation and URL encoding
    • client — HTTP client with retry logic

    The gws binary crate re-exports all library types transparently — zero behavioral changes.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

gemini-code-assist[bot] reacted with eyes emoji
All reactions
  • 👀 1 reaction
@googleworkspace-bot
chore: release versions
ed535e7
@googleworkspace-bot googleworkspace-bot added area: docs cla: yes This human has signed the Contributor License Agreement. labels Mar 24, 2026
@gemini-code-assist

gemini-code-assist Bot commented Mar 24, 2026

Copy link
Copy Markdown
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 automates the release process for the @googleworkspace/cli package, updating its version to 0.21.0. This minor release primarily focuses on refactoring the core functionality into a new google-workspace library crate, making it available for use as a Rust dependency while maintaining transparent behavior for the gws binary crate.

Highlights

  • @googleworkspace/cli version update: The @googleworkspace/cli package has been updated to version 0.21.0 as part of a minor release.
  • google-workspace library crate extraction: A new google-workspace library crate has been introduced, exposing core modules for programmatic Rust API access, including discovery, error, services, validate, and client.
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.

Footnotes

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

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@jpoehnelt
jpoehnelt merged commit eacd436 into main Mar 24, 2026
23 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@jpoehnelt
jpoehnelt deleted the changeset-release/main branch March 24, 2026 20:44
gemini-code-assist[bot]
gemini-code-assist Bot reviewed Mar 24, 2026
View reviewed changes

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

Copy link
Copy Markdown
Contributor

There was a problem hiding this 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 extracts core modules into a new google-workspace library crate, enabling programmatic Rust API access, and updates the project version to 0.21.0. A critical issue was identified in the new client module's retry logic, where the final error might be incorrectly discarded, making debugging difficult. A refactoring suggestion has been provided to ensure the most relevant error is always returned.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread CHANGELOG.md
- `error` — Structured `GwsError` type
- `services` — Service registry and resolution
- `validate` — Input validation and URL encoding
- `client` — HTTP client with retry logic

@gemini-code-assist gemini-code-assist Bot Mar 24, 2026

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

critical

The retry logic in the new client module has a flaw that could mask the true cause of persistent failures. In crates/google-workspace/src/client.rs, the send_with_retry function incorrectly prioritizes a previous transient error over the error from the final retry attempt.

Specifically, on line 80, Err(last_err.unwrap_or(e)) will return last_err if it exists, discarding the more relevant final error e. This makes debugging difficult.

I recommend refactoring the function to remove the last_err variable and ensure the error from the very last attempt is always returned. Here is a suggested implementation:

pub async fn send_with_retry(
    build_request: impl Fn() -> reqwest::RequestBuilder,
) -> Result<reqwest::Response, reqwest::Error> {
    for attempt in 0..MAX_RETRIES {
        match build_request().send().await {
            Ok(resp) => {
                if resp.status() != reqwest::StatusCode::TOO_MANY_REQUESTS {
                    return Ok(resp);
                }

                let header_value = resp
                    .headers()
                    .get("retry-after")
                    .and_then(|v| v.to_str().ok());
                let retry_after = compute_retry_delay(header_value, attempt);
                tokio::time::sleep(std::time::Duration::from_secs(retry_after)).await;
            }
            Err(e) if e.is_connect() || e.is_timeout() => {
                let delay = compute_retry_delay(None, attempt);
                tokio::time::sleep(std::time::Duration::from_secs(delay)).await;
            }
            Err(e) => return Err(e), // Non-retryable error
        }
    }

    // Final attempt
    build_request().send().await
}

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

1 more reviewer
@gemini-code-assist gemini-code-assist[bot] gemini-code-assist[bot] left review comments
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

area: docs cla: yes This human has signed the Contributor License Agreement.

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

feat: expose minimal library crate for programmatic API access

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@googleworkspace-bot @jpoehnelt
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.