diff --git a/src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt b/src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt index cc883a3b..197c32d1 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 71c6e1ba..3224f517 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 5f00ddc4..c00261e2 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 00000000..18d50342 --- /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 diff --git a/src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt b/src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt index 5ae754ec..73aae020 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