diff --git a/CHECK.md b/CHECK.md new file mode 100644 index 00000000..f85b0510 --- /dev/null +++ b/CHECK.md @@ -0,0 +1,36 @@ +# Check before PR + +### Run all checks at once: + +```bash +./check.sh +``` + +### Run checks individually + +- dependencyGuard +```bash +./gradlew dependencyGuard +``` + +- spotless +```bash +./gradlew spotlessCheck --init-script gradle/init.gradle.kts +``` + +- lint +```bash +./gradlew lintDebug +``` + +## Update baselines + +- dependencyGuard +```bash +./gradlew dependencyGuardBaseline +``` + +- spotless +```bash +./gradlew spotlessApply --init-script gradle/init.gradle.kts +``` diff --git a/app/dependencies/releaseRuntimeClasspath.txt b/app/dependencies/releaseRuntimeClasspath.txt index 4f3ca696..9968d27c 100644 --- a/app/dependencies/releaseRuntimeClasspath.txt +++ b/app/dependencies/releaseRuntimeClasspath.txt @@ -10,9 +10,9 @@ androidx.arch.core:core-common:2.2.0 androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.browser:browser:1.8.0 -androidx.collection:collection-jvm:1.4.5 -androidx.collection:collection-ktx:1.4.5 -androidx.collection:collection:1.4.5 +androidx.collection:collection-jvm:1.5.0 +androidx.collection:collection-ktx:1.5.0 +androidx.collection:collection:1.5.0 androidx.compose.animation:animation-android:1.7.8 androidx.compose.animation:animation-core-android:1.7.8 androidx.compose.animation:animation-core:1.7.8 @@ -37,24 +37,24 @@ androidx.compose.material:material-icons-extended:1.7.8 androidx.compose.material:material-ripple-android:1.7.8 androidx.compose.material:material-ripple:1.7.8 androidx.compose.material:material:1.7.8 -androidx.compose.runtime:runtime-android:1.7.8 -androidx.compose.runtime:runtime-saveable-android:1.7.8 -androidx.compose.runtime:runtime-saveable:1.7.8 -androidx.compose.runtime:runtime:1.7.8 -androidx.compose.ui:ui-android:1.7.8 -androidx.compose.ui:ui-geometry-android:1.7.8 -androidx.compose.ui:ui-geometry:1.7.8 -androidx.compose.ui:ui-graphics-android:1.7.8 -androidx.compose.ui:ui-graphics:1.7.8 -androidx.compose.ui:ui-text-android:1.7.8 -androidx.compose.ui:ui-text:1.7.8 -androidx.compose.ui:ui-tooling-preview-android:1.7.8 -androidx.compose.ui:ui-tooling-preview:1.7.8 -androidx.compose.ui:ui-unit-android:1.7.8 -androidx.compose.ui:ui-unit:1.7.8 -androidx.compose.ui:ui-util-android:1.7.8 -androidx.compose.ui:ui-util:1.7.8 -androidx.compose.ui:ui:1.7.8 +androidx.compose.runtime:runtime-android:1.8.2 +androidx.compose.runtime:runtime-saveable-android:1.8.2 +androidx.compose.runtime:runtime-saveable:1.8.2 +androidx.compose.runtime:runtime:1.8.2 +androidx.compose.ui:ui-android:1.8.2 +androidx.compose.ui:ui-geometry-android:1.8.2 +androidx.compose.ui:ui-geometry:1.8.2 +androidx.compose.ui:ui-graphics-android:1.8.2 +androidx.compose.ui:ui-graphics:1.8.2 +androidx.compose.ui:ui-text-android:1.8.2 +androidx.compose.ui:ui-text:1.8.2 +androidx.compose.ui:ui-tooling-preview-android:1.8.2 +androidx.compose.ui:ui-tooling-preview:1.8.2 +androidx.compose.ui:ui-unit-android:1.8.2 +androidx.compose.ui:ui-unit:1.8.2 +androidx.compose.ui:ui-util-android:1.8.2 +androidx.compose.ui:ui-util:1.8.2 +androidx.compose.ui:ui:1.8.2 androidx.compose:compose-bom:2025.02.00 androidx.concurrent:concurrent-futures-ktx:1.1.0 androidx.concurrent:concurrent-futures:1.1.0 @@ -77,44 +77,45 @@ androidx.datastore:datastore-preferences-proto:1.1.3 androidx.datastore:datastore-preferences:1.1.3 androidx.datastore:datastore:1.1.3 androidx.drawerlayout:drawerlayout:1.0.0 -androidx.emoji2:emoji2-views-helper:1.3.0 -androidx.emoji2:emoji2:1.3.0 +androidx.emoji2:emoji2-views-helper:1.4.0 +androidx.emoji2:emoji2:1.4.0 androidx.exifinterface:exifinterface:1.3.7 androidx.fragment:fragment:1.5.4 androidx.graphics:graphics-path:1.0.1 -androidx.hilt:hilt-common:1.2.0 -androidx.hilt:hilt-navigation-compose:1.2.0 -androidx.hilt:hilt-navigation:1.2.0 -androidx.hilt:hilt-work:1.2.0 +androidx.hilt:hilt-common:1.3.0 +androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0 +androidx.hilt:hilt-lifecycle-viewmodel:1.3.0 +androidx.hilt:hilt-navigation-compose:1.3.0 +androidx.hilt:hilt-work:1.3.0 androidx.interpolator:interpolator:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.9.0-alpha11 -androidx.lifecycle:lifecycle-common-jvm:2.9.0-alpha11 -androidx.lifecycle:lifecycle-common:2.9.0-alpha11 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.9.0-alpha11 -androidx.lifecycle:lifecycle-livedata-core:2.9.0-alpha11 -androidx.lifecycle:lifecycle-livedata:2.9.0-alpha11 -androidx.lifecycle:lifecycle-process:2.9.0-alpha11 -androidx.lifecycle:lifecycle-runtime-android:2.9.0-alpha11 -androidx.lifecycle:lifecycle-runtime-compose-android:2.9.0-alpha11 -androidx.lifecycle:lifecycle-runtime-compose:2.9.0-alpha11 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.9.0-alpha11 -androidx.lifecycle:lifecycle-runtime-ktx:2.9.0-alpha11 -androidx.lifecycle:lifecycle-runtime:2.9.0-alpha11 -androidx.lifecycle:lifecycle-service:2.9.0-alpha11 -androidx.lifecycle:lifecycle-viewmodel-android:2.9.0-alpha11 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.9.0-alpha11 -androidx.lifecycle:lifecycle-viewmodel-compose:2.9.0-alpha11 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.0-alpha11 -androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.9.0-alpha11 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.0-alpha11 -androidx.lifecycle:lifecycle-viewmodel:2.9.0-alpha11 +androidx.lifecycle:lifecycle-common-java8:2.9.1 +androidx.lifecycle:lifecycle-common-jvm:2.9.1 +androidx.lifecycle:lifecycle-common:2.9.1 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.9.1 +androidx.lifecycle:lifecycle-livedata-core:2.9.1 +androidx.lifecycle:lifecycle-livedata:2.9.1 +androidx.lifecycle:lifecycle-process:2.9.1 +androidx.lifecycle:lifecycle-runtime-android:2.9.1 +androidx.lifecycle:lifecycle-runtime-compose-android:2.9.1 +androidx.lifecycle:lifecycle-runtime-compose:2.9.1 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.9.1 +androidx.lifecycle:lifecycle-runtime-ktx:2.9.1 +androidx.lifecycle:lifecycle-runtime:2.9.1 +androidx.lifecycle:lifecycle-service:2.9.1 +androidx.lifecycle:lifecycle-viewmodel-android:2.9.1 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.9.1 +androidx.lifecycle:lifecycle-viewmodel-compose:2.9.1 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.1 +androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.9.1 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.1 +androidx.lifecycle:lifecycle-viewmodel:2.9.1 androidx.loader:loader:1.0.0 -androidx.navigation:navigation-common-android:2.9.0-alpha07 -androidx.navigation:navigation-common:2.9.0-alpha07 -androidx.navigation:navigation-compose-android:2.9.0-alpha07 -androidx.navigation:navigation-compose:2.9.0-alpha07 -androidx.navigation:navigation-runtime-android:2.9.0-alpha07 -androidx.navigation:navigation-runtime:2.9.0-alpha07 +androidx.navigation:navigation-common-android:2.9.6 +androidx.navigation:navigation-common:2.9.6 +androidx.navigation:navigation-compose-android:2.9.6 +androidx.navigation:navigation-compose:2.9.6 +androidx.navigation:navigation-runtime-android:2.9.6 +androidx.navigation:navigation-runtime:2.9.6 androidx.profileinstaller:profileinstaller:1.4.1 androidx.resourceinspection:resourceinspection-annotation:1.0.1 androidx.room:room-common-jvm:2.7.0-rc01 @@ -122,9 +123,11 @@ androidx.room:room-common:2.7.0-rc01 androidx.room:room-ktx:2.7.0-rc01 androidx.room:room-runtime-android:2.7.0-rc01 androidx.room:room-runtime:2.7.0-rc01 -androidx.savedstate:savedstate-android:1.3.0-alpha09 -androidx.savedstate:savedstate-ktx:1.3.0-alpha09 -androidx.savedstate:savedstate:1.3.0-alpha09 +androidx.savedstate:savedstate-android:1.3.0 +androidx.savedstate:savedstate-compose-android:1.3.0 +androidx.savedstate:savedstate-compose:1.3.0 +androidx.savedstate:savedstate-ktx:1.3.0 +androidx.savedstate:savedstate:1.3.0 androidx.sqlite:sqlite-android:2.5.0-rc01 androidx.sqlite:sqlite-framework-android:2.5.0-rc01 androidx.sqlite:sqlite-framework:2.5.0-rc01 @@ -142,10 +145,10 @@ androidx.window:window:1.4.0-beta02 androidx.work:work-runtime:2.10.0 com.google.accompanist:accompanist-drawablepainter:0.36.0 com.google.code.findbugs:jsr305:3.0.2 -com.google.dagger:dagger-lint-aar:2.55 -com.google.dagger:dagger:2.55 -com.google.dagger:hilt-android:2.55 -com.google.dagger:hilt-core:2.55 +com.google.dagger:dagger-lint-aar:2.57.2 +com.google.dagger:dagger:2.57.2 +com.google.dagger:hilt-android:2.57.2 +com.google.dagger:hilt-core:2.57.2 com.google.guava:listenablefuture:1.0 com.jakewharton.timber:timber:5.0.1 com.squareup.okhttp3:okhttp:4.12.0 @@ -191,10 +194,10 @@ org.jetbrains.compose.ui:ui-util:1.7.3 org.jetbrains.compose.ui:ui:1.7.3 org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.9.22 org.jetbrains.kotlin:kotlin-parcelize-runtime:1.9.22 -org.jetbrains.kotlin:kotlin-stdlib-common:2.1.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.1.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.10 -org.jetbrains.kotlin:kotlin-stdlib:2.1.10 +org.jetbrains.kotlin:kotlin-stdlib-common:2.2.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.21 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.21 +org.jetbrains.kotlin:kotlin-stdlib:2.2.21 org.jetbrains.kotlinx:atomicfu-jvm:0.23.2 org.jetbrains.kotlinx:atomicfu:0.23.2 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.1 diff --git a/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Android.kt b/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Android.kt index fa6b667c..60169d1e 100644 --- a/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Android.kt +++ b/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Android.kt @@ -20,12 +20,6 @@ fun Project.configureAndroid() { compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 - isCoreLibraryDesugaringEnabled = true - } - - val libs = extensions.getByType().named("libs") - dependencies { - coreLibraryDesugaring(libs.findLibrary("android.desugar.jdk").get()) } } } diff --git a/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Dependencies.kt b/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Dependencies.kt index b12590ef..5692de16 100644 --- a/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Dependencies.kt +++ b/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Dependencies.kt @@ -23,10 +23,6 @@ fun DependencyHandler.compileOnly(dependencyNotation: Any): Dependency? { return add("compileOnly", dependencyNotation) } -fun DependencyHandler.coreLibraryDesugaring(dependencyNotation: Any): Dependency? { - return add("coreLibraryDesugaring", dependencyNotation) -} - fun DependencyHandler.project( path: String, configuration: String? = null, diff --git a/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Versions.kt b/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Versions.kt index dbc3c205..f1ca74e8 100644 --- a/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Versions.kt +++ b/build-logic/convention/src/main/kotlin/soup/movie/buildlogic/Versions.kt @@ -2,6 +2,6 @@ package soup.movie.buildlogic object Versions { const val minSdk = 26 - const val compileSdk = 35 + const val compileSdk = 36 const val targetSdk = 35 } diff --git a/check.sh b/check.sh new file mode 100755 index 00000000..deaec1e9 --- /dev/null +++ b/check.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Check script for PR submission +# Validates dependencies, code formatting, lint. + +# Exit immediately if any command fails +set -e + +echo "Starting check validations..." +echo "" + +# Verify dependency changes +echo "🔍 [1/3] Checking dependency guard..." +./gradlew dependencyGuard +echo "✓ Dependency guard check passed" +echo "" + +# Verify code formatting +echo "🔍 [2/3] Checking code formatting..." +./gradlew spotlessCheck --init-script gradle/init.gradle.kts +echo "✓ Code formatting check passed" +echo "" + +# Static analysis and lint checks +echo "🔍 [3/3] Running lint checks..." +./gradlew lintDebug +echo "✓ Lint check passed" +echo "" + +echo "✅ All checks passed successfully!" diff --git a/feature/search/impl/src/main/java/soup/movie/feature/search/impl/SearchScreen.kt b/feature/search/impl/src/main/java/soup/movie/feature/search/impl/SearchScreen.kt index 2679e263..63615896 100644 --- a/feature/search/impl/src/main/java/soup/movie/feature/search/impl/SearchScreen.kt +++ b/feature/search/impl/src/main/java/soup/movie/feature/search/impl/SearchScreen.kt @@ -121,13 +121,14 @@ private fun SearchTopBar( windowInsets: WindowInsets = TopAppBarDefaults.windowInsets, ) { Surface( - modifier = modifier.windowInsetsPadding(windowInsets) + modifier = modifier + .windowInsetsPadding(windowInsets) .fillMaxWidth() .height(56.dp), color = MovieTheme.colorScheme.surfaceContainerLowest, ) { val focusManager = LocalFocusManager.current - val focusRequester = FocusRequester() + val focusRequester = remember { FocusRequester() } LaunchedEffect(Unit) { focusRequester.requestFocus() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 27d06991..c3d6dc75 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,17 +1,17 @@ [versions] # Android -androidGradlePlugin = "8.9.0" +androidGradlePlugin = "8.13.1" # Kotlin -kotlin = "2.1.10" +kotlin = "2.2.21" coroutines = "1.10.1" serialization = "1.8.0" -ksp = "2.1.10-1.0.30" +ksp = "2.3.2" # Dagger -dagger = "2.55" -androidxhilt = "1.2.0" +dagger = "2.57.2" +androidxhilt = "1.3.0" # AndroidX androidx-activity = "1.10.1" @@ -21,7 +21,7 @@ androidx-browser = "1.8.0" androidx-core = "1.16.0-alpha02" androidx-datastore = "1.1.3" androidx-lifecycle = "2.9.0-alpha11" -androidx-navigation = "2.9.0-alpha07" +androidx-navigation = "2.9.6" androidx-profileinstaller = "1.4.1" androidx-room = "2.7.0-rc01" androidx-startup = "1.2.0" @@ -43,9 +43,6 @@ timber = "5.0.1" [libraries] -# Android -android-desugar-jdk = "com.android.tools:desugar_jdk_libs:2.1.5" - # Kotlin kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 65de5e72..39899c7f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Sat May 18 19:55:32 KST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists