Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions stability-gradle/api/stability-gradle.api
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public abstract class com/skydoves/compose/stability/gradle/StabilityCheckTask :
public final fun check ()V
public abstract fun getIgnoredClasses ()Lorg/gradle/api/provider/ListProperty;
public abstract fun getIgnoredPackages ()Lorg/gradle/api/provider/ListProperty;
public abstract fun getProjectName ()Lorg/gradle/api/provider/Property;
public abstract fun getStabilityDir ()Lorg/gradle/api/file/DirectoryProperty;
public abstract fun getStabilityInputFile ()Lorg/gradle/api/file/RegularFileProperty;
}
Expand All @@ -35,6 +36,7 @@ public abstract class com/skydoves/compose/stability/gradle/StabilityDumpTask :
public abstract fun getIgnoredClasses ()Lorg/gradle/api/provider/ListProperty;
public abstract fun getIgnoredPackages ()Lorg/gradle/api/provider/ListProperty;
public abstract fun getOutputDir ()Lorg/gradle/api/file/DirectoryProperty;
public abstract fun getProjectName ()Lorg/gradle/api/provider/Property;
public abstract fun getStabilityInputFile ()Lorg/gradle/api/file/RegularFileProperty;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin {
"stabilityDump",
StabilityDumpTask::class.java,
) {
projectName.set(target.name)
stabilityInputFile.set(
target.layout.buildDirectory.file("stability/stability-info.json"),
)
Expand All @@ -81,6 +82,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin {
"stabilityCheck",
StabilityCheckTask::class.java,
) {
projectName.set(target.name)
stabilityInputFile.set(
target.layout.buildDirectory.file("stability/stability-info.json"),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import org.gradle.api.GradleException
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
Expand Down Expand Up @@ -55,6 +56,12 @@ public abstract class StabilityCheckTask : DefaultTask() {
@get:Input
public abstract val ignoredClasses: ListProperty<String>

/**
* Project name (captured at configuration time for configuration cache compatibility).
*/
@get:Input
public abstract val projectName: Property<String>

init {
group = "verification"
description = "Check composable stability against reference file"
Expand All @@ -66,7 +73,9 @@ public abstract class StabilityCheckTask : DefaultTask() {
if (inputFile == null || !inputFile.exists()) {
// If the file doesn't exist, it means the module has no composable functions
// This is expected for modules like activities or utilities without composables
logger.lifecycle("ℹ️ No composables found in :${project.name}, skipping stability check")
logger.lifecycle(
"ℹ️ No composables found in :${projectName.get()}, skipping stability check",
)
return
}

Expand All @@ -75,19 +84,23 @@ public abstract class StabilityCheckTask : DefaultTask() {
// Directory doesn't exist - no baseline has been created yet
// This is expected for new modules or before the first stabilityDump
logger.lifecycle(
"ℹ️ No stability baseline found for :${project.name}, skipping stability check",
"ℹ️ No stability baseline found for :${projectName.get()}, skipping stability check",
)
logger.lifecycle(
" Run './gradlew :${projectName.get()}:stabilityDump' to create the baseline",
)
logger.lifecycle(" Run './gradlew :${project.name}:stabilityDump' to create the baseline")
return
}

val referenceFile = stabilityDirectory.resolve("${project.name}.stability")
val referenceFile = stabilityDirectory.resolve("${projectName.get()}.stability")
if (!referenceFile.exists()) {
// Directory exists but file doesn't - unusual but handle gracefully
logger.lifecycle(
"ℹ️ No stability baseline found for :${project.name}, skipping stability check",
"ℹ️ No stability baseline found for :${projectName.get()}, skipping stability check",
)
logger.lifecycle(
" Run './gradlew :${projectName.get()}:stabilityDump' to create the baseline",
)
logger.lifecycle(" Run './gradlew :${project.name}:stabilityDump' to create the baseline")
return
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputDirectory
Expand Down Expand Up @@ -55,6 +56,12 @@ public abstract class StabilityDumpTask : DefaultTask() {
@get:Input
public abstract val ignoredClasses: ListProperty<String>

/**
* Project name (captured at configuration time for configuration cache compatibility).
*/
@get:Input
public abstract val projectName: Property<String>

init {
group = "verification"
description = "Dump composable stability information to stability file"
Expand All @@ -66,14 +73,14 @@ public abstract class StabilityDumpTask : DefaultTask() {
if (inputFile == null || !inputFile.exists()) {
// If the file doesn't exist, it means the module has no composable functions
// This is expected for modules like activities or utilities without composables
logger.lifecycle("ℹ️ No composables found in :${project.name}, skipping stability dump")
logger.lifecycle("ℹ️ No composables found in :${projectName.get()}, skipping stability dump")
return
}

val outputDirectory = outputDir.get().asFile
outputDirectory.mkdirs()

val outputFile = outputDirectory.resolve("${project.name}.stability")
val outputFile = outputDirectory.resolve("${projectName.get()}.stability")
val stabilityInfo = parseStabilityInfo(inputFile)
val filtered = filterStabilityInfo(
stabilityInfo,
Expand Down Expand Up @@ -277,7 +284,7 @@ public abstract class StabilityDumpTask : DefaultTask() {
writer.write("// https://github.com/skydoves/compose-stability-analyzer\n")
writer.write("//\n")
writer.write("// Do not edit this file directly. To update it, run:\n")
writer.write("// ./gradlew :${project.name}:stabilityDump\n")
writer.write("// ./gradlew :${projectName.get()}:stabilityDump\n")
writer.write("\n")

entries.sortedBy { it.qualifiedName }.forEach { entry ->
Expand Down