Skip to content

Comments

2.2.0#21

Merged
Nek-12 merged 11 commits intomasterfrom
2.2.0
Jan 7, 2026
Merged

2.2.0#21
Nek-12 merged 11 commits intomasterfrom
2.2.0

Conversation

@Nek-12
Copy link
Member

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

Summary

  • bump version to 2.2.0 (minSdk 23 change is a minor bump)
  • update compileSdk to 36 for latest AndroidX requirements
  • fix CI by allowing Android unit tests with no sources to pass
  • maintenance updates (deps, AGENTS, ignore .kotlin, kotest plugin alignment)

Testing

  • JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-23.jdk/Contents/Home ./gradlew detektAll
  • JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-23.jdk/Contents/Home ./gradlew assemble
  • ./gradlew :core:jvmTest
  • JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-23.jdk/Contents/Home ./gradlew :core:testDebugUnitTest --no-configuration-cache

Summary by CodeRabbit

  • New Features

    • Added repository contribution guidelines documentation.
  • Bug Fixes

    • Improved build reliability by adjusting Gradle configuration and test handling.
  • Chores

    • Bumped version to 2.0.
    • Updated dependencies including Kotlin (2.1→2.3), Compose (1.7.6→1.10.0), and other libraries.
    • Updated Android SDK targets (minSdk 21→23, compileSdk 35→36).
    • Updated Gradle wrapper to 9.2.1.
    • Updated copyright year to 2026.

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

@Nek-12 Nek-12 mentioned this pull request Jan 7, 2026
@coderabbitai
Copy link

coderabbitai bot commented Jan 7, 2026

📝 Walkthrough

Walkthrough

The PR updates the project build system with Gradle 9.2.1, increments SDK targets (minSdk 21→23, compileSdk 35→36), bumps the minor version to 2, migrates Kotlin compiler configuration from deprecated kotlinOptions to compilerOptions DSL, updates 13+ dependencies in the version catalog, and simplifies Maven Central publishing configuration.

Changes

Cohort / File(s) Summary
Gradle Wrapper & Distribution
gradle/wrapper/gradle-wrapper.properties, gradlew, gradlew.bat
Upgraded Gradle wrapper from 8.12 to 9.2.1; refactored wrapper invocation from classpath-based to direct JAR execution; added zipStorePath property.
Gradle Properties Configuration
.github/ci-gradle.properties, gradle.properties
Disabled configure-on-demand (set to false with wasmJS incompatibility note); removed android.experimental.additionalArtifactsInModel property.
SDK & Version Configuration
buildSrc/src/main/kotlin/Config.kt
Incremented minorRelease from 1 to 2; updated compileSdk (35→36) and targetSdk; increased minSdk from 21 to 23; refactored Kotlin and JVM compiler arguments (removed wasm flags, updated JVM defaults).
Kotlin Compiler DSL Migration
app/build.gradle.kts, buildSrc/src/main/kotlin/pro.respawn.android-library.gradle.kts, buildSrc/src/main/kotlin/ConfigureMultiplatform.kt
Migrated from kotlinOptions to compilerOptions using ExperimentalKotlinGradlePluginApi; changed wasmJs moduleName to outputModuleName.set() API; added @Suppress("DEPRECATION") to androidTarget.
Publishing & Build Script Simplification
build.gradle.kts
Simplified KotlinMultiplatform() call by removing androidVariantsToPublish; streamlined publishToMavenCentral() to no-arg form; conditionally modified test task failOnNoMatchingTests behavior for Android unit tests; removed keepUnusedLibraries and keepUnusedPlugins from version catalog keep block.
Android Build Configuration
buildSrc/src/main/kotlin/ConfigureAndroid.kt
Removed explicit archivesBaseName override from release buildType in Android library configuration.
Dependency Updates
gradle/libs.versions.toml
Updated 13 core dependencies (atomicfu, compose, kotlin 2.1.0→2.3.0, gradle-android 8.7.3→8.13.0, kotest, dokka, lifecycle, etc.); added turbine 1.0.0; introduced kotest-assertions and kotest-assertions-table libraries; updated unittest bundle.
Documentation & Meta
AGENTS.md, README.md, .gitignore
Added new AGENTS.md with repository guidelines; updated copyright year to 2026; added .kotlin/ directory to .gitignore.
Dependency Update Automation
scripts/update_deps.sh
Introduced new shell script for automating Gradle and version catalog updates with optional version parameter.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • 1.1.0 #5: Multiple overlapping build-system edits across buildSrc/Config.kt, ConfigureMultiplatform.kt, app/build.gradle.kts, and version catalog with similar SDK/configuration constant changes.
  • 2.0.0 #13: Both PRs modify gradle/libs.versions.toml, updating core dependency versions (kotlin, compose, gradle-android, kotest, etc.).
  • 2.0.0-beta02 #10: Both PRs change publishing-related code in build.gradle.kts, modifying publishToMavenCentral and KotlinMultiplatform configuration.

Suggested labels

autorelease

🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Title check ⚠️ Warning The title '2.2.0' only indicates a version number and does not describe the actual changes made in the PR. Use a descriptive title that summarizes the main changes, such as 'Bump to version 2.2.0: update compileSdk and minSdk, dependency updates, and build fixes'.
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.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 2.2.0

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 prepares the project for version 2.2.0 by incorporating a series of crucial maintenance and upgrade tasks. The changes primarily focus on updating Android SDK versions to meet modern requirements, ensuring CI stability by handling Android unit tests more robustly, and bringing various project dependencies and build configurations up to date. These updates aim to enhance the project's compatibility, performance, and maintainability.

Highlights

  • Version Bump: The project version has been updated to 2.2.0, reflecting a minor release due to the minSdk change.
  • Android SDK Updates: compileSdk has been upgraded to 36 and minSdk to 23, aligning with the latest AndroidX requirements.
  • CI Stability Fix: A change was implemented to prevent CI failures for Android unit tests that might not have discoverable sources.
  • Dependency Updates: Numerous project dependencies, including Kotlin, Compose, Gradle, and various plugins, have been updated to their latest versions.
  • Configuration Refinements: Various Gradle and Kotlin compiler configurations have been adjusted for better compatibility, performance, and warning suppression.
  • New Documentation: A new AGENTS.md file has been added, providing repository guidelines for project structure, build commands, testing, and PRs.
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 7, 2026 12:09
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 primarily updates the project's build infrastructure, including upgrading the Gradle wrapper to version 9.2.1, Kotlin to 2.3.0, and numerous other dependencies such as Compose, Kotest, and Android Gradle Plugin versions. Key changes involve migrating jvmTarget configuration from android.kotlinOptions to a dedicated kotlin { compilerOptions { ... } } block in app/build.gradle.kts and pro.respawn.android-library.gradle.kts, and updating Android SDK versions (compileSdk to 36, minSdk to 23). The Gradle wrapper execution logic in gradlew and gradlew.bat was modernized by switching from -classpath to -jar for gradle-wrapper.jar. Compiler arguments were refined, notably changing warning suppression flags and modifying the jvm-default setting from all to no-compatibility, which a reviewer highlighted as a potential binary-breaking change for library consumers that needs careful consideration for a minor version bump. Additionally, org.gradle.configureondemand was set to false in gradle.properties and .github/ci-gradle.properties due to incompatibility with wasmJS, with a reviewer suggesting explicit assignment for clarity. Other changes include removing android.experimental.additionalArtifactsInModel, simplifying Maven publishing configuration, adjusting test filtering for Android unit tests, updating the copyright year in README.md, adding a new AGENTS.md file with repository guidelines, and introducing a scripts/update_deps.sh script for dependency management.

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: 3

🤖 Fix all issues with AI agents
In @buildSrc/src/main/kotlin/Config.kt:
- Around line 40-42: The project bumped minSdk from 21 to 23 (see const val
minSdk) while compileSdk and targetSdk are set to 36, which is a breaking
change; update the release notes/changelog to call out this change explicitly:
state that minSdk is now 23, that devices running Android 5.0–5.1 (Lollipop) are
no longer supported, include the affected symbols (const val minSdk, compileSdk,
targetSdk) for clarity, add a short migration/compatibility note for users (how
to detect or work around unsupported devices) and place the entry under the
breaking changes or upgrade notes for this release.

In @gradle/libs.versions.toml:
- Line 2: The libs.versions.toml entry uses a pre-release "atomicfu =
\"0.30.0-beta\"" which is unsafe for a production 2.2.0 release; update the
atomicfu entry to a stable release (replace "0.30.0-beta" with a known stable
version such as "0.29.0" or the most recent non-beta tag), save the change in
libs.versions.toml, then refresh Gradle dependencies and run the test/build
matrix to verify compatibility (adjust code if any API differences surface).
🧹 Nitpick comments (2)
buildSrc/src/main/kotlin/ConfigureMultiplatform.kt (1)

63-70: The @Suppress("DEPRECATION") is a practical workaround to suppress warnings about androidTarget in your KMP Gradle plugin version. Note that androidTarget remains the current recommended API for Kotlin Multiplatform projects and is not immediately being replaced. However, for longer-term planning, be aware that Google's Android Gradle Library plugin (com.android.kotlin.multiplatform.library) represents the recommended direction for Android-specific configuration in future releases. The jvmTarget is correctly configured to JVM 11, which aligns with Android compatibility requirements.

scripts/update_deps.sh (1)

1-11: Consider adding error handling.

The script lacks set -e to exit on errors. If the first wrapper command fails, the script continues silently. Also, the double wrapper invocation is correct—it's the standard pattern to ensure the wrapper updates itself properly.

♻️ Suggested improvement
 #!/bin/bash
+set -euo pipefail
 
 GRADLE_VER="$1"
 
 if [ -z "$GRADLE_VER" ]; then
     GRADLE_VER="latest"
 fi
 
 ./gradlew wrapper --gradle-version "$GRADLE_VER" --distribution-type bin
 ./gradlew wrapper --gradle-version "$GRADLE_VER" --distribution-type bin
 ./gradlew versionCatalogUpdate --no-configuration-cache
📜 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 2f0ba3d.

⛔ Files ignored due to path filters (1)
  • gradle/wrapper/gradle-wrapper.jar is excluded by !**/*.jar
📒 Files selected for processing (16)
  • .github/ci-gradle.properties
  • .gitignore
  • 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 (2)
📓 Common learnings
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.
📚 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:

  • app/build.gradle.kts
  • buildSrc/src/main/kotlin/ConfigureMultiplatform.kt
  • buildSrc/src/main/kotlin/pro.respawn.android-library.gradle.kts
  • .github/ci-gradle.properties
  • buildSrc/src/main/kotlin/Config.kt
  • gradle.properties
⏰ 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 (21)
.gitignore (1)

163-163: The addition of /.kotlin/ is correct.

The pattern appropriately ignores Kotlin build artifacts at the repository root level. Verification confirms it appears exactly once at line 163, which is the intended behavior. No further action needed.

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

52-57: The outputModuleName.set() API is correct for Kotlin 2.3.0 and aligns with modern Gradle lazy configuration patterns. The jvmTarget is correctly configured to remain at JVM 11 for Android compatibility, as required.

README.md (1)

96-96: LGTM! Routine copyright year update.

The copyright year range has been correctly updated to include 2026.

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

1-13: LGTM! Correct migration to compilerOptions DSL.

The migration from the deprecated kotlinOptions to the new compilerOptions API follows Kotlin Gradle plugin best practices. The @OptIn annotation is correctly applied for the experimental API, and the jvmTarget configuration properly references Config.jvmTarget.

Based on learnings, the jvmTarget value in Config.kt should remain at JVM_11 for Android compatibility, which aligns with the project's requirements.

AGENTS.md (1)

1-28: LGTM! Excellent documentation addition.

This file provides clear, actionable guidance for contributors covering project structure, build commands, testing practices, and commit conventions. The specific examples (e.g., commit message format, test file naming) make expectations explicit and will improve consistency across contributions.

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

19-19: LGTM! Version bump to 2.2.0.

The minor version increment is consistent with the PR objectives.


54-60: LGTM! Simplified compiler warning configuration.

The compiler arguments have been streamlined to use the -Xwarning-level syntax for disabling specific warnings, replacing multiple individual suppressions. This is cleaner and more maintainable.


61-66: No actionable issues found. Verification confirms context receivers are not used anywhere in the codebase, making the absence of the -Xcontext-receivers flag appropriate. The JVM compiler configuration represents the intentional initial settings for this new config file, with -jvm-default=no-compatibility chosen for optimization purposes. No compilation failures or binary compatibility concerns are evident.

app/build.gradle.kts (1)

1-15: LGTM! Consistent migration to compilerOptions DSL.

The migration from kotlinOptions to compilerOptions is correctly implemented using the experimental Kotlin Gradle Plugin API. This change aligns with the same pattern applied in the pro.respawn.android-library convention plugin and follows current best practices for Kotlin Gradle configuration.

The jvmTarget continues to use Config.jvmTarget (JVM_11), maintaining Android compatibility per project requirements.

build.gradle.kts (2)

83-88: Android unit test handling looks correct.

The logic properly distinguishes Android unit tests (e.g., testDebugUnitTest, testReleaseUnitTest) from other test tasks. Setting both filter.isFailOnNoMatchingTests = false and failOnNoDiscoveredTests = false ensures Android modules without test sources won't fail the build.


50-51: Publishing configuration simplified without behavior change.

The publishToMavenCentral() call uses CENTRAL_PORTAL as the default host. Removing the explicit androidVariantsToPublish = listOf("release") is safe—the plugin defaults to publishing the release variant anyway when this parameter is omitted.

gradle/libs.versions.toml (3)

39-40: Good addition of kotest-assertions-table.

Adding table-driven test assertions to the unittest bundle is a solid improvement for data-driven testing patterns.


19-19: Turbine version declared but not configured for use.

The turbine version is declared in [versions] but lacks a corresponding library definition in the [libraries] section. This makes it unusable in the project. Either remove the unused version declaration or add the library definition and include it in the appropriate bundle (e.g., unittest if intended for Flow testing).

Wait, let me reconsider - the issue is accurately identified but my classification may be off. Let me revise:

Turbine version declared but not configured for use.

The turbine version is declared in [versions] but lacks a corresponding library definition in the [libraries] section. This makes it unusable in the project. Either remove the unused version declaration or add the library definition and include it in the appropriate bundle (e.g., unittest if intended for Flow testing).

Likely an incorrect or invalid review comment.


16-16: Kotlin version bump to 2.3.0 includes breaking changes—verify compatibility.

Kotlin 2.3.0 removes support for language versions older than 2.0, requires Kotlin Multiplatform Android migration if applicable, and introduces AGP 9.0.0+ compatibility requirements. Confirm this codebase doesn't rely on deprecated features before proceeding.

.github/ci-gradle.properties (1)

9-10: Configure-on-demand disabled for wasmJS compatibility.

Good documentation of the wasmJS incompatibility reason. This is the correct approach for CI builds targeting multiplatform including Wasm.

gradlew.bat (1)

76-76: Updated to modern Gradle wrapper invocation.

The change from CLASSPATH-based execution to direct -jar invocation aligns with Gradle 9.x wrapper conventions. This is the expected format for the updated wrapper.

gradle.properties (2)

9-10: Configure-on-demand disabled consistently.

Good that both local and CI properties now disable configure-on-demand for wasmJS compatibility. The comment documents the reasoning.


21-22: Local vs CI property differences are intentional.

Note: android.disableResourceValidation=true and org.gradle.daemon=true here differ from CI (where they're false). This is appropriate—local development benefits from faster builds with daemon and skipped validation, while CI needs stricter checks.

gradlew (3)

4-4: LGTM: Standard copyright template update.

The copyright year range simplification is part of the Gradle 9.x wrapper template.


206-206: LGTM: Documentation clarification.

The comment update improves clarity about environment variable handling without changing behavior.


213-213: LGTM: Standard Gradle 9.x invocation pattern.

The switch from classpath-based invocation to direct jar invocation (-jar) is the correct approach for Gradle 9.2.1. This simplifies path handling and aligns with the modern Gradle wrapper template.

@Nek-12 Nek-12 merged commit da60a72 into master Jan 7, 2026
5 checks passed
@Nek-12 Nek-12 deleted the 2.2.0 branch January 7, 2026 12:36
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