Skip to content

Conversation

@cowsking
Copy link
Contributor

@cowsking cowsking commented Jan 16, 2026

  • Make DeleteRepositories a no-op for the SSM provider, as repository names are derived from the cluster and RSync names and can be reused.
  • Update CreateRepository to log an info message instead of returning an error if the gcloud describe command fails with an error other than NOT_FOUND.

@google-oss-prow
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please ask for approval from cowsking. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@gemini-code-assist
Copy link

Summary of Changes

Hello @cowsking, 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 addresses flaky end-to-end test failures caused by repository name collisions when tests run in parallel. By incorporating a unique identifier into the SSM repository naming logic, each test case can now create and interact with its own distinct repository, ensuring isolation and stability in shared testing environments.

Highlights

  • Unique ID for SSM Repositories: Introduced a uniqueID field to the SSMClient struct to ensure that each SSM repository created during end-to-end tests has a unique name.
  • Constructor Update: The newSSMClient function now accepts a uniqueID parameter, which is then stored within the client instance.
  • Dynamic Naming Logic: Modified the fullName method to append the uniqueID to the sanitized repository name, effectively preventing naming collisions when tests run concurrently.
  • Documentation Clarification: Updated the comment for the DeleteObsoleteRepos method to reflect that SSM repository names are now unique per test run, reinforcing the new naming strategy.

🧠 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.

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

@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 aims to prevent repository name collisions in parallel E2E tests by adding a uniqueID to SSM repository names. While the goal is valid, the implementation has a critical issue: the signature change in newSSMClient is not reflected in its calling code, which will lead to a compilation failure. Additionally, the method for appending the uniqueID can result in repository names that violate GCP's length constraints. I've provided comments with suggestions to fix these issues.


// newSSMClient instantiates a new SSM client.
func newSSMClient(repoPrefix string, shell *testshell.TestShell, projectNumber string) *SSMClient {
func newSSMClient(repoPrefix string, shell *testshell.TestShell, projectNumber string, uniqueID string) *SSMClient {

Choose a reason for hiding this comment

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

critical

The signature of newSSMClient has been changed to accept a uniqueID, but the call site in e2e/nomostest/gitproviders/git-provider.go has not been updated to pass this new argument. This will result in a compilation error. Please update the call to newSSMClient in NewGitProvider and thread the uniqueID through as needed.

Comment on lines 67 to 71
full := util.SanitizeGCPRepoName(c.repoPrefix, name)
if c.uniqueID != "" {
full = fmt.Sprintf("%s-%s", full, c.uniqueID)
}
return full

Choose a reason for hiding this comment

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

high

The current implementation appends uniqueID after the repository name has been sanitized by util.SanitizeGCPRepoName. This can lead to repository names that exceed GCP's maximum length limit (63 characters), as the sanitization function's length check is bypassed. To ensure the final name is always valid, the uniqueID should be incorporated into the name before sanitization.

Suggested change
full := util.SanitizeGCPRepoName(c.repoPrefix, name)
if c.uniqueID != "" {
full = fmt.Sprintf("%s-%s", full, c.uniqueID)
}
return full
if c.uniqueID != "" {
name = fmt.Sprintf("%s-%s", name, c.uniqueID)
}
return util.SanitizeGCPRepoName(c.repoPrefix, name)


// NewGitProvider creates a GitProvider for the specific provider type.
func NewGitProvider(t testing.NTB, provider, clusterName string, logger *testlogger.TestLogger, shell *testshell.TestShell) GitProvider {
func NewGitProvider(t testing.NTB, provider, clusterName string, logger *testlogger.TestLogger, shell *testshell.TestShell, uniqueID string) GitProvider {
Copy link
Contributor

Choose a reason for hiding this comment

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

Could you confirm how 'repo ID collision' was the root cause of the flakiness?

Since tests run sequentially on a given cluster, reusing the repository (as originally designed) should be safe.

// DeleteObsoleteRepos is a no-op because SSM repo names are determined by the
// test cluster name and RSync namespace and name, so it can be reused if it
// failed to be deleted after the test.
// DeleteObsoleteRepos is a no-op because SSM repo names are unique per test
Copy link
Contributor

Choose a reason for hiding this comment

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

If we generate unique repositories for every test run, leaving this as a no-op will cause repositories to accumulate indefinitely - we should implement the actual deletion logic here to prevent resource exhaustion. In the original design the repository gets reused between tests so the delete can be a no-op.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I see. just spoke with Camila, and I might try modifying the deletion process in SSM first to see if it works.

@cowsking cowsking changed the title feat(e2e): Add uniqueID to SSM repository naming feat(e2e): skip SSM repository deletion and improve creation logging Jan 21, 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.

2 participants