build: add flag_alias definition for Starlarkification of python flags#3450
build: add flag_alias definition for Starlarkification of python flags#3450aranguyen wants to merge 18 commits intobazel-contrib:mainfrom
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.
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.
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.
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.
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
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.
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.
| # Pass value to both native and starlark versions of the flag until | ||
| # the native one is removed. | ||
| "//command_line_option:build_python_zip": "true", | ||
| "//python/config_settings:build_python_zip": "true", |
There was a problem hiding this comment.
@gregestren sorry for ping again. Are you sure this is a correct change on bazel 7 and 8?
My understanding is that
- you mentioned flag alias is no op on these versions.
- and the code here will always pick the py_fragments values and ignore the rules_python configs for bazel 7 and 8.
rules_python/python/private/flags.bzl
Lines 39 to 73 in 144984c
So the result is this change to overrides on these bazel versions will make the override stop overriding anything, breaking the test.
I see in CI failures like below that probably is related
(18:22:56) ERROR: /workdir/tests/config_settings/transition/BUILD.bazel:6:25: On dependency edge //tests/config_settings/transition:test_py_binary_windows_build_python_zip_false (722907e) -|target|-> //tests/config_settings/transition:test_py_binary_windows_build_python_zip_false_subject: com.google.devtools.build.lib.packages.BuildFileNotFoundException: no such package '@@rules_testing//python/config_settings': BUILD file not found in directory 'python/config_settings' of external repository @@rules_testing. Add a BUILD file to a directory to mark it as a package.
(18:22:56) ERROR: Analysis of target '//tests/config_settings/transition:test_py_binary_windows_build_python_zip_false' failed; build aborted
There was a problem hiding this comment.
Hi @shayanhoshyari , taking a closer look at the error no such package '@@rules_testing//python/config_settings': BUILD file not found in directory 'python/config_settings' of external repository @@rules_testing
I'm wondering if this is just changing this from "//python/config_settings:build_python_zip": "true", to "@@rules_python//python/config_settings:build_python_zip": "true",?
The code seems to be looking for this flag definition in package @@rules_testing
There was a problem hiding this comment.
and probably update @@rules_testing to depends on the newer version of @rules_python that has these flag def? https://github.com/bazelbuild/rules_testing/blob/master/MODULE.bazel#L19
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.