Skip to content

Commit f0f3360

Browse files
committed
Make coder cli executable
- on Unix machines the cli could not be executed because the artifact doesn't have permissions - execute chown +x on unix before calling the cli
1 parent a89315e commit f0f3360

File tree

3 files changed

+51
-40
lines changed

3 files changed

+51
-40
lines changed

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

+1-35
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class CoderCLIManager(private val url: URL) {
1313
return coderCLIDownloader.downloadCLI(URL(url.protocol, url.host, url.port, "/bin/$cliNameWitExt"), cliName, if (os == OS.WINDOWS) ".exe" else "")
1414
}
1515

16-
private fun getCoderCLIForOS(os: OS?, arch: Arch?): String? {
16+
fun getCoderCLIForOS(os: OS?, arch: Arch?): String? {
1717
if (os == null || arch == null) {
1818
return null
1919
}
@@ -35,38 +35,4 @@ class CoderCLIManager(private val url: URL) {
3535
}
3636
}
3737
}
38-
39-
private fun getOS(): OS? {
40-
val os = System.getProperty("os.name").toLowerCase()
41-
return when {
42-
os.contains("win") -> {
43-
OS.WINDOWS
44-
}
45-
os.contains("nix") || os.contains("nux") || os.contains("aix") -> {
46-
OS.LINUX
47-
}
48-
os.contains("mac") -> {
49-
OS.MAC
50-
}
51-
else -> null
52-
}
53-
}
54-
55-
private fun getArch(): Arch? {
56-
val arch = System.getProperty("os.arch").toLowerCase()
57-
return when {
58-
arch.contains("amd64") -> Arch.amd64
59-
arch.contains("arm64") -> Arch.arm64
60-
arch.contains("armv7") -> Arch.armv7
61-
else -> null
62-
}
63-
}
64-
}
65-
66-
enum class OS {
67-
WINDOWS, LINUX, MAC
68-
}
69-
70-
enum class Arch {
71-
amd64, arm64, armv7
7238
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.coder.gateway.sdk
2+
3+
fun getOS(): OS? {
4+
val os = System.getProperty("os.name").toLowerCase()
5+
return when {
6+
os.contains("win") -> {
7+
OS.WINDOWS
8+
}
9+
os.contains("nix") || os.contains("nux") || os.contains("aix") -> {
10+
OS.LINUX
11+
}
12+
os.contains("mac") -> {
13+
OS.MAC
14+
}
15+
else -> null
16+
}
17+
}
18+
19+
fun getArch(): Arch? {
20+
val arch = System.getProperty("os.arch").toLowerCase()
21+
return when {
22+
arch.contains("amd64") -> Arch.amd64
23+
arch.contains("arm64") -> Arch.arm64
24+
arch.contains("armv7") -> Arch.armv7
25+
else -> null
26+
}
27+
}
28+
29+
enum class OS {
30+
WINDOWS, LINUX, MAC
31+
}
32+
33+
enum class Arch {
34+
amd64, arm64, armv7
35+
}

src/main/kotlin/com/coder/gateway/views/steps/CoderAuthStepView.kt

+15-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import com.coder.gateway.models.LoginModel
66
import com.coder.gateway.models.UriScheme
77
import com.coder.gateway.sdk.CoderCLIManager
88
import com.coder.gateway.sdk.CoderRestClientService
9+
import com.coder.gateway.sdk.OS
10+
import com.coder.gateway.sdk.getOS
911
import com.intellij.credentialStore.CredentialAttributes
1012
import com.intellij.credentialStore.askPassword
1113
import com.intellij.ide.IdeBundle
@@ -32,6 +34,7 @@ import kotlinx.coroutines.Dispatchers
3234
import kotlinx.coroutines.cancel
3335
import org.zeroturnaround.exec.ProcessExecutor
3436
import java.net.URL
37+
import java.util.logging.Logger
3538

3639
class CoderAuthStepView : CoderWorkspacesWizardStep, Disposable {
3740
private val cs = CoroutineScope(Dispatchers.Main)
@@ -91,7 +94,7 @@ class CoderAuthStepView : CoderWorkspacesWizardStep, Disposable {
9194
CoderGatewayBundle.message("gateway.connector.view.login.credentials.dialog.title"),
9295
CoderGatewayBundle.message("gateway.connector.view.login.password.label"),
9396
CredentialAttributes("Coder"),
94-
false
97+
true
9598
)
9699
model.password = password
97100
val authTask = object : Task.Modal(null, "Authenticate and setup coder", false) {
@@ -108,22 +111,29 @@ class CoderAuthStepView : CoderWorkspacesWizardStep, Disposable {
108111
val url = URL(wizardModel.loginModel.uriScheme.toString().toLowerCase(), wizardModel.loginModel.host, wizardModel.loginModel.port, "")
109112
val cliManager = CoderCLIManager(URL(url.protocol, url.host, url.port, ""))
110113
val cli = cliManager.download() ?: throw IllegalStateException("Could not download coder binary")
111-
114+
if (getOS() != OS.WINDOWS) {
115+
pi.fraction = 0.5
116+
val chmodOutput = ProcessExecutor().command("chmod", "+x", cli.toAbsolutePath().toString()).readOutput(true).execute().outputUTF8()
117+
logger.info("chmod +x ${cli.toAbsolutePath()} $chmodOutput")
118+
}
112119
pi.text = "Configuring coder cli..."
113120
pi.fraction = 0.5
114121
val loginOutput = ProcessExecutor().command(cli.toAbsolutePath().toString(), "login", url.toString(), "--token", coderClient.sessionToken).readOutput(true).execute().outputUTF8()
115-
CoderWorkspacesStepView.logger.info("coder-cli login output: $loginOutput")
122+
logger.info("coder-cli login output: $loginOutput")
116123
pi.fraction = 0.6
117124
val sshConfigOutput = ProcessExecutor().command(cli.toAbsolutePath().toString(), "config-ssh").readOutput(true).execute().outputUTF8()
118-
CoderWorkspacesStepView.logger.info("coder-cli config-ssh output: $sshConfigOutput")
125+
logger.info("coder-cli config-ssh output: $sshConfigOutput")
119126
pi.fraction = 1.0
120127
}
121128
}
122129
ProgressManager.getInstance().run(authTask)
123130
}
124131

125-
126132
override fun dispose() {
127133
cs.cancel()
128134
}
135+
136+
companion object {
137+
val logger = Logger.getLogger(CoderAuthStepView::class.java.simpleName)
138+
}
129139
}

0 commit comments

Comments
 (0)