-
-
Notifications
You must be signed in to change notification settings - Fork 650
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?
Changes from 7 commits
7b52502
e9688b7
15687f1
5c6539e
504ccf3
effbe4c
e7bc464
ee233fd
84439af
3c53c52
0dbccff
0c7134c
7106a6b
e630cb8
25895ab
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -93,7 +93,7 @@ def _test_basic_zip(name, config): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # platforms. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # 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", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| _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". |
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
Uh oh!
There was an error while loading. Please reload this page.
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)
Uh oh!
There was an error while loading. Please reload this page.
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.
Uh oh!
There was an error while loading. Please reload this page.
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
flag_aliasis 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_pythonremains compatible with bazel 7 and 8, which can't resolve the flag aliases. Wheneverrules_pythondrops support for pre-9 bazel we can remove this code.