Skip to content

2.1.1#20

Closed
Nek-12 wants to merge 9 commits intomasterfrom
2.1.1
Closed

2.1.1#20
Nek-12 wants to merge 9 commits intomasterfrom
2.1.1

Conversation

@Nek-12
Copy link
Member

@Nek-12 Nek-12 commented Jan 6, 2026

Summary

  • bump patch version to 2.1.1
  • update compileSdk to 36 for latest AndroidX requirements
  • dependency/build maintenance updates

Testing

./gradlew assemble
./gradlew detektAll
./gradlew :core:jvmTest

Summary by CodeRabbit

  • Documentation

    • Added new contributor/project guidelines and updated license year to 2026.
  • Chores

    • Upgraded multiple build tools, libraries, and Kotlin tooling; updated Gradle wrapper to 9.2.1 and simplified publishing/configuration.
    • Raised compile/target SDK and min SDK.
    • Migrated JVM target configuration to the newer Kotlin Gradle plugin API and simplified wrapper invocation.
    • Added a dependency-update script and expanded .gitignore.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 6, 2026

Warning

Rate limit exceeded

@Nek-12 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 11 minutes and 48 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 66c7171 and 40a6429.

📒 Files selected for processing (2)
  • .github/ci-gradle.properties
  • gradle.properties
📝 Walkthrough

Walkthrough

Upgrades build tooling and dependencies (Gradle wrapper → 9.2.1, version-catalog bumps), migrates Kotlin JVM target config to the new Gradle plugin API, simplifies Maven publishing DSL, adjusts buildSrc SDKs and compiler flags, adds contributor docs and an update script, and changes wrapper invocation to a direct JAR call.

Changes

Cohort / File(s) Summary
Documentation & Gitignore
AGENTS.md, README.md, .gitignore
Add AGENTS.md contributor guidelines; bump license year in README.md; ignore .kotlin.
Gradle Wrapper & Invocation
gradle/wrapper/gradle-wrapper.properties, gradlew, gradlew.bat
Upgrade wrapper distribution to Gradle 9.2.1; replace classpath-based wrapper launch with -jar gradle-wrapper.jar (remove CLASSPATH handling).
Version Catalog & Plugins
gradle/libs.versions.toml
Bump many dependency/plugin versions (Kotlin, Compose, Gradle plugins, Dokka, kotest, etc.); add turbine and kotest-assertions-table; update bundles.
Top-level Build Script
build.gradle.kts
Replace publishToMavenCentral(SonatypeHost..., false) with publishToMavenCentral(); remove SonatypeHost import; drop androidVariantsToPublish; simplify versionCatalogUpdate keep rules.
App & Library Gradle Kotlin DSL
app/build.gradle.kts, buildSrc/src/main/kotlin/pro.respawn.android-library.gradle.kts
Switch JVM target from kotlinOptions { jvmTarget = ... } to experimental compilerOptions { jvmTarget = ... } with @OptIn(ExperimentalKotlinGradlePluginApi).
buildSrc: Config & Multiplatform
buildSrc/src/main/kotlin/Config.kt, buildSrc/src/main/kotlin/ConfigureMultiplatform.kt, buildSrc/src/main/kotlin/ConfigureAndroid.kt
Bump patch (0→1), compileSdk/targetSdk 35→36, minSdk 21→23; adjust Kotlin compiler args (remove wasm/suppress flags, add -Xwarning-level=), simplify jvmCompilerArgs (-jvm-default=no-compatibility), change wasmJs moduleNameoutputModuleName.set(...), remove explicit buildTypes.release archivesBaseName override.
Gradle Properties
gradle.properties
Comment out Configure-on-Demand, remove android.experimental.additionalArtifactsInModel, add migration flags android.builtInKotlin=false and android.newDsl=false.
Automation Script
scripts/update_deps.sh
Add script to update Gradle wrapper and run versionCatalogUpdate (accepts optional Gradle version, defaults to latest).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • 2.0.0 #13: Similar version-catalog and dependency upgrades (Kotlin, Compose, plugin versions).
  • 1.1.0 #5: Overlapping buildSrc and Kotlin Multiplatform/Android configuration changes and plugin opt-ins.
  • 2.0.0-beta02 #10: Related changes to Maven publishing configuration and publishing DSL.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title '2.1.1' is a version number that does not meaningfully describe the changes in this pull request. Use a descriptive title that summarizes the main change, such as 'Bump version to 2.1.1 and update dependencies' or 'Update compileSdk and dependencies for 2.1.1 release'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link

Summary of Changes

Hello @Nek-12, 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 delivers a crucial maintenance update, advancing the project to version 2.1.1. It primarily focuses on updating the Android SDK to meet current AndroidX requirements and performing a broad refresh of build dependencies and tools. The changes also include significant refinements to Gradle configurations, the introduction of detailed repository guidelines, and a new script to automate dependency updates, all aimed at enhancing project stability, compatibility, and developer experience.

Highlights

  • Version Bump: The project's patch version has been incremented to 2.1.1, reflecting a minor release.
  • Android SDK Updates: The compileSdk has been updated to 36 and minSdk to 23, aligning with the latest AndroidX requirements and modern Android development standards.
  • Dependency and Build Tool Updates: Numerous dependencies and build tools have been updated, including Kotlin (to 2.3.0), Compose, Gradle (to 9.2.1), Detekt, Kotest, and various Gradle plugins, ensuring compatibility and leveraging the latest features.
  • Gradle Configuration Refinements: Gradle build configurations have been streamlined, including changes to Kotlin compiler options, Maven publish settings, and version catalog update rules, to improve build efficiency and maintainability.
  • New Repository Guidelines: A new AGENTS.md file has been added, providing comprehensive guidelines for project structure, build commands, testing practices, and commit/pull request conventions.
  • Dependency Update Script: A new shell script (scripts/update_deps.sh) has been introduced to automate the process of updating the Gradle wrapper and running version catalog updates, simplifying maintenance tasks.
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.

@Nek-12 Nek-12 enabled auto-merge January 6, 2026 19:41
Copy link

@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 new AGENTS.md file with repository guidelines and updates the copyright year in README.md. The core changes involve a major upgrade of project dependencies, including Kotlin, Compose, Gradle, Kotest, and various build plugins, as reflected in gradle/libs.versions.toml and the Gradle wrapper. Build configurations were refactored to move jvmTarget settings to kotlin.compilerOptions in app/build.gradle.kts and pro.respawn.android-library.gradle.kts, and deprecated kotlinOptions blocks were removed. Compiler arguments in Config.kt were adjusted, removing WASM-specific flags and updating warning suppression syntax, along with changes to JVM compiler arguments. Publishing configurations in build.gradle.kts were simplified, and versionCatalogUpdate settings were streamlined. The gradle.properties file saw the commenting out of org.gradle.configureondemand due to WASMJS incompatibility, removal of android.experimental.additionalArtifactsInModel, and addition of android.builtInKotlin and android.newDsl flags. The gradlew and gradlew.bat scripts were updated to use -jar instead of -classpath for the Gradle wrapper. A new scripts/update_deps.sh script was added to automate dependency updates. A review comment highlighted a potential version mismatch where the Kotest plugin is hardcoded to 6.0.0.M4 while other Kotest libraries use 6.0.7, suggesting alignment or a dedicated version variable for the plugin.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
build.gradle.kts (1)

94-98: Duplicate detektPlugins dependencies block.

The same three detekt plugins are declared twice — once at lines 94-98 and again at lines 153-157. This redundancy should be removed.

🔎 Proposed fix — remove duplicate block
 dependencies {
-    detektPlugins(rootProject.libs.detekt.formatting)
-    detektPlugins(rootProject.libs.detekt.compose)
-    detektPlugins(rootProject.libs.detekt.libraries)
     projects.run {
         listOf(
             core,
         ).forEach { dokka(it) }
     }
 }

Keep only the first dependencies block (lines 94-98) and merge the dokka references into it, or consolidate both into a single block.

Also applies to: 153-157

buildSrc/src/main/kotlin/Config.kt (1)

61-66: This is a binary-incompatible change that violates semantic versioning for a published library.

The flag -jvm-default=no-compatibility breaks binary compatibility with code compiled under the old compatibility mode (or with older Kotlin versions). Switching to this mode can cause NoSuchMethodError and linkage failures for existing library consumers.

For a published library on Maven Central, this requires a major version bump (3.0.0), not a minor one (2.1.1). Either:

  1. Bump the version to 3.0.0 and prominently document the breaking change in release notes, or
  2. Revert to -Xjvm-default=all to maintain binary compatibility

Also verify that removing -Xcontext-receivers is intentional.

🤖 Fix all issues with AI Agents
In @buildSrc/src/main/kotlin/Config.kt:
- Line 42: The minSdk bump in Config.kt (const val minSdk) from 21→23 is a
breaking change; confirm it’s intentional and required (e.g., due to AndroidX or
SDK36), and if not revert minSdk back to 21. If intentional, keep const val
minSdk = 23 and: update release notes/changelog with an explicit "Breaking
change: minSdk 23" entry and migration guidance for consumers still on API
21–22, add a brief comment near the minSdk constant explaining the dependency
that forced the raise, and communicate the change in your release/PR description
and any consumer-facing docs (README, upgrade guide) and CI/test matrices.

In @gradle.properties:
- Around line 47-49: These AGP opt-out flags (android.builtInKotlin=false and
android.newDsl=false) are AGP 9+ features but Gradle is 9.2.1 here, so verify
the Android Gradle Plugin version (the com.android.tools.build:gradle coordinate
in your build files) and either upgrade AGP to a 9.x release or remove/adjust
these flags; also document the intended target AGP version (e.g., in README or
as a comment next to the android.builtInKotlin/android.newDsl lines) so the
migration intent is clear.

In @gradle/libs.versions.toml:
- Line 15: The kotest library version "kotest" is 6.0.7 but the Kotest Gradle
plugin is hardcoded as 6.0.0.M4; align them by updating the plugin reference to
use the same version (6.0.7) or update the "kotest" entry to the desired plugin
version so both match, and replace the plugin's inline version with the shared
version reference to avoid future drift.
🧹 Nitpick comments (2)
scripts/update_deps.sh (2)

1-11: Add error handling with set -e.

The script lacks error handling. If any command fails, subsequent commands still run. Adding set -e ensures the script exits on first failure.

🔎 Proposed fix
 #!/bin/bash
+set -e
 
 GRADLE_VER="$1"

9-10: Dual wrapper invocation is intentional — consider adding a comment.

Running ./gradlew wrapper twice is a known pattern: the first call downloads the new wrapper JAR, the second uses the updated JAR to regenerate the scripts. A brief comment would help future maintainers understand this isn't a copy-paste error.

🔎 Proposed improvement
+# Run wrapper twice: first downloads new JAR, second regenerates scripts with updated wrapper
 ./gradlew wrapper --gradle-version "$GRADLE_VER" --distribution-type bin
 ./gradlew wrapper --gradle-version "$GRADLE_VER" --distribution-type bin
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1d2796c and ce690c0.

⛔ Files ignored due to path filters (1)
  • gradle/wrapper/gradle-wrapper.jar is excluded by !**/*.jar
📒 Files selected for processing (14)
  • AGENTS.md
  • README.md
  • app/build.gradle.kts
  • build.gradle.kts
  • buildSrc/src/main/kotlin/Config.kt
  • buildSrc/src/main/kotlin/ConfigureAndroid.kt
  • buildSrc/src/main/kotlin/ConfigureMultiplatform.kt
  • buildSrc/src/main/kotlin/pro.respawn.android-library.gradle.kts
  • gradle.properties
  • gradle/libs.versions.toml
  • gradle/wrapper/gradle-wrapper.properties
  • gradlew
  • gradlew.bat
  • scripts/update_deps.sh
💤 Files with no reviewable changes (1)
  • buildSrc/src/main/kotlin/ConfigureAndroid.kt
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-01-05T15:02:20.803Z
Learnt from: Nek-12
Repo: respawn-app/ApiResult PR: 14
File: .github/workflows/ci.yml:28-28
Timestamp: 2025-01-05T15:02:20.803Z
Learning: For Android-based Kotlin projects, the jvmTarget (bytecode version) should remain at version 11 to maintain compatibility.

Applied to files:

  • buildSrc/src/main/kotlin/pro.respawn.android-library.gradle.kts
  • buildSrc/src/main/kotlin/ConfigureMultiplatform.kt
  • gradle.properties
  • app/build.gradle.kts
  • buildSrc/src/main/kotlin/Config.kt
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (19)
README.md (1)

96-96: LGTM!

Standard copyright year update for the new calendar year.

AGENTS.md (3)

1-10: Good documentation of project structure.

Clear documentation of the module organization and directory layout for contributors.


18-28: Clear contribution guidelines.

Well-documented testing and commit conventions that provide clear expectations for contributors.


11-17: The documented Gradle commands are accurate and compatible with Gradle 9.2.1. All tasks exist and are properly configured: :core:jvmTest is provided by the Kotlin Multiplatform configuration, :app:assembleDebug is a standard Android application task, and both detektAll and detektFormat are explicitly registered in the root build.gradle.kts. No changes needed.

gradle.properties (1)

9-10: Reasonable to disable for wasmJS compatibility.

Disabling Configure on Demand due to wasmJS incompatibility is justified. The TODO provides clear context. Monitor when wasmJS support improves to potentially re-enable this optimization.

buildSrc/src/main/kotlin/pro.respawn.android-library.gradle.kts (1)

1-1: Import required for experimental API usage.

The import of ExperimentalKotlinGradlePluginApi is necessary for the migration to the new compiler options API.

buildSrc/src/main/kotlin/ConfigureMultiplatform.kt (2)

52-57: LGTM! Migration to outputModuleName.set() is correct.

This aligns with the newer Kotlin/Wasm DSL where moduleName property was replaced with outputModuleName provider-based API.


63-70: Review androidTarget usage — current best practice, future migration to Google plugin noted.

The @Suppress("DEPRECATION") is applied correctly. androidTarget is the current recommended API in Kotlin Multiplatform (the replacement for the legacy android target), not a temporary workaround. The long-term migration path is to Google's com.android.kotlin.multiplatform.library plugin, but that's future planning, not an urgent refactoring. If you want to add a TODO comment for eventual migration once Google's plugin stabilizes, that's a reasonable housekeeping measure but not required.

The jvmTarget is correctly set to JVM_11 (line 38 in Config.kt), which aligns with Android compatibility requirements.

build.gradle.kts (2)

100-108: Removed keepUnusedLibraries and keepUnusedPlugins — intentional?

Only keepUnusedVersions = true remains. If you have libraries/plugins in the catalog that aren't directly referenced (e.g., used via alias in subprojects or for documentation), they may be pruned on the next versionCatalogUpdate run.


50-51: The call to publishToMavenCentral() without an explicit SonatypeHost argument is correct. The vanniktech maven-publish plugin now defaults to publishing via Sonatype's Central Portal, and the old SonatypeHost overloads have been deprecated. Since the legacy OSSRH hosts (S01, DEFAULT) were shut down on June 30, 2025, this change aligns properly with current Sonatype infrastructure. No action required.

gradle/libs.versions.toml (3)

38-40: LGTM on new library additions.

Adding dokka-gradle and kotest-assertions-table with proper version refs, and including kotest-assertions-table in the unittest bundle is a clean enhancement.

Also applies to: 55-55


16-16: Kotlin 2.3.0 is officially released (December 16, 2025); verify compatibility with your other dependencies.

Kotlin 2.3.0 is a recent release. Confirm it's compatible with your project's dependencies before merging.


13-13: Android Gradle Plugin 8.13.0 is valid.

AGP 8.13.0 is an officially released version per the Android Developers release notes. No action needed.

Likely an incorrect or invalid review comment.

app/build.gradle.kts (1)

10-15: LGTM! Modern compilerOptions API usage.

Migrating from deprecated kotlinOptions to the experimental compilerOptions API is the correct approach. The @OptIn(ExperimentalKotlinGradlePluginApi::class) annotation properly acknowledges the experimental status. Based on learnings, Config.jvmTarget should be set to JVM 11 for Android compatibility — ensure this is correctly configured in Config.kt.

gradlew.bat (1)

76-76: LGTM! Standard Gradle 9.x wrapper update.

The switch from classpath-based to direct -jar invocation is part of the Gradle 9.x wrapper modernization. This is a generated file and the change is expected.

gradlew (1)

211-214: LGTM! Standard Gradle 9.x wrapper update.

The migration from classpath-based to direct -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" invocation is expected with Gradle 9.x. This simplifies the script by removing CLASSPATH handling.

buildSrc/src/main/kotlin/Config.kt (3)

20-22: LGTM: Version bump to 2.1.1.

The patch version increment is correct and aligns with the PR objectives.


40-41: Android SDK 36 is available and stable. The compileSdk = 36 bump is supported as of January 2026, with the SDK Platform reaching platform stability. No breaking changes are reported in the available documentation.


54-60: The new compiler flag syntax is valid. The -Xwarning-level=DIAGNOSTIC_NAME:disabled format matches the official Kotlin compiler documentation, and the semantic behavior (disabling these specific warnings) is preserved through the :disabled option. No changes needed.

coderabbitai[bot]
coderabbitai bot previously approved these changes Jan 6, 2026
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 40a6429620

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +40 to +42
const val compileSdk = 36
const val targetSdk = compileSdk
const val minSdk = 21
const val minSdk = 23

Choose a reason for hiding this comment

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

P1 Badge Avoid raising minSdk in a patch release

The library-wide Config.minSdk was increased from 21 to 23, and configureAndroid() applies that value to every Android target. Publishing 2.1.1 with this change silently drops API 21–22 support: consumers building apps for those devices will now get manifest/installation failures even though this is only a patch bump. If the goal wasn’t to break compatibility, keep the prior minSdk (or at least bump the major/minor and document the requirement).

Useful? React with 👍 / 👎.

@Nek-12
Copy link
Member Author

Nek-12 commented Jan 7, 2026

Superseded by #21 (minor bump).

@Nek-12 Nek-12 closed this Jan 7, 2026
auto-merge was automatically disabled January 7, 2026 12:08

Pull request was closed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant