Skip to content

Conversation

meteorcloudy
Copy link
Contributor

@meteorcloudy meteorcloudy commented Sep 26, 2025

  • Similar to python.defaults's python_version_env attribute, we add python_version_env, sha256_env, strip_prefix_env, url_env for corresponding attributes of single_version_platform_override, allowing reading those values from env vars.
  • Allow the python version specified to be a minor version, which will be mapped to a full version with MINOR_MAPPING from //python:versions.bzl.

This feature will make sure JAX's HERMETIC_PYTHON_* env vars keep working after migrating to Bzlmod.
https://docs.jax.dev/en/latest/developer.html#custom-hermetic-python-examples

Copy link
Contributor

Summary of Changes

Hello @meteorcloudy, 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 significantly enhances the flexibility of Python toolchain configuration within Bzlmod by introducing the ability to override critical attributes like Python version, SHA256 checksum, strip prefix, and download URLs directly from environment variables. This change is crucial for maintaining compatibility with existing workflows, such as JAX's hermetic Python setups, ensuring a smooth transition to Bzlmod while providing external control over toolchain definitions.

Highlights

  • Environment Variable Overrides: Introduced new _env attributes (python_version_env, sha256_env, strip_prefix_env, url_env) for single_version_platform_override to allow values to be read from environment variables.
  • JAX Compatibility: This feature specifically addresses the need for JAX's HERMETIC_PYTHON_* environment variables to continue working after migrating to Bzlmod.
  • Flexible Python Versioning: Enhanced python_version handling to support minor versions when read from environment variables, mapping them to full versions if available.
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 adds support for overriding python_version, sha256, strip_prefix, and urls for single_version_platform_override from environment variables. This is a useful feature for hermetic builds. The implementation is mostly solid, including refactoring to pass module_ctx and updating tests to cover the new functionality. I've found one minor issue with how the url_env variable is parsed, which could lead to empty strings in the URL list, and I've suggested a fix.

meteorcloudy and others added 4 commits September 26, 2025 11:37
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@rickeylev
Copy link
Collaborator

I'm pretty mixed on this. I'd like to talk in #3293 more to try and figure out how to glue things together better.

As is, what this implies is all the APIs we have that accept some sort of version, url, etc, arg should have a _env and _target variations of them. (so the pip, python, and uv bzlmod extensions, which encompasses a very large api surface).

Having python_version_env for single_version_platform_override is also a bit weird -- the API name means it applies to a specific version. Getting the version from an environment variable means its for an arbitrary version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants