Skip to content

Conversation

@liutikas
Copy link
Collaborator

Using broad target("**/*.kt") results in huge cost in configuration cache serialization.

Before: 30,102.48 ms mean with 561.58 ms standard deviation
After: 16,482.29 ms mean with 235.55 ms standard deviation

For the following Gradle profiler scenario
build_dry_run {
tasks = ["build"]
gradle-args = ["--dry-run"]
clear-configuration-cache-state-before = BUILD
}

Using steps described in
https://www.liutikas.net/2025/11/02/Unreasonable-Configuration.html

Format all existing code with ./gradlew spotlessApply

Lastly, update settings.gradle to use buildScript.sourceFile as previous code was making an assumption current path is the checkout of the project.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @liutikas, 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 primarily focuses on enhancing the build system's efficiency and maintaining code quality. By refining the spotless plugin's file targeting, it significantly reduces configuration cache serialization time, leading to faster build performance. Additionally, it improves the robustness of settings.gradle.kts by correcting how it resolves build-related files and applies a comprehensive code formatting pass to ensure consistent style throughout the project.

Highlights

  • Spotless Configuration Optimization: The spotless plugin targets for Kotlin, Kotlin Gradle, and XML files have been significantly narrowed from broad **/*.kt, **/*.kts, **/*.xml patterns to more specific src/**/*.kt, build.gradle.kts, and src/**/*.xml respectively. This change aims to reduce configuration cache serialization costs, with reported improvements from ~30 seconds to ~16 seconds.
  • settings.gradle.kts Path Resolution Fix: The logic for determining the agpVersion in settings.gradle.kts has been updated to use buildscript.sourceFile!!.parentFile.resolve("gradle/libs.versions.toml") instead of File("gradle/libs.versions.toml"). This makes the path resolution more robust and less dependent on the current working directory.
  • Code Formatting and Style Consistency: A spotlessApply pass was performed across the codebase, resulting in numerous minor formatting adjustments, trailing comma additions, unused import removals, and copyright header additions, ensuring adherence to defined code style guidelines.

🧠 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 effectively improves Gradle's configuration cache performance by scoping down the Spotless targets. The changes in build.gradle.kts narrow the file patterns for kotlin, kotlinGradle, and xml formats, which is a great optimization. The PR also includes various formatting fixes applied by Spotless across the codebase, enhancing code consistency. Additionally, the update in settings.gradle.kts to use buildscript.sourceFile for path resolution is a good improvement for build robustness. I have one suggestion regarding the kotlinGradle target to make it slightly more flexible while maintaining performance.

Using broad target("**/*.kt") results in huge cost in configuration
cache serialization.

Before: 30,102.48 ms mean with 561.58 ms standard deviation
After: 16,482.29 ms mean with 235.55 ms standard deviation

For the following Gradle profiler scenario
build_dry_run {
    tasks = ["build"]
    gradle-args = ["--dry-run"]
    clear-configuration-cache-state-before = BUILD
}

Using steps described in
https://www.liutikas.net/2025/11/02/Unreasonable-Configuration.html

Format all existing code with ./gradlew spotlessApply

Lastly, update settings.gradle to use buildScript.sourceFile as previous
code was making an assumption current path is the checkout of the
project.
Copy link
Collaborator

@riggaroo riggaroo left a comment

Choose a reason for hiding this comment

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

thanks aurimas!

@riggaroo riggaroo merged commit 726ff34 into android:main Jan 28, 2026
4 checks passed
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