Skip to content

Commit 727fd4f

Browse files
committed
Set 'jetbrains_connection' as build reason on workspace start
1 parent 26ac983 commit 727fd4f

File tree

4 files changed

+35
-9
lines changed

4 files changed

+35
-9
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
@@ -116,6 +116,7 @@ data class Features(
116116
val disableAutostart: Boolean = false,
117117
val reportWorkspaceUsage: Boolean = false,
118118
val wildcardSSH: Boolean = false,
119+
val buildReason: Boolean = false,
119120
)
120121

121122
/**
@@ -479,13 +480,21 @@ class CoderCLIManager(
479480
*
480481
* Throws if the command execution fails.
481482
*/
482-
fun startWorkspace(workspaceOwner: String, workspaceName: String): String = exec(
483-
"--global-config",
484-
coderConfigPath.toString(),
485-
"start",
486-
"--yes",
487-
workspaceOwner + "/" + workspaceName,
488-
)
483+
fun startWorkspace(workspaceOwner: String, workspaceName: String, feats: Features = features): String {
484+
val args = mutableListOf(
485+
"--global-config",
486+
coderConfigPath.toString(),
487+
"start",
488+
"--yes",
489+
workspaceOwner + "/" + workspaceName
490+
)
491+
492+
if (feats.buildReason) {
493+
args.addAll(listOf("--reason", "jetbrains_connection"))
494+
}
495+
496+
return exec(*args.toTypedArray())
497+
}
489498

490499
private fun exec(vararg args: String): String {
491500
val stdout =
@@ -511,6 +520,7 @@ class CoderCLIManager(
511520
disableAutostart = version >= SemVer(2, 5, 0),
512521
reportWorkspaceUsage = version >= SemVer(2, 13, 0),
513522
wildcardSSH = version >= SemVer(2, 19, 0),
523+
buildReason = version >= SemVer(2, 25, 0),
514524
)
515525
}
516526
}

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+
}

0 commit comments

Comments
 (0)