diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 51c5652a..c592dde5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -64,7 +64,7 @@ agpAlpha = { module = "com.android.tools.build:gradle", version.ref = "agpAlpha" autoService-annotations = "com.google.auto.service:auto-service-annotations:1.1.1" autoService-ksp = "dev.zacsweers.autoservice:auto-service-ksp:1.2.0" bugsnag = "com.bugsnag:bugsnag:3.7.2" -clikt = "com.github.ajalt.clikt:clikt:4.4.0" +clikt = "com.github.ajalt.clikt:clikt:5.0.0" circuit-foundation = { module = "com.slack.circuit:circuit-foundation", version.ref = "circuit" } commonsText = "org.apache.commons:commons-text:1.12.0" composeLints = "com.slack.lint.compose:compose-lint-checks:1.3.1" diff --git a/skippy/src/main/kotlin/com/slack/skippy/CliktSgpLogger.kt b/skippy/src/main/kotlin/com/slack/skippy/CliktSgpLogger.kt index 7ccd1bfe..5b0e73d8 100644 --- a/skippy/src/main/kotlin/com/slack/skippy/CliktSgpLogger.kt +++ b/skippy/src/main/kotlin/com/slack/skippy/CliktSgpLogger.kt @@ -15,12 +15,13 @@ */ package com.slack.skippy -import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.BaseCliktCommand import com.slack.sgp.common.SgpLogger -internal fun SgpLogger.Companion.clikt(command: CliktCommand): SgpLogger = CliktSgpLogger(command) +internal fun SgpLogger.Companion.clikt(command: BaseCliktCommand<*>): SgpLogger = + CliktSgpLogger(command) -private class CliktSgpLogger(private val command: CliktCommand) : SgpLogger { +private class CliktSgpLogger(private val command: BaseCliktCommand<*>) : SgpLogger { override fun debug(message: String) { command.echo(message) } diff --git a/skippy/src/main/kotlin/com/slack/skippy/ComputeAffectedProjectsCli.kt b/skippy/src/main/kotlin/com/slack/skippy/ComputeAffectedProjectsCli.kt index c4f2aa22..614056c8 100644 --- a/skippy/src/main/kotlin/com/slack/skippy/ComputeAffectedProjectsCli.kt +++ b/skippy/src/main/kotlin/com/slack/skippy/ComputeAffectedProjectsCli.kt @@ -15,7 +15,8 @@ */ package com.slack.skippy -import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.command.SuspendingCliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.options.flag import com.github.ajalt.clikt.parameters.options.option import com.github.ajalt.clikt.parameters.options.required @@ -33,7 +34,6 @@ import kotlin.io.path.readText import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.newFixedThreadPoolContext -import kotlinx.coroutines.runBlocking import okio.FileSystem import okio.Path.Companion.toOkioPath @@ -41,10 +41,10 @@ import okio.Path.Companion.toOkioPath * @see AffectedProjectsComputer for most of the salient docs! The inputs in this CLI more or less * match 1:1 to the properties of that class. */ -public class ComputeAffectedProjectsCli : - CliktCommand( - help = "Computes affected projects and writes output files to an output directory." - ) { +public class ComputeAffectedProjectsCli : SuspendingCliktCommand() { + + override fun help(context: Context): String = + "Computes affected projects and writes output files to an output directory." private val debug: Boolean by option("--debug", help = "Enable debug logging.").flag(default = false) @@ -102,7 +102,7 @@ public class ComputeAffectedProjectsCli : private val logger = SgpLogger.clikt(this) @OptIn(DelicateCoroutinesApi::class) - override fun run() { + override suspend fun run() { val moshi = Moshi.Builder().build() val dependencyGraph = ObjectInputStream(serializedDependencyGraph.inputStream()).use { @@ -136,15 +136,11 @@ public class ComputeAffectedProjectsCli : .run(context) } - runBlocking { - if (parallelism == 1) { - body(Dispatchers.Unconfined) - } else { - logger.lifecycle("Running $parallelism configs in parallel") - newFixedThreadPoolContext(3, "computeAffectedProjects").use { dispatcher -> - body(dispatcher) - } - } + if (parallelism == 1) { + body(Dispatchers.Unconfined) + } else { + logger.lifecycle("Running $parallelism configs in parallel") + newFixedThreadPoolContext(3, "computeAffectedProjects").use { dispatcher -> body(dispatcher) } } } }