-
-
Notifications
You must be signed in to change notification settings - Fork 658
feat: add py_zipapp_binary and test rules for zipapp support #3539
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 @rickeylev, 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 introduces a comprehensive overhaul of Python zip application (zipapp) support within the Bazel rules. By extracting zipapp creation into new, dedicated Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. 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
This pull request introduces a significant new feature: dedicated rules for creating Python zipapps (py_zipapp_binary and py_zipapp_test). This is a substantial refactoring that moves zipapp creation logic out of the generic py_binary rule, improving modularity and adding features like explicit compression control and enhanced determinism. The changes are extensive, touching many parts of the Python rules, including common utilities, executable creation, and providers. The new tooling for zipping and creating executables is well-designed and thoroughly tested.
Overall, the implementation is of high quality. However, I've identified a couple of critical issues in the new macros that would lead to build failures due to missing imports. I've also found a logic bug in a shell script template that affects a debugging feature. I've provided suggestions to fix these issues. The rest of the changes, including the refactoring of runfiles handling and the new actions_run helper, are excellent improvements.
| @@ -0,0 +1,14 @@ | |||
| """`py_zipapp_binary` macro.""" | |||
|
|
|||
| load("//python/private/zipapp:py_zipapp_rule.bzl", _py_zipapp_binary_rule = "py_zipapp_binary") | |||
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.
The function add_tag is called on line 11 but is not defined or loaded in this file. This will cause a build failure. It should be loaded from //python/private:util.bzl.
| load("//python/private/zipapp:py_zipapp_rule.bzl", _py_zipapp_binary_rule = "py_zipapp_binary") | |
| load("//python/private:util.bzl", "add_tag") | |
| load("//python/private/zipapp:py_zipapp_rule.bzl", _py_zipapp_binary_rule = "py_zipapp_binary") |
| @@ -0,0 +1,14 @@ | |||
| """`py_zipapp_test` macro.""" | |||
|
|
|||
| load("//python/private/zipapp:py_zipapp_rule.bzl", _py_zipapp_test = "py_zipapp_test") | |||
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.
The function add_tag is called on line 11 but is not defined or loaded in this file. This will cause a build failure. It should be loaded from //python/private:util.bzl.
| load("//python/private/zipapp:py_zipapp_rule.bzl", _py_zipapp_test = "py_zipapp_test") | |
| load("//python/private:util.bzl", "add_tag") | |
| load("//python/private/zipapp:py_zipapp_rule.bzl", _py_zipapp_test = "py_zipapp_test") |
| if [[ -n "$zip_dir" && -z "${RULES_PYTHON_BOOTSTRAP_VERBOSE:-}" ]]; then | ||
| trap 'rm -fr "$zip_dir"' EXIT | ||
| fi | ||
| trap 'rm -rf "$zip_dir"' EXIT |
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.
The trap logic for cleaning up the temporary directory appears to be incorrect. The unconditional trap on line 54 overrides the conditional one on line 52. This results in the temporary directory always being removed, even when RULES_PYTHON_BOOTSTRAP_VERBOSE is set for debugging purposes. The likely intention is to preserve the directory for inspection in verbose mode.
The logic should be consolidated into a single conditional trap.
| if [[ -n "$zip_dir" && -z "${RULES_PYTHON_BOOTSTRAP_VERBOSE:-}" ]]; then | |
| trap 'rm -fr "$zip_dir"' EXIT | |
| fi | |
| trap 'rm -rf "$zip_dir"' EXIT | |
| if [[ -n "$zip_dir" && -z "${RULES_PYTHON_BOOTSTRAP_VERBOSE:-}" ]]; then | |
| trap 'rm -rf "$zip_dir"' EXIT | |
| fi |
74ff6b0 to
7ac5c39
Compare
7ac5c39 to
149a840
Compare
…into refactor.pyzipapp
…into refactor.pyzipapp
This adds Python zipapp support as a separate rule that works with a py_binary.
This will eventually replace the zipapp logic that is directly part of py_binary.
The high level behavior should be the same, but there's a few differences and improvements:
Changes:
{name}.pyzImprovements: