Skip to content

Conversation

@rickeylev
Copy link
Collaborator

@rickeylev rickeylev commented Dec 23, 2025

The --debugger flag is useful for injecting a user-specified dependency without
having to modify the binary or test. Similarly, tests now implicitly inherit the
PYTHONBREAKPOINT environment variable.

The dependency is only added for the target config because build tools can't be
intercepted for debugging.

@rickeylev rickeylev requested a review from aignas as a code owner December 23, 2025 21:47
@rickeylev rickeylev added the do not merge Tag that prevents merging label Dec 23, 2025
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @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 enhances the debugging experience for Python binaries and tests by introducing a new --debugger flag, which allows for flexible injection of custom debugger dependencies. It also improves the automatic inheritance of the PYTHONBREAKPOINT environment variable, making breakpoint() usage more seamless. Alongside these user-facing features, the PR includes substantial internal refactoring to streamline the underlying rule implementations, making them more robust and easier to manage.

Highlights

  • New --debugger flag: Introduced a --debugger flag for py_binary and py_test rules, allowing users to inject a custom debugger dependency without modifying the target's deps attribute. This dependency is only added for the target configuration, not for build tools.
  • PYTHONBREAKPOINT inheritance: Tests now implicitly inherit the PYTHONBREAKPOINT environment variable, streamlining the use of custom debuggers with breakpoint() functionality.
  • Internal Refactoring: Significant internal refactoring was performed in common.bzl, py_executable.bzl, and py_library.bzl to simplify semantics structs and remove redundant parameters, improving code maintainability.
  • Configuration Management: Added new configuration settings and a bazel_config_mode rule to differentiate between exec and target configurations, ensuring the debugger dependency is applied correctly.

🧠 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 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 introduces a --debugger flag to inject a debugger dependency into py_binary and py_test targets. It also makes py_binary and py_test targets implicitly inherit the PYTHONBREAKPOINT environment variable. The implementation is clean and includes documentation and tests for the new flag. A significant part of this PR is a refactoring that removes the semantics struct pattern from py_executable.bzl and py_library.bzl, simplifying the code by removing a layer of indirection. The changes look solid. I have one minor suggestion for improving the accuracy of the changelog.

to modify their deps. The expectation is it points to a target that provides an
alternative debugger (pudb, winpdb, debugpy, etc).

* Must provide {obj}`PyInfo`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see that the debugpy can be used either as a CLI via python -m debugpy which could work well with our main_module or via import debugpy that would automatically work with this as well. To be truly useful, it would be nice to give at least one example how to setup the debugger. That can be done in a separate PR though.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does python -m debugpy do? Just start a debugpy server?

debugpy is particularly interesting because its a client/server design, so it can can actually Just Work with bazel test (where stdin is gone).

rickeylev and others added 2 commits December 23, 2025 18:38
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@rickeylev
Copy link
Collaborator Author

re: example for how to use them: I added a basic howto doc.

@rickeylev rickeylev removed the do not merge Tag that prevents merging label Dec 24, 2025
Copy link
Collaborator

@aignas aignas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@rickeylev rickeylev added this pull request to the merge queue Dec 24, 2025
Merged via the queue into bazel-contrib:main with commit a94bd0f Dec 24, 2025
4 of 5 checks passed
@rickeylev rickeylev deleted the feat.debugger.flag branch December 24, 2025 07:25
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