Skip to content

Commit 3c8828d

Browse files
authored
feat: set 'jetbrains_connection' as build reason on workspace start (#561)
* Set 'jetbrains_connection' as build reason on workspace start * Fix tests
1 parent 26ac983 commit 3c8828d

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,7 @@ internal class CoderCLIManagerTest {
825825
listOf(
826826
Pair("2.5.0", Features(true)),
827827
Pair("2.13.0", Features(true, true)),
828-
Pair("4.9.0", Features(true, true, true)),
828+
Pair("4.9.0", Features(true, true, true, true)),
829829
Pair("2.4.9", Features(false)),
830830
Pair("1.0.1", Features(false)),
831831
)

0 commit comments

Comments
 (0)
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