-
-
Notifications
You must be signed in to change notification settings - Fork 649
build: add flag_alias definition for Starlarkification of python flags #3450
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Summary of ChangesHello @aranguyen, 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 integrates Highlights
Using Gemini Code AssistThe 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
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 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
|
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
The pull request successfully introduces flag_alias definitions for several native Python flags, mapping them to their Starlark counterparts. This change is crucial for the ongoing Starlarkification effort, ensuring that users can continue to build with these flags while transitioning to Starlark-based implementations. The added aliases (build_python_zip, incompatible_default_to_explicit_init_py, python_path, and experimental_python_import_all_repositories) correctly point to their respective build settings in //python/config_settings. The changes are well-aligned with the stated objective of the pull request and the design document.
|
Is flag_alias bazel 9+? All the CI jobs are failing because it's not available. At the least, we need to support 8.x. We can drop 7.x pretty soon -- I'm thinking the Jan release? |
|
This should work as a no-op in the latest bazel i.e. they continue to read native flags as usual, so they parse these new entries but just skip over them. |
Oh ok, that explains. Thanks. I updated the PR and it's using 8.5, but it still fails, error: |
|
@aranguyen I think you want to give the parameters names to fix that. |
|
Please also add a changelog note stating the minimum supported bazel versions coming with this change. |
| flag_alias(name = "build_python_zip", starlark_flag = "//python/config_settings:build_python_zip") | ||
| flag_alias(name = "incompatible_default_to_explicit_init_py", starlark_flag = "//python/config_settings:incompatible_default_to_explicit_init_py") | ||
| flag_alias(name = "python_path", starlark_flag = "//python/config_settings:python_path") | ||
| flag_alias(name = "experimental_python_import_all_repositories", starlark_flag = "//python/config_settings:experimental_python_import_all_repositories") |
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.
will this work for users of rules_python too?
otherwise I think this issue still stands : #3252 (comment)
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.
That should work today, even before this PR is submitted.
Bazel 9 hard-codes those aliases right now. Once this PR works we'll remove the hard-coded logic from bazel@head.
The intention is users should have a seamless experience regardless of what's going on behind the scenes.
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.
Thanks! I read https://docs.google.com/document/d/1yOvi4hVV7Ja32ocwVb4lsEUnijftk8nilXPncYm-BH8/edit?tab=t.0#heading=h.mfw8nr4w6amb briefly, and as you say this trickles down to users too, and not just rules_python. Makes sense.
Now another question, by adding this PR, should this code just be removed now?
rules_python/python/private/flags.bzl
Lines 39 to 73 in 144984c
| _POSSIBLY_NATIVE_FLAGS = { | |
| "build_python_zip": (lambda ctx: ctx.fragments.py.build_python_zip, "native"), | |
| "default_to_explicit_init_py": (lambda ctx: ctx.fragments.py.default_to_explicit_init_py, "native"), | |
| "python_import_all_repositories": (lambda ctx: ctx.fragments.bazel_py.python_import_all_repositories, "native"), | |
| "python_path": (lambda ctx: ctx.fragments.bazel_py.python_path, "native"), | |
| } | |
| def read_possibly_native_flag(ctx, flag_name): | |
| """ | |
| Canonical API for reading a Python build flag. | |
| Flags might be defined in Starlark or native-Bazel. This function reasd flags | |
| from tbe correct source based on supporting Bazel version and --incompatible* | |
| flags that disable native references. | |
| Args: | |
| ctx: Rule's configuration context. | |
| flag_name: Name of the flag to read, without preceding "--". | |
| Returns: | |
| The flag's value. | |
| """ | |
| # Bazel 9.0+ can disable these fragments with --incompatible_remove_ctx_py_fragment and | |
| # --incompatible_remove_ctx_bazel_py_fragment. Disabling them means bazel expects | |
| # Python to read Starlark flags. | |
| use_native_def = hasattr(ctx.fragments, "py") and hasattr(ctx.fragments, "bazel_py") | |
| # Developer override to force the Starlark definition for testing. | |
| if _POSSIBLY_NATIVE_FLAGS[flag_name][1] == "starlark": | |
| use_native_def = False | |
| if use_native_def: | |
| return _POSSIBLY_NATIVE_FLAGS[flag_name][0](ctx) | |
| else: | |
| # Starlark definition of "--foo" is assumed to be a label dependency named "_foo". |
flag_alias is already doing (and even a better job) than what this code is trying to do.
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.
That should still be necessary so rules_python remains compatible with bazel 7 and 8, which can't resolve the flag aliases. Whenever rules_python drops support for pre-9 bazel we can remove this code.
With this change, when user build with a native python flag,
flag_aliaswill point to the starlark version of the flag. Please see design doc here for more details.This feature should work as a no-op in the latest bazel 8.x and 7.x releases.