Skip to content

Commit a09d619

Browse files
authored
Implement unstable only option for the stabilityValidation gradle task (#145)
1 parent 5fcbec2 commit a09d619

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

stability-gradle/api/stability-gradle.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public abstract class com/skydoves/compose/stability/gradle/StabilityDumpTask :
4646
public abstract fun getStabilityConfigurationFiles ()Lorg/gradle/api/provider/ListProperty;
4747
public abstract fun getStabilityFileSuffix ()Lorg/gradle/api/provider/Property;
4848
public abstract fun getStabilityInputFiles ()Lorg/gradle/api/file/ConfigurableFileCollection;
49+
public abstract fun getUnstableOnly ()Lorg/gradle/api/provider/Property;
4950
}
5051

5152
public abstract class com/skydoves/compose/stability/gradle/StabilityValidationConfig {
@@ -61,5 +62,6 @@ public abstract class com/skydoves/compose/stability/gradle/StabilityValidationC
6162
public final fun getOutputDir ()Lorg/gradle/api/file/DirectoryProperty;
6263
public final fun getQuietCheck ()Lorg/gradle/api/provider/Property;
6364
public final fun getStabilityConfigurationFiles ()Lorg/gradle/api/provider/ListProperty;
65+
public final fun getUnstableOnly ()Lorg/gradle/api/provider/Property;
6466
}
6567

stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityAnalyzerExtension.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,15 @@ public abstract class StabilityValidationConfig @Inject constructor(
182182
public val allowMissingBaseline: Property<Boolean> =
183183
objects.property(Boolean::class.javaObjectType).convention(false)
184184

185+
/**
186+
* When true, only unstable composables (not skippable) are included in the baseline file.
187+
* This reduces baseline file size in large projects and lets you focus on fixing stability issues.
188+
*
189+
* Default: false
190+
*/
191+
public val unstableOnly: Property<Boolean> =
192+
objects.property(Boolean::class.javaObjectType).convention(false)
193+
185194
/**
186195
* List of paths to stability configuration files.
187196
*

stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityAnalyzerGradlePlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin {
9797
ignoredPackages.set(extension.stabilityValidation.ignoredPackages)
9898
ignoredClasses.set(extension.stabilityValidation.ignoredClasses)
9999
stabilityConfigurationFiles.set(extension.stabilityValidation.stabilityConfigurationFiles)
100+
unstableOnly.set(extension.stabilityValidation.unstableOnly)
100101
}
101102

102103
// Register stability check task
@@ -164,6 +165,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin {
164165
ignoredClasses.set(extension.stabilityValidation.ignoredClasses)
165166
stabilityFileSuffix.set(variant.name)
166167
stabilityConfigurationFiles.set(extension.stabilityValidation.stabilityConfigurationFiles)
168+
unstableOnly.set(extension.stabilityValidation.unstableOnly)
167169
}
168170

169171
// Register stability check task

stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityDumpTask.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ public abstract class StabilityDumpTask : DefaultTask() {
7979
@get:PathSensitive(PathSensitivity.RELATIVE)
8080
public abstract val stabilityConfigurationFiles: ListProperty<RegularFile>
8181

82+
/**
83+
* When true, only unstable composables (not skippable) are included in the baseline file.
84+
*/
85+
@get:Input
86+
public abstract val unstableOnly: Property<Boolean>
87+
8288
init {
8389
group = "verification"
8490
description = "Dump composable stability information to stability file"
@@ -117,7 +123,12 @@ public abstract class StabilityDumpTask : DefaultTask() {
117123
}
118124

119125
val resolved = applyStabilityConfiguration(filtered, stableTypeMatchers)
120-
writeStabilityFile(outputFile, resolved)
126+
val finalEntries = if (unstableOnly.get()) {
127+
resolved.filter { !it.skippable }
128+
} else {
129+
resolved
130+
}
131+
writeStabilityFile(outputFile, finalEntries)
121132

122133
logger.lifecycle("Stability file written to: ${outputFile.absolutePath}")
123134
}

0 commit comments

Comments
 (0)