Skip to content

Commit 81935fb

Browse files
committed
feat: add task to validate Compose version compatibility
1 parent 22a4d34 commit 81935fb

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package io.github.composegears.valkyrie.task
2+
3+
import org.gradle.api.DefaultTask
4+
import org.gradle.api.GradleException
5+
import org.gradle.api.artifacts.ArtifactCollection
6+
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
7+
import org.gradle.api.provider.Property
8+
import org.gradle.api.tasks.Input
9+
import org.gradle.api.tasks.Internal
10+
import org.gradle.api.tasks.TaskAction
11+
12+
abstract class CheckComposeVersionCompatibility : DefaultTask() {
13+
@get:Internal
14+
abstract val artifactCollection: Property<ArtifactCollection>
15+
16+
@get:Input
17+
abstract val expectedComposeVersion: Property<String>
18+
19+
@TaskAction
20+
fun checkVersions() {
21+
val expectedVersion = expectedComposeVersion.get()
22+
23+
val composeDependencies = artifactCollection.get().artifacts
24+
.mapNotNull { it.id.componentIdentifier as? ModuleComponentIdentifier }
25+
.filter { it.group.startsWith("org.jetbrains.compose") }
26+
27+
val invalidVersions = composeDependencies.filter { it.version != expectedVersion }
28+
29+
if (invalidVersions.isNotEmpty()) {
30+
val errorMessage = buildString {
31+
appendLine("Found org.jetbrains.compose dependencies with version != $expectedVersion:")
32+
invalidVersions.forEach {
33+
appendLine(" - ${it.group}:${it.module}:${it.version}")
34+
}
35+
}
36+
throw GradleException(errorMessage)
37+
}
38+
logger.lifecycle("✅ All compose dependencies have the correct version $expectedVersion")
39+
}
40+
}

tools/idea-plugin/build.gradle.kts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import io.github.composegears.valkyrie.task.CheckComposeVersionCompatibility
12
import org.jetbrains.changelog.Changelog
23
import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType
34
import org.jetbrains.intellij.platform.gradle.tasks.VerifyPluginTask.FailureLevel
@@ -131,4 +132,15 @@ tasks {
131132
prepareSandbox {
132133
exclude { "coroutines" in it.name }
133134
}
135+
check {
136+
dependsOn("checkComposeVersionCompatibility")
137+
}
138+
}
139+
140+
tasks.register<CheckComposeVersionCompatibility>("checkComposeVersionCompatibility") {
141+
val runtimeClasspath = configurations.named("runtimeClasspath")
142+
artifactCollection = provider {
143+
runtimeClasspath.get().incoming.artifactView { lenient(true) }.artifacts
144+
}
145+
expectedComposeVersion = libs.versions.compose
134146
}

0 commit comments

Comments
 (0)