Skip to content

chore: update handwritten noxfiles to use ruff#15580

Open
ohmayr wants to merge 1 commit intomainfrom
replace-black-with-ruff-for-handwritten-clients
Open

chore: update handwritten noxfiles to use ruff#15580
ohmayr wants to merge 1 commit intomainfrom
replace-black-with-ruff-for-handwritten-clients

Conversation

@ohmayr
Copy link
Contributor

@ohmayr ohmayr commented Feb 18, 2026

update handwritten noxfiles to use ruff

@ohmayr ohmayr requested review from a team as code owners February 18, 2026 20:56
@ohmayr ohmayr requested a review from Linchin February 18, 2026 20:56
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @ohmayr, 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 streamlines the development workflow by standardizing code formatting and linting practices. It transitions from a multi-tool setup (Black and Isort) to a single, high-performance tool, Ruff, across several project Noxfiles. This change aims to improve consistency, reduce build times, and simplify maintenance of the code style enforcement.

Highlights

  • Migration to Ruff: The build system's linting and formatting tools have been migrated from Black and Isort to Ruff across multiple noxfile.py configurations.
  • Deprecated blacken session: The blacken Nox session is now deprecated and users are advised to use nox -s format instead. It has been updated to use Ruff for formatting.
  • Enhanced format session: The format Nox session has been refactored to leverage Ruff for both import sorting (ruff check --select I --fix) and code formatting (ruff format), ensuring a unified approach.
  • Consistent configuration: All Ruff commands now include --target-version and --line-length=88 for consistent formatting rules.
Changelog
  • packages/google-cloud-access-context-manager/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/google-cloud-audit-log/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/google-cloud-bigquery-storage/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/google-cloud-gke-hub/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/google-cloud-monitoring-dashboards/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/google-cloud-monitoring/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/google-cloud-os-login/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/google-cloud-translate/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/google-cloud-vision/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/googleapis-common-protos/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
  • packages/grpc-google-iam-v1/noxfile.py
    • Replaced BLACK_VERSION and ISORT_VERSION with RUFF_VERSION.
    • Updated the lint session to use ruff format --check for formatting verification.
    • Deprecated the blacken session, adding a warning and migrating its functionality to ruff format.
    • Rewrote the format session to utilize ruff check --select I --fix for import sorting and ruff format for code formatting.
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 successfully migrates the handwritten noxfiles from using black and isort to ruff for linting and formatting. The changes are consistent across all modified files. I have a couple of suggestions to improve the implementation:

  1. In the blacken session, the comment about preserving legacy behavior is inaccurate, as ruff format also sorts imports, unlike black. I've suggested updating the comment to reflect the new behavior.
  2. The format session can be simplified. It currently uses two separate ruff commands, one for fixing imports and another for formatting. Since ruff format can handle both, these can be combined into a single, more efficient command.

These changes will make the noxfiles cleaner and more efficient. Overall, this is a great step towards modernizing the development tooling.

"""(Deprecated) Legacy session. Please use 'nox -s format'."""
session.log("WARNING: The 'blacken' session is deprecated and will be removed in a future release. Please use 'nox -s format' in the future.")

# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The comment here is misleading. ruff format also sorts imports, so it's not keeping the legacy behavior of black which only formats. Since this session is deprecated, changing the behavior is acceptable, but the comment should be updated to be accurate.

Suggested change
# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
# Just run the ruff formatter (which also sorts imports)

Comment on lines +141 to 159
# 2. Run Ruff to fix imports
# check --select I: Enables strict import sorting
# --fix: Applies the changes automatically
session.run(
"isort",
"--fss",
"ruff", "check",
"--select", "I",
"--fix",
f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)

# 3. Run Ruff to format code
session.run(
"black",
"ruff", "format",
f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The ruff format command is capable of both formatting code and sorting imports. Running ruff check --select I --fix followed by ruff format is redundant and less efficient as it processes files twice. You can simplify this session by using a single ruff format command to handle both tasks.

    # 2. Run Ruff to format code and sort imports
    session.run(
        "ruff",
        "format",
        f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
        "--line-length=88",
        *LINT_PATHS,
    )

"""(Deprecated) Legacy session. Please use 'nox -s format'."""
session.log("WARNING: The 'blacken' session is deprecated and will be removed in a future release. Please use 'nox -s format' in the future.")

# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The comment here is misleading. ruff format also sorts imports, so it's not keeping the legacy behavior of black which only formats. Since this session is deprecated, changing the behavior is acceptable, but the comment should be updated to be accurate.

Suggested change
# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
# Just run the ruff formatter (which also sorts imports)

Comment on lines +141 to 159
# 2. Run Ruff to fix imports
# check --select I: Enables strict import sorting
# --fix: Applies the changes automatically
session.run(
"isort",
"--fss",
"ruff", "check",
"--select", "I",
"--fix",
f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)

# 3. Run Ruff to format code
session.run(
"black",
"ruff", "format",
f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The ruff format command is capable of both formatting code and sorting imports. Running ruff check --select I --fix followed by ruff format is redundant and less efficient as it processes files twice. You can simplify this session by using a single ruff format command to handle both tasks.

    # 2. Run Ruff to format code and sort imports
    session.run(
        "ruff",
        "format",
        f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
        "--line-length=88",
        *LINT_PATHS,
    )

"""(Deprecated) Legacy session. Please use 'nox -s format'."""
session.log("WARNING: The 'blacken' session is deprecated and will be removed in a future release. Please use 'nox -s format' in the future.")

# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The comment here is misleading. ruff format also sorts imports, so it's not keeping the legacy behavior of black which only formats. Since this session is deprecated, changing the behavior is acceptable, but the comment should be updated to be accurate.

Suggested change
# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
# Just run the ruff formatter (which also sorts imports)

Comment on lines +188 to 206
# 2. Run Ruff to fix imports
# check --select I: Enables strict import sorting
# --fix: Applies the changes automatically
session.run(
"isort",
"--fss",
"ruff", "check",
"--select", "I",
"--fix",
f"--target-version=py{ALL_PYTHON[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)

# 3. Run Ruff to format code
session.run(
"black",
"ruff", "format",
f"--target-version=py{ALL_PYTHON[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The ruff format command is capable of both formatting code and sorting imports. Running ruff check --select I --fix followed by ruff format is redundant and less efficient as it processes files twice. You can simplify this session by using a single ruff format command to handle both tasks.

    # 2. Run Ruff to format code and sort imports
    session.run(
        "ruff",
        "format",
        f"--target-version=py{ALL_PYTHON[0].replace('.', '')}",
        "--line-length=88",
        *LINT_PATHS,
    )

"""(Deprecated) Legacy session. Please use 'nox -s format'."""
session.log("WARNING: The 'blacken' session is deprecated and will be removed in a future release. Please use 'nox -s format' in the future.")

# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The comment here is misleading. ruff format also sorts imports, so it's not keeping the legacy behavior of black which only formats. Since this session is deprecated, changing the behavior is acceptable, but the comment should be updated to be accurate.

Suggested change
# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
# Just run the ruff formatter (which also sorts imports)

Comment on lines +141 to 159
# 2. Run Ruff to fix imports
# check --select I: Enables strict import sorting
# --fix: Applies the changes automatically
session.run(
"isort",
"--fss",
"ruff", "check",
"--select", "I",
"--fix",
f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)

# 3. Run Ruff to format code
session.run(
"black",
"ruff", "format",
f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The ruff format command is capable of both formatting code and sorting imports. Running ruff check --select I --fix followed by ruff format is redundant and less efficient as it processes files twice. You can simplify this session by using a single ruff format command to handle both tasks.

    # 2. Run Ruff to format code and sort imports
    session.run(
        "ruff",
        "format",
        f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
        "--line-length=88",
        *LINT_PATHS,
    )

"""(Deprecated) Legacy session. Please use 'nox -s format'."""
session.log("WARNING: The 'blacken' session is deprecated and will be removed in a future release. Please use 'nox -s format' in the future.")

# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The comment here is misleading. ruff format also sorts imports, so it's not keeping the legacy behavior of black which only formats. Since this session is deprecated, changing the behavior is acceptable, but the comment should be updated to be accurate.

Suggested change
# Just run the ruff formatter (keeping legacy behavior of only formatting, not sorting imports)
# Just run the ruff formatter (which also sorts imports)

Comment on lines +141 to 159
# 2. Run Ruff to fix imports
# check --select I: Enables strict import sorting
# --fix: Applies the changes automatically
session.run(
"isort",
"--fss",
"ruff", "check",
"--select", "I",
"--fix",
f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)

# 3. Run Ruff to format code
session.run(
"black",
"ruff", "format",
f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
"--line-length=88", # Standard Black line length
*LINT_PATHS,
)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The ruff format command is capable of both formatting code and sorting imports. Running ruff check --select I --fix followed by ruff format is redundant and less efficient as it processes files twice. You can simplify this session by using a single ruff format command to handle both tasks.

    # 2. Run Ruff to format code and sort imports
    session.run(
        "ruff",
        "format",
        f"--target-version=py{UNIT_TEST_PYTHON_VERSIONS[0].replace('.', '')}",
        "--line-length=88",
        *LINT_PATHS,
    )

Copy link
Contributor

@vchudnov-g vchudnov-g left a comment

Choose a reason for hiding this comment

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

Thanks for doing this! Just one nit

session.install("flake8", BLACK_VERSION)
session.install("flake8", RUFF_VERSION)

# 2. Check formatting
Copy link
Contributor

@vchudnov-g vchudnov-g Feb 18, 2026

Choose a reason for hiding this comment

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

There is no #1 in this comment:

Suggested change
# 2. Check formatting
# Check formatting

Same for the other files.

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

Comments