From 727fd4feb1a65ad64bc15dd2a8edfeafbb9e1f8e Mon Sep 17 00:00:00 2001 From: Kacper Sawicki Date: Mon, 14 Jul 2025 14:46:17 +0200 Subject: [PATCH 1/2] Set 'jetbrains_connection' as build reason on workspace start --- .../com/coder/gateway/cli/CoderCLIManager.kt | 24 +++++++++++++------ .../com/coder/gateway/sdk/CoderRestClient.kt | 9 +++++-- .../v2/models/CreateWorkspaceBuildRequest.kt | 4 ++++ .../sdk/v2/models/WorkspaceBuildReason.kt | 7 ++++++ 4 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 src/main/kotlin/com/coder/gateway/sdk/v2/models/WorkspaceBuildReason.kt diff --git a/src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt b/src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt index cc883a3bc..197c32d11 100644 --- a/src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt +++ b/src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt @@ -116,6 +116,7 @@ data class Features( val disableAutostart: Boolean = false, val reportWorkspaceUsage: Boolean = false, val wildcardSSH: Boolean = false, + val buildReason: Boolean = false, ) /** @@ -479,13 +480,21 @@ class CoderCLIManager( * * Throws if the command execution fails. */ - fun startWorkspace(workspaceOwner: String, workspaceName: String): String = exec( - "--global-config", - coderConfigPath.toString(), - "start", - "--yes", - workspaceOwner + "/" + workspaceName, - ) + fun startWorkspace(workspaceOwner: String, workspaceName: String, feats: Features = features): String { + val args = mutableListOf( + "--global-config", + coderConfigPath.toString(), + "start", + "--yes", + workspaceOwner + "/" + workspaceName + ) + + if (feats.buildReason) { + args.addAll(listOf("--reason", "jetbrains_connection")) + } + + return exec(*args.toTypedArray()) + } private fun exec(vararg args: String): String { val stdout = @@ -511,6 +520,7 @@ class CoderCLIManager( disableAutostart = version >= SemVer(2, 5, 0), reportWorkspaceUsage = version >= SemVer(2, 13, 0), wildcardSSH = version >= SemVer(2, 19, 0), + buildReason = version >= SemVer(2, 25, 0), ) } } diff --git a/src/main/kotlin/com/coder/gateway/sdk/CoderRestClient.kt b/src/main/kotlin/com/coder/gateway/sdk/CoderRestClient.kt index 71c6e1baf..3224f517c 100644 --- a/src/main/kotlin/com/coder/gateway/sdk/CoderRestClient.kt +++ b/src/main/kotlin/com/coder/gateway/sdk/CoderRestClient.kt @@ -15,6 +15,7 @@ import com.coder.gateway.sdk.v2.models.User import com.coder.gateway.sdk.v2.models.Workspace import com.coder.gateway.sdk.v2.models.WorkspaceAgent import com.coder.gateway.sdk.v2.models.WorkspaceBuild +import com.coder.gateway.sdk.v2.models.WorkspaceBuildReason import com.coder.gateway.sdk.v2.models.WorkspaceResource import com.coder.gateway.sdk.v2.models.WorkspaceStatus import com.coder.gateway.sdk.v2.models.WorkspaceTransition @@ -244,7 +245,7 @@ open class CoderRestClient( * @throws [APIResponseException]. */ fun stopWorkspace(workspace: Workspace): WorkspaceBuild { - val buildRequest = CreateWorkspaceBuildRequest(null, WorkspaceTransition.STOP) + val buildRequest = CreateWorkspaceBuildRequest(null, WorkspaceTransition.STOP, null) val buildResponse = retroRestClient.createWorkspaceBuild(workspace.id, buildRequest).execute() if (buildResponse.code() != HttpURLConnection.HTTP_CREATED) { throw APIResponseException("stop workspace ${workspace.name}", url, buildResponse) @@ -265,7 +266,11 @@ open class CoderRestClient( fun updateWorkspace(workspace: Workspace): WorkspaceBuild { val template = template(workspace.templateID) val buildRequest = - CreateWorkspaceBuildRequest(template.activeVersionID, WorkspaceTransition.START) + CreateWorkspaceBuildRequest( + template.activeVersionID, + WorkspaceTransition.START, + WorkspaceBuildReason.JETBRAINS_CONNECTION + ) val buildResponse = retroRestClient.createWorkspaceBuild(workspace.id, buildRequest).execute() if (buildResponse.code() != HttpURLConnection.HTTP_CREATED) { throw APIResponseException("update workspace ${workspace.name}", url, buildResponse) diff --git a/src/main/kotlin/com/coder/gateway/sdk/v2/models/CreateWorkspaceBuildRequest.kt b/src/main/kotlin/com/coder/gateway/sdk/v2/models/CreateWorkspaceBuildRequest.kt index 5f00ddc41..c00261e26 100644 --- a/src/main/kotlin/com/coder/gateway/sdk/v2/models/CreateWorkspaceBuildRequest.kt +++ b/src/main/kotlin/com/coder/gateway/sdk/v2/models/CreateWorkspaceBuildRequest.kt @@ -10,6 +10,8 @@ data class CreateWorkspaceBuildRequest( @Json(name = "template_version_id") val templateVersionID: UUID?, // Use to start and stop the workspace. @Json(name = "transition") val transition: WorkspaceTransition, + // Use to set build reason for a workspace. + @Json(name = "reason") val reason: WorkspaceBuildReason?, ) { override fun equals(other: Any?): Boolean { if (this === other) return true @@ -19,6 +21,7 @@ data class CreateWorkspaceBuildRequest( if (templateVersionID != other.templateVersionID) return false if (transition != other.transition) return false + if (reason != other.reason) return false return true } @@ -26,6 +29,7 @@ data class CreateWorkspaceBuildRequest( override fun hashCode(): Int { var result = templateVersionID?.hashCode() ?: 0 result = 31 * result + transition.hashCode() + result = 31 * result + (reason?.hashCode() ?: 0) return result } } diff --git a/src/main/kotlin/com/coder/gateway/sdk/v2/models/WorkspaceBuildReason.kt b/src/main/kotlin/com/coder/gateway/sdk/v2/models/WorkspaceBuildReason.kt new file mode 100644 index 000000000..18d503423 --- /dev/null +++ b/src/main/kotlin/com/coder/gateway/sdk/v2/models/WorkspaceBuildReason.kt @@ -0,0 +1,7 @@ +package com.coder.gateway.sdk.v2.models + +import com.squareup.moshi.Json + +enum class WorkspaceBuildReason { + @Json(name = "jetbrains_connection") JETBRAINS_CONNECTION, +} \ No newline at end of file From 8088af55352cd6e1b3efa350a7328bd2eccdf4ef Mon Sep 17 00:00:00 2001 From: Kacper Sawicki Date: Mon, 14 Jul 2025 14:53:59 +0200 Subject: [PATCH 2/2] Fix tests --- src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt b/src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt index 5ae754ecf..73aae020a 100644 --- a/src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt +++ b/src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt @@ -825,7 +825,7 @@ internal class CoderCLIManagerTest { listOf( Pair("2.5.0", Features(true)), Pair("2.13.0", Features(true, true)), - Pair("4.9.0", Features(true, true, true)), + Pair("4.9.0", Features(true, true, true, true)), Pair("2.4.9", Features(false)), Pair("1.0.1", Features(false)), ) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy