Skip to content

Support {name} and {version} placeholders in use_repo#27890

Closed
fmeum wants to merge 1 commit intobazelbuild:masterfrom
fmeum:use-repo-placeholder
Closed

Support {name} and {version} placeholders in use_repo#27890
fmeum wants to merge 1 commit intobazelbuild:masterfrom
fmeum:use-repo-placeholder

Conversation

@fmeum
Copy link
Collaborator

@fmeum fmeum commented Dec 6, 2025

This allows module extensions to reliably namespace repos created by individual modules, even in the presence of multiple_version_override, without causing additional churn for users during version bumps. In particular, projects with a publishing workflow that patches in the version attribute of the module function don't need to modify that workflow to e.g. patch a global constant or also search for the old version in use_repo call arguments.

Context: https://bazelbuild.slack.com/archives/C09E58X3AQ7/p1764934858912079

RELNOTES: The values of keyword arguments passed to use_repo can now contain the special substrings {name} and {version}, which are treated as equivalent to the corresponding attributes of the current module.

@gemini-code-assist
Copy link

Summary of Changes

Hello @fmeum, 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 enhances Bazel's Bzlmod system by enabling the use of dynamic placeholders, specifically {name} and {version}, within use_repo calls. This allows module extensions to construct repository names that are context-aware of the module consuming them, leading to more flexible and maintainable module definitions. The implementation involves modifying the useRepo logic to perform string substitutions and updating the module's internal representation to expose version information, all backed by new, comprehensive tests.

Highlights

  • Placeholder Support in use_repo: The use_repo function now supports {name} and {version} placeholders in its arguments, allowing for dynamic generation of repository names based on the module's identity.
  • Module Version Retrieval: A new getVersion() abstract method has been added to the InterimModule.Builder interface to facilitate retrieving the module's version for placeholder substitution.
  • Enhanced Testing: A new parameterized test has been introduced to thoroughly validate the correct replacement of {name} and {version} placeholders in use_repo calls, covering various version formats.
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 introduces support for {name} and {version} placeholders in the use_repo function for module extensions. The implementation correctly replaces these placeholders with the module's name and normalized version. The changes are well-tested with various version string formats. I've provided one suggestion to improve code clarity and avoid repeated method calls within a loop. Overall, this is a good addition.

@fmeum fmeum force-pushed the use-repo-placeholder branch from 9b86d9a to 89b93a7 Compare December 6, 2025 14:59
@fmeum fmeum marked this pull request as ready for review December 7, 2025 10:17
@github-actions github-actions bot added team-ExternalDeps External dependency handling, remote repositiories, WORKSPACE file. awaiting-review PR is awaiting review from an assigned reviewer labels Dec 7, 2025
@fmeum fmeum changed the title Allow {name} and {version} placeholders in use_repo Support {name} and {version} placeholders in use_repo Dec 7, 2025
Copy link
Member

@Wyverald Wyverald left a comment

Choose a reason for hiding this comment

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

simple and effective!

@meteorcloudy meteorcloudy added awaiting-PR-merge PR has been approved by a reviewer and is ready to be merge internally and removed awaiting-review PR is awaiting review from an assigned reviewer labels Dec 15, 2025
@github-actions github-actions bot removed the awaiting-PR-merge PR has been approved by a reviewer and is ready to be merge internally label Dec 16, 2025
@fmeum fmeum deleted the use-repo-placeholder branch December 16, 2025 11:09
@fmeum
Copy link
Collaborator Author

fmeum commented Dec 16, 2025

@bazel-io fork 9.0.0

bazel-io pushed a commit to bazel-io/bazel that referenced this pull request Dec 16, 2025
This allows module extensions to reliably namespace repos created by individual modules, even in the presence of `multiple_version_override`, without causing additional churn for users during version bumps. In particular, projects with a publishing workflow that patches in the `version` attribute of the `module` function don't need to modify that workflow to e.g. patch a global constant or also search for the old version in `use_repo` call arguments.

Context: https://bazelbuild.slack.com/archives/C09E58X3AQ7/p1764934858912079

RELNOTES: The values of keyword arguments passed to `use_repo` can now contain the special substrings `{name}` and `{version}`, which are treated as equivalent to the corresponding attributes of the current module.

Closes bazelbuild#27890.

PiperOrigin-RevId: 845156030
Change-Id: Ic5d777645bf6a5ca67fa6cb577f426c96beda894
github-merge-queue bot pushed a commit that referenced this pull request Dec 17, 2025
…28016)

This allows module extensions to reliably namespace repos created by
individual modules, even in the presence of `multiple_version_override`,
without causing additional churn for users during version bumps. In
particular, projects with a publishing workflow that patches in the
`version` attribute of the `module` function don't need to modify that
workflow to e.g. patch a global constant or also search for the old
version in `use_repo` call arguments.

Context:
https://bazelbuild.slack.com/archives/C09E58X3AQ7/p1764934858912079

RELNOTES: The values of keyword arguments passed to `use_repo` can now
contain the special substrings `{name}` and `{version}`, which are
treated as equivalent to the corresponding attributes of the current
module.

Closes #27890.

PiperOrigin-RevId: 845156030
Change-Id: Ic5d777645bf6a5ca67fa6cb577f426c96beda894

Commit
7ca1159

Co-authored-by: Fabian Meumertzheim <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

team-ExternalDeps External dependency handling, remote repositiories, WORKSPACE file.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants