Skip to content

Commit 2f37b9f

Browse files
authored
Merge pull request #70 from ikarenkov/agp-gradle-upgrade
Updated gradle, agp, kotlin
2 parents d7b5300 + a50f6cc commit 2f37b9f

File tree

16 files changed

+161
-61
lines changed

16 files changed

+161
-61
lines changed

.github/workflows/pr_checks.yml

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
name: PR checks
22
run-name: Running static code analysis and unit tests
33
on:
4-
push:
5-
branches:
6-
- "dev"
74
pull_request:
85
branches:
96
- "dev"
@@ -65,4 +62,72 @@ jobs:
6562
uses: mikepenz/action-junit-report@v4
6663
if: always()
6764
with:
68-
report_paths: '**/build/test-results/**/TEST-*.xml'
65+
report_paths: '**/build/test-results/**/TEST-*.xml'
66+
67+
dependency-guard-check:
68+
name: Dependency Guard Check
69+
runs-on: ubuntu-latest
70+
permissions:
71+
pull-requests: write
72+
73+
steps:
74+
- uses: actions/checkout@v4
75+
76+
- name: "Set up JDK 17"
77+
uses: actions/setup-java@v4
78+
with:
79+
java-version: "17"
80+
distribution: "temurin"
81+
cache: gradle
82+
83+
- name: Setup Gradle
84+
uses: gradle/actions/setup-gradle@v3
85+
86+
- name: Run Dependency Guard
87+
id: dependency-guard
88+
run: |
89+
if ./gradlew modo-compose:dependencyGuard; then
90+
echo "result=success" >> $GITHUB_OUTPUT
91+
else
92+
echo "result=failure" >> $GITHUB_OUTPUT
93+
exit 1
94+
fi
95+
continue-on-error: true
96+
97+
- name: Comment on PR if Dependency Guard fails
98+
if: steps.dependency-guard.outputs.result == 'failure'
99+
uses: marocchino/sticky-pull-request-comment@v2
100+
with:
101+
header: dependency-guard
102+
recreate: true
103+
message: |
104+
## 🚨 Dependency Guard Check Failed
105+
106+
The dependency guard check has detected changes in your dependencies that need review.
107+
108+
### What to do:
109+
1. **Review the dependency changes**: Check what dependencies were added, updated, or removed
110+
2. **Check release notes**: For any updated dependencies, review their release notes for breaking changes, security fixes, or important updates
111+
3. **Test thoroughly**: Ensure the dependency changes don't break existing functionality
112+
4. **Update the baseline**: If the dependency changes are intentional and safe, update the dependency guard baseline by running:
113+
```bash
114+
./gradlew modo-compose:dependencyGuardBaseline
115+
```
116+
117+
### More information:
118+
- View the full dependency guard report in the workflow logs
119+
- The dependency guard plugin helps prevent unintended dependency changes
120+
- Always review dependency updates for security and compatibility implications
121+
122+
Please address these issues before merging this PR.
123+
124+
- name: Remove dependency guard comment if check passes
125+
if: steps.dependency-guard.outputs.result == 'success'
126+
uses: marocchino/sticky-pull-request-comment@v2
127+
with:
128+
header: dependency-guard
129+
delete: true
130+
131+
- name: Fail job if Dependency Guard failed
132+
if: steps.dependency-guard.outputs.result == 'failure'
133+
run: exit 1

build-logic/convention/build.gradle.kts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
12
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
23

34
plugins {
@@ -13,8 +14,8 @@ java {
1314
targetCompatibility = JavaVersion.VERSION_17
1415
}
1516
tasks.withType<KotlinCompile>().configureEach {
16-
kotlinOptions {
17-
jvmTarget = JavaVersion.VERSION_17.toString()
17+
compilerOptions {
18+
jvmTarget.set(JvmTarget.JVM_17)
1819
}
1920
}
2021

@@ -23,6 +24,7 @@ dependencies {
2324
compileOnly(libs.android.tools.common)
2425
compileOnly(libs.kotlin.gradlePlugin)
2526
compileOnly(libs.detektPlugin)
27+
compileOnly(libs.compose.compile.gradlePlugin)
2628
// workaround for https://github.com/gradle/gradle/issues/15383
2729
compileOnly(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
2830
}
@@ -41,6 +43,14 @@ gradlePlugin {
4143
id = "modo-android-app"
4244
implementationClass = "com.github.terrakok.AndroidAppPlugin"
4345
}
46+
register("modo-jetpack-compose-library") {
47+
id = "modo-jetpack-compose-library"
48+
implementationClass = "com.github.terrakok.JetpackComposeLibraryPlugin"
49+
}
50+
register("modo-jetpack-compose-app") {
51+
id = "modo-jetpack-compose-app"
52+
implementationClass = "com.github.terrakok.JetpackComposeAppPlugin"
53+
}
4454
register("modo-publishing") {
4555
id = "modo-publishing"
4656
implementationClass = "com.github.terrakok.PublishingPlugin"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.github.terrakok
2+
3+
import com.android.build.api.dsl.ApplicationExtension
4+
import org.gradle.api.Plugin
5+
import org.gradle.api.Project
6+
import org.gradle.kotlin.dsl.getByType
7+
8+
class JetpackComposeAppPlugin : Plugin<Project> {
9+
override fun apply(project: Project) {
10+
with(project) {
11+
withVersionCatalog {
12+
pluginManager.apply(libs.plugins.compose.compiler.get().pluginId)
13+
}
14+
configureJetpackCompose(extensions.getByType<ApplicationExtension>())
15+
}
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.github.terrakok
2+
3+
import com.android.build.gradle.LibraryExtension
4+
import org.gradle.api.Plugin
5+
import org.gradle.api.Project
6+
import org.gradle.kotlin.dsl.getByType
7+
8+
class JetpackComposeLibraryPlugin : Plugin<Project> {
9+
override fun apply(project: Project) {
10+
with(project) {
11+
withVersionCatalog {
12+
pluginManager.apply(libs.plugins.compose.compiler.get().pluginId)
13+
}
14+
configureJetpackCompose(extensions.getByType<LibraryExtension>())
15+
}
16+
}
17+
}

build-logic/convention/src/main/kotlin/com/github/terrakok/KotlinAndroid.kt

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,18 @@ import org.gradle.api.plugins.JavaPluginExtension
77
import org.gradle.kotlin.dsl.configure
88
import org.gradle.kotlin.dsl.provideDelegate
99
import org.gradle.kotlin.dsl.withType
10+
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension
11+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
12+
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
1013
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
1114

12-
private val JAVA_VERSION = JavaVersion.VERSION_1_8
15+
private val JAVA_VERSION = JavaVersion.VERSION_11
16+
private val JVM_TARGET = JvmTarget.JVM_11
1317

1418
/**
1519
* Configure base Kotlin with Android options
1620
*/
17-
fun Project.configureKotlinAndroid(
21+
internal fun Project.configureKotlinAndroid(
1822
commonExtension: CommonExtension<*, *, *, *, *, *>,
1923
) {
2024
commonExtension.apply {
@@ -36,23 +40,14 @@ fun Project.configureKotlinAndroid(
3640
configureKotlin()
3741
}
3842

39-
fun Project.configureJetpackCompose(
43+
internal fun Project.configureJetpackCompose(
4044
commonExtension: CommonExtension<*, *, *, *, *, *>,
4145
) {
4246
commonExtension.apply {
4347
buildFeatures.compose = true
44-
withVersionCatalog {
45-
composeOptions.kotlinCompilerExtensionVersion = libs.versions.kotlinCompilerExtension.get()
46-
}
4748
}
48-
tasks.withType<KotlinCompile>().configureEach {
49-
kotlinOptions {
50-
freeCompilerArgs = freeCompilerArgs + listOf(
51-
"-P",
52-
"plugin:androidx.compose.compiler.plugins.kotlin:stabilityConfigurationPath=" +
53-
"${rootProject.projectDir.absoluteFile}/config/compose/compose_compiler_config.conf"
54-
)
55-
}
49+
configure<ComposeCompilerGradlePluginExtension> {
50+
stabilityConfigurationFile.set(rootProject.layout.projectDirectory.file("config/compose/compose_compiler_config.conf"))
5651
}
5752
}
5853

@@ -75,15 +70,15 @@ internal fun Project.configureKotlinJvm() {
7570
*/
7671
private fun Project.configureKotlin() {
7772
// Use withType to workaround https://youtrack.jetbrains.com/issue/KT-55947
78-
tasks.withType<KotlinCompile>().configureEach {
79-
kotlinOptions {
73+
configure<KotlinAndroidProjectExtension>() {
74+
compilerOptions {
8075
// Set JVM target to 8
81-
jvmTarget = JAVA_VERSION.toString()
76+
jvmTarget.set(JVM_TARGET)
8277
// Treat all Kotlin warnings as errors (disabled by default)
8378
// Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties
8479
val warningsAsErrors: String? by project
85-
allWarningsAsErrors = warningsAsErrors.toBoolean()
86-
freeCompilerArgs = freeCompilerArgs + listOf(
80+
allWarningsAsErrors.set(warningsAsErrors.toBoolean())
81+
freeCompilerArgs.addAll(
8782
"-opt-in=kotlin.RequiresOptIn",
8883
// Enable experimental coroutines APIs, including Flow
8984
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
plugins {
22
alias(libs.plugins.android.library) apply false
33
alias(libs.plugins.android.application) apply false
4+
alias(libs.plugins.compose.compiler) apply false
45
alias(libs.plugins.kotlin.android) apply false
56
alias(libs.plugins.kotlin.parcelize) apply false
67
alias(libs.plugins.detekt) apply false
@@ -14,7 +15,7 @@ plugins {
1415

1516
tasks.named<Wrapper>("wrapper") {
1617
distributionType = Wrapper.DistributionType.ALL
17-
gradleVersion = "8.7"
18+
gradleVersion = "9.1.0"
1819
}
1920

2021
// PUBLISHING './gradlew clean modo-compose:bundleReleaseAar modo-compose:publishAllPublicationsToSonatypeRepository'

gradle/libs.versions.toml

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
composeWheelPicker = "1.0.0-beta05"
33
leakcanaryAndroid = "2.14"
44
modo = "0.10.1"
5-
androidGradlePlugin = "8.4.0"
5+
androidGradlePlugin = "8.13.0"
66
detektComposeVersion = "0.3.20"
77
detektVersion = "1.23.6"
88
junit = "4.13.2"
@@ -15,7 +15,7 @@ androidxFragment = "1.5.7"
1515
androidxAppCompat = "1.6.1"
1616
androidxJunit = "1.1.5"
1717
androidTools = "31.4.0"
18-
kotlin = "1.9.23"
18+
kotlin = "2.0.21"
1919
kotlinCompilerExtension = "1.5.12"
2020
minSdk = "21"
2121
compileSdk = "34"
@@ -56,19 +56,23 @@ android-tools-common = { group = "com.android.tools", name = "common", version.r
5656
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidxJunit" }
5757
kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
5858
detektPlugin = { group = "io.gitlab.arturbosch.detekt", name = "detekt-gradle-plugin", version.ref = "detektVersion" }
59+
compose-compile-gradlePlugin = { group = "org.jetbrains.kotlin.plugin.compose", name = "org.jetbrains.kotlin.plugin.compose.gradle.plugin", version.ref = "kotlin" }
5960

6061
koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = "koin" }
6162
koin-compose = { group = "io.insert-koin", name = "koin-androidx-compose", version.ref = "koin" }
6263
[plugins]
63-
modo-detekt = { id = "modo-detekt", version = "unspecified" }
64-
modo-android-library = { id = "modo-android-library", version = "unspecified" }
65-
modo-android-app = { id = "modo-android-app", version = "unspecified" }
66-
modo-publishing = { id = "modo-publishing", version = "unspecified" }
67-
modo-collectSarif = { id = "modo-collect-sarif", version = "unspecified" }
64+
modo-detekt = { id = "modo-detekt" }
65+
modo-android-library = { id = "modo-android-library" }
66+
modo-android-app = { id = "modo-android-app" }
67+
modo-publishing = { id = "modo-publishing" }
68+
modo-compose-app = { id = "modo-jetpack-compose-app" }
69+
modo-compose-library = { id = "modo-jetpack-compose-library" }
70+
modo-collectSarif = { id = "modo-collect-sarif" }
6871

6972
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detektVersion" }
7073
android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }
7174
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
75+
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
7276
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
7377
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
7478
dependencyGuard = { id = "com.dropbox.dependency-guard", version = "0.5.0" }

gradle/wrapper/gradle-wrapper.jar

243 Bytes
Binary file not shown.

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

gradlew

Lines changed: 5 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)