Skip to content

Commit ea0e4ea

Browse files
committed
Merge branch 'main' into impl-verify-cli-signature
2 parents 8f5e559 + 3c8828d commit ea0e4ea

File tree

5 files changed

+36
-10
lines changed

5 files changed

+36
-10
lines changed

src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ data class Features(
119119
val disableAutostart: Boolean = false,
120120
val reportWorkspaceUsage: Boolean = false,
121121
val wildcardSSH: Boolean = false,
122+
val buildReason: Boolean = false,
122123
)
123124

124125
/**
@@ -558,13 +559,21 @@ class CoderCLIManager(
558559
*
559560
* Throws if the command execution fails.
560561
*/
561-
fun startWorkspace(workspaceOwner: String, workspaceName: String): String = exec(
562-
"--global-config",
563-
coderConfigPath.toString(),
564-
"start",
565-
"--yes",
566-
workspaceOwner + "/" + workspaceName,
567-
)
562+
fun startWorkspace(workspaceOwner: String, workspaceName: String, feats: Features = features): String {
563+
val args = mutableListOf(
564+
"--global-config",
565+
coderConfigPath.toString(),
566+
"start",
567+
"--yes",
568+
workspaceOwner + "/" + workspaceName
569+
)
570+
571+
if (feats.buildReason) {
572+
args.addAll(listOf("--reason", "jetbrains_connection"))
573+
}
574+
575+
return exec(*args.toTypedArray())
576+
}
568577

569578
private fun exec(vararg args: String): String {
570579
val stdout =
@@ -590,6 +599,7 @@ class CoderCLIManager(
590599
disableAutostart = version >= SemVer(2, 5, 0),
591600
reportWorkspaceUsage = version >= SemVer(2, 13, 0),
592601
wildcardSSH = version >= SemVer(2, 19, 0),
602+
buildReason = version >= SemVer(2, 25, 0),
593603
)
594604
}
595605
}

src/main/kotlin/com/coder/gateway/sdk/CoderRestClient.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.coder.gateway.sdk.v2.models.User
1515
import com.coder.gateway.sdk.v2.models.Workspace
1616
import com.coder.gateway.sdk.v2.models.WorkspaceAgent
1717
import com.coder.gateway.sdk.v2.models.WorkspaceBuild
18+
import com.coder.gateway.sdk.v2.models.WorkspaceBuildReason
1819
import com.coder.gateway.sdk.v2.models.WorkspaceResource
1920
import com.coder.gateway.sdk.v2.models.WorkspaceStatus
2021
import com.coder.gateway.sdk.v2.models.WorkspaceTransition
@@ -244,7 +245,7 @@ open class CoderRestClient(
244245
* @throws [APIResponseException].
245246
*/
246247
fun stopWorkspace(workspace: Workspace): WorkspaceBuild {
247-
val buildRequest = CreateWorkspaceBuildRequest(null, WorkspaceTransition.STOP)
248+
val buildRequest = CreateWorkspaceBuildRequest(null, WorkspaceTransition.STOP, null)
248249
val buildResponse = retroRestClient.createWorkspaceBuild(workspace.id, buildRequest).execute()
249250
if (buildResponse.code() != HttpURLConnection.HTTP_CREATED) {
250251
throw APIResponseException("stop workspace ${workspace.name}", url, buildResponse)
@@ -265,7 +266,11 @@ open class CoderRestClient(
265266
fun updateWorkspace(workspace: Workspace): WorkspaceBuild {
266267
val template = template(workspace.templateID)
267268
val buildRequest =
268-
CreateWorkspaceBuildRequest(template.activeVersionID, WorkspaceTransition.START)
269+
CreateWorkspaceBuildRequest(
270+
template.activeVersionID,
271+
WorkspaceTransition.START,
272+
WorkspaceBuildReason.JETBRAINS_CONNECTION
273+
)
269274
val buildResponse = retroRestClient.createWorkspaceBuild(workspace.id, buildRequest).execute()
270275
if (buildResponse.code() != HttpURLConnection.HTTP_CREATED) {
271276
throw APIResponseException("update workspace ${workspace.name}", url, buildResponse)

src/main/kotlin/com/coder/gateway/sdk/v2/models/CreateWorkspaceBuildRequest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ data class CreateWorkspaceBuildRequest(
1010
@Json(name = "template_version_id") val templateVersionID: UUID?,
1111
// Use to start and stop the workspace.
1212
@Json(name = "transition") val transition: WorkspaceTransition,
13+
// Use to set build reason for a workspace.
14+
@Json(name = "reason") val reason: WorkspaceBuildReason?,
1315
) {
1416
override fun equals(other: Any?): Boolean {
1517
if (this === other) return true
@@ -19,13 +21,15 @@ data class CreateWorkspaceBuildRequest(
1921

2022
if (templateVersionID != other.templateVersionID) return false
2123
if (transition != other.transition) return false
24+
if (reason != other.reason) return false
2225

2326
return true
2427
}
2528

2629
override fun hashCode(): Int {
2730
var result = templateVersionID?.hashCode() ?: 0
2831
result = 31 * result + transition.hashCode()
32+
result = 31 * result + (reason?.hashCode() ?: 0)
2933
return result
3034
}
3135
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.coder.gateway.sdk.v2.models
2+
3+
import com.squareup.moshi.Json
4+
5+
enum class WorkspaceBuildReason {
6+
@Json(name = "jetbrains_connection") JETBRAINS_CONNECTION,
7+
}

src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,7 @@ internal class CoderCLIManagerTest {
888888
listOf(
889889
Pair("2.5.0", Features(true)),
890890
Pair("2.13.0", Features(true, true)),
891-
Pair("4.9.0", Features(true, true, true)),
891+
Pair("4.9.0", Features(true, true, true, true)),
892892
Pair("2.4.9", Features(false)),
893893
Pair("1.0.1", Features(false)),
894894
)

0 commit comments

Comments
 (0)