From f8197d869e693dad0fd8130940bd3c8ea7989ff8 Mon Sep 17 00:00:00 2001 From: kirillk Date: Tue, 4 Aug 2026 09:46:11 -0400 Subject: [PATCH] test(jetbrains): cover malformed CLI checksums --- .../kilocode/backend/cli/KiloCliPlatform.kt | 1 + .../backend/cli/KiloCliDownloaderTest.kt | 27 +++++++++++++++++++ .../src/main/kotlin/WriteCliChecksumsTask.kt | 1 + 3 files changed, 29 insertions(+) diff --git a/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/cli/KiloCliPlatform.kt b/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/cli/KiloCliPlatform.kt index 86b494da6a9..d1a38e4a6c3 100644 --- a/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/cli/KiloCliPlatform.kt +++ b/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/cli/KiloCliPlatform.kt @@ -4,6 +4,7 @@ import com.intellij.openapi.util.SystemInfo import com.intellij.util.system.CpuArch internal object KiloCliPlatform { + // Keep supported OS/architecture pairs in sync with Gradle CLI staging task platform lists. fun current(): String { val os = when { SystemInfo.isMac -> "darwin" diff --git a/packages/kilo-jetbrains/backend/src/test/kotlin/ai/kilocode/backend/cli/KiloCliDownloaderTest.kt b/packages/kilo-jetbrains/backend/src/test/kotlin/ai/kilocode/backend/cli/KiloCliDownloaderTest.kt index 0aac6d2902e..8c489813a65 100644 --- a/packages/kilo-jetbrains/backend/src/test/kotlin/ai/kilocode/backend/cli/KiloCliDownloaderTest.kt +++ b/packages/kilo-jetbrains/backend/src/test/kotlin/ai/kilocode/backend/cli/KiloCliDownloaderTest.kt @@ -118,6 +118,33 @@ class KiloCliDownloaderTest { } } + @Test + fun `falls back to github metadata when bundled checksum is malformed`() = runBlocking { + MockWebServer().use { server -> + val bytes = archive() + server.enqueue(metadata(bytes)) + server.enqueue(MockResponse().setResponseCode(200).setBody(Buffer().write(bytes))) + val log = TestLog() + + val cli = KiloCliDownloader( + log = log, + root = dir, + baseUrl = server.url("/release").toString(), + api = server.url("/api").toString(), + digests = mapOf(KiloCliPlatform.current() to "not-a-digest"), + ).resolve("1.2.3") + + assertTrue(cli.isFile) + assertContains( + log.messages, + "WARN: Ignoring malformed bundled Kilo CLI checksum for ${KiloCliPlatform.current()}: not-a-digest" + ) + assertEquals("/api/v1.2.3", server.takeRequest().path) + assertEquals("/release/v1.2.3/kilo-${KiloCliPlatform.current()}.${KiloCliPlatform.archive()}", server.takeRequest().path) + assertEquals(2, server.requestCount) + } + } + @Test fun `prunes stale versions and removes the extracted archive`() = runBlocking { MockWebServer().use { server -> diff --git a/packages/kilo-jetbrains/build-tasks/src/main/kotlin/WriteCliChecksumsTask.kt b/packages/kilo-jetbrains/build-tasks/src/main/kotlin/WriteCliChecksumsTask.kt index 71faa73e23b..f5d6d8727a0 100644 --- a/packages/kilo-jetbrains/build-tasks/src/main/kotlin/WriteCliChecksumsTask.kt +++ b/packages/kilo-jetbrains/build-tasks/src/main/kotlin/WriteCliChecksumsTask.kt @@ -20,6 +20,7 @@ abstract class WriteCliChecksumsTask : DefaultTask() { private val DIGEST = Regex("^sha256:[a-f0-9]{64}$") private val JSON = Json { ignoreUnknownKeys = true } private const val API = "https://api.github.com/repos/Kilo-Org/kilocode/releases/tags" + // Keep in sync with KiloCliPlatform.current() and StageBundledCliTask.PLATFORMS. private val PLATFORMS = listOf( "darwin-arm64", "darwin-x64",