Skip to content

chore: use background hostname for admin tasks #446

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jun 25, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions src/main/kotlin/com/coder/gateway/CoderRemoteConnectionHandle.kt
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@ import com.coder.gateway.util.humanizeDuration
import com.coder.gateway.util.isCancellation
import com.coder.gateway.util.isWorkerTimeout
import com.coder.gateway.util.suspendingRetryWithExponentialBackOff
import com.coder.gateway.cli.CoderCLIManager
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.service
import com.intellij.openapi.diagnostic.Logger
@@ -141,7 +142,13 @@ class CoderRemoteConnectionHandle {
port = 22
authType = AuthType.OPEN_SSH
}
val accessor = HighLevelHostAccessor.create(credentials, true)
val backgroundCredentials = RemoteCredentialsHolder().apply {
setHost(CoderCLIManager.getBackgroundHostName(workspace.hostname))
userName = "coder"
port = 22
authType = AuthType.OPEN_SSH
}
val accessor = HighLevelHostAccessor.create(backgroundCredentials, true)

// Deploy if we need to.
val ideDir = this.deploy(workspace, accessor, indicator, timeout)
@@ -350,7 +357,7 @@ class CoderRemoteConnectionHandle {
private fun exec(workspace: WorkspaceProjectIDE, command: String): String {
logger.info("Running command `$command` in ${workspace.hostname}:${workspace.idePathOnHost}/bin...")
return ProcessExecutor()
.command("ssh", "-t", workspace.hostname, "cd '${workspace.idePathOnHost}' ; cd bin ; $command")
.command("ssh", "-t", CoderCLIManager.getBackgroundHostName(workspace.hostname), "cd '${workspace.idePathOnHost}' ; cd bin ; $command")
.exitValues(0)
.readOutput(true)
.execute()
34 changes: 31 additions & 3 deletions src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt
Original file line number Diff line number Diff line change
@@ -255,7 +255,7 @@
val startBlock = "# --- START CODER JETBRAINS $host"
val endBlock = "# --- END CODER JETBRAINS $host"
val isRemoving = workspaceNames.isEmpty()
val proxyArgs =
val baseArgs =
listOfNotNull(
escape(localBinaryPath.toString()),
"--global-config",
@@ -265,8 +265,9 @@
"ssh",
"--stdio",
if (settings.disableAutostart && feats.disableAutostart) "--disable-autostart" else null,
if (feats.reportWorkspaceUsage) "--usage-app=jetbrains" else null,
)
val proxyArgs = baseArgs + listOfNotNull(if (feats.reportWorkspaceUsage) "--usage-app=jetbrains" else null)
val backgroundProxyArgs = baseArgs + listOfNotNull(if (feats.reportWorkspaceUsage) "--usage-app=disable" else null)
val extraConfig =
if (settings.sshConfigOptions.isNotBlank()) {
"\n" + settings.sshConfigOptions.prependIndent(" ")
@@ -289,7 +290,19 @@
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
""".trimIndent()
.plus(extraConfig)
.replace("\n", System.lineSeparator())
.plus("\n")
.plus(
"""
Host ${getBackgroundHostName(deploymentURL, it)}
ProxyCommand ${backgroundProxyArgs.joinToString(" ")} $it
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
""".trimIndent()
.plus(extraConfig)
).replace("\n", System.lineSeparator())
},
)

@@ -465,5 +478,20 @@
): String {
return "coder-jetbrains--$workspaceName--${url.safeHost()}"
}

@JvmStatic
fun getBackgroundHostName(
url: URL,
workspaceName: String,
): String {
return getHostName(url, workspaceName) + "--bg"
}

@JvmStatic
fun getBackgroundHostName(
hostname: String,
): String {
return hostname + "--bg"

Check notice on line 494 in src/main/kotlin/com/coder/gateway/cli/CoderCLIManager.kt

GitHub Actions / Qodana Community for JVM

String concatenation that can be converted to string template

'String' concatenation can be converted to a template
}
}
}
Original file line number Diff line number Diff line change
@@ -214,7 +214,7 @@ class CoderWorkspaceProjectIDEStepView(
} else {
IDECellRenderer(CoderGatewayBundle.message("gateway.connector.view.coder.connect-ssh"))
}
val executor = createRemoteExecutor(CoderCLIManager.getHostName(data.client.url, name))
val executor = createRemoteExecutor(CoderCLIManager.getBackgroundHostName(data.client.url, name))

if (ComponentValidator.getInstance(tfProject).isEmpty) {
logger.info("Installing remote path validator...")
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/append-blank-newlines.conf
Original file line number Diff line number Diff line change
@@ -4,7 +4,14 @@

# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/append-blank.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/append-no-blocks.conf
Original file line number Diff line number Diff line change
@@ -5,7 +5,14 @@ Host test2

# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/append-no-newline.conf
Original file line number Diff line number Diff line change
@@ -4,7 +4,14 @@ Host test2
Port 443
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/append-no-related-blocks.conf
Original file line number Diff line number Diff line change
@@ -11,7 +11,14 @@ some jetbrains config

# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/disable-autostart.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --disable-autostart foo
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --disable-autostart --usage-app=jetbrains foo
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --disable-autostart --usage-app=disable foo
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
11 changes: 10 additions & 1 deletion src/test/fixtures/outputs/extra-config.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--extra--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio extra
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains extra
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
ServerAliveInterval 5
ServerAliveCountMax 3
Host coder-jetbrains--extra--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable extra
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/header-command-windows.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--header--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio header
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio --usage-app=jetbrains header
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--header--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio --usage-app=disable header
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/header-command.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--header--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio header
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio --usage-app=jetbrains header
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--header--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio --usage-app=disable header
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
18 changes: 16 additions & 2 deletions src/test/fixtures/outputs/multiple-workspaces.conf
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/no-disable-autostart.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/replace-end-no-newline.conf
Original file line number Diff line number Diff line change
@@ -3,7 +3,14 @@ Host test
Host test2
Port 443 # --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/replace-end.conf
Original file line number Diff line number Diff line change
@@ -4,7 +4,14 @@ Host test2
Port 443
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Original file line number Diff line number Diff line change
@@ -5,7 +5,14 @@ some coder config
# ------------END-CODER------------
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/replace-middle.conf
Original file line number Diff line number Diff line change
@@ -2,7 +2,14 @@ Host test
Port 80
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/replace-only.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
9 changes: 8 additions & 1 deletion src/test/fixtures/outputs/replace-start.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# --- START CODER JETBRAINS test.coder.invalid
Host coder-jetbrains--foo-bar--test.coder.invalid
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio foo-bar
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=jetbrains foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
SetEnv CODER_SSH_SESSION_TYPE=JetBrains
Host coder-jetbrains--foo-bar--test.coder.invalid--bg
ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config ssh --stdio --usage-app=disable foo-bar
ConnectTimeout 0
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
36 changes: 20 additions & 16 deletions src/test/kotlin/com/coder/gateway/cli/CoderCLIManagerTest.kt
Original file line number Diff line number Diff line change
@@ -313,26 +313,27 @@ internal class CoderCLIManagerTest {
).joinToString(System.lineSeparator())
val tests =
listOf(
SSHTest(listOf("foo", "bar"), null, "multiple-workspaces", "blank"),
SSHTest(listOf("foo", "bar"), null, "multiple-workspaces", "blank"),
SSHTest(listOf("foo-bar"), "blank", "append-blank", "blank"),
SSHTest(listOf("foo-bar"), "blank-newlines", "append-blank-newlines", "blank"),
SSHTest(listOf("foo-bar"), "existing-end", "replace-end", "no-blocks"),
SSHTest(listOf("foo-bar"), "existing-end-no-newline", "replace-end-no-newline", "no-blocks"),
SSHTest(listOf("foo-bar"), "existing-middle", "replace-middle", "no-blocks"),
SSHTest(listOf("foo-bar"), "existing-middle-and-unrelated", "replace-middle-ignore-unrelated", "no-related-blocks"),
SSHTest(listOf("foo-bar"), "existing-only", "replace-only", "blank"),
SSHTest(listOf("foo-bar"), "existing-start", "replace-start", "no-blocks"),
SSHTest(listOf("foo-bar"), "no-blocks", "append-no-blocks", "no-blocks"),
SSHTest(listOf("foo-bar"), "no-related-blocks", "append-no-related-blocks", "no-related-blocks"),
SSHTest(listOf("foo-bar"), "no-newline", "append-no-newline", "no-blocks"),
SSHTest(listOf("foo", "bar"), null, "multiple-workspaces", "blank", features = Features(false, true)),
SSHTest(listOf("foo", "bar"), null, "multiple-workspaces", "blank", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "blank", "append-blank", "blank", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "blank-newlines", "append-blank-newlines", "blank", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "existing-end", "replace-end", "no-blocks", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "existing-end-no-newline", "replace-end-no-newline", "no-blocks", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "existing-middle", "replace-middle", "no-blocks", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "existing-middle-and-unrelated", "replace-middle-ignore-unrelated", "no-related-blocks", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "existing-only", "replace-only", "blank", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "existing-start", "replace-start", "no-blocks", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "no-blocks", "append-no-blocks", "no-blocks", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "no-related-blocks", "append-no-related-blocks", "no-related-blocks", features = Features(false, true)),
SSHTest(listOf("foo-bar"), "no-newline", "append-no-newline", "no-blocks", features = Features(false, true)),
if (getOS() == OS.WINDOWS) {
SSHTest(
listOf("header"),
null,
"header-command-windows",
"blank",
""""C:\Program Files\My Header Command\HeaderCommand.exe" --url="%CODER_URL%" --test="foo bar"""",
features = Features(false, true)
)
} else {
SSHTest(
@@ -341,24 +342,27 @@ internal class CoderCLIManagerTest {
"header-command",
"blank",
"my-header-command --url=\"\$CODER_URL\" --test=\"foo bar\" --literal='\$CODER_URL'",
features = Features(false, true)
)
},
SSHTest(listOf("foo"), null, "disable-autostart", "blank", "", true, Features(true)),
SSHTest(listOf("foo"), null, "no-disable-autostart", "blank", "", true, Features(false)),
SSHTest(listOf("foo"), null, "report-usage", "blank", "", true, Features(false, true)),
SSHTest(listOf("foo"), null, "disable-autostart", "blank", "", true, Features(true, true)),
SSHTest(listOf("foo"), null, "no-disable-autostart", "blank", "", true, Features(false, true)),
SSHTest(listOf("foo"), null, "no-report-usage", "blank", "", true, Features(false, false)),
SSHTest(
listOf("extra"),
null,
"extra-config",
"blank",
extraConfig = extraConfig,
features = Features(false, true)
),
SSHTest(
listOf("extra"),
null,
"extra-config",
"blank",
env = Environment(mapOf(CODER_SSH_CONFIG_OPTIONS to extraConfig)),
features = Features(false, true)
),
)


Unchanged files with check annotations Beta

init {
init()
title = CoderGatewayBundle.message("gateway.connector.view.coder.remoteproject.choose.text", name)

Check warning on line 42 in src/main/kotlin/com/coder/gateway/util/Dialogs.kt

GitHub Actions / Qodana Community for JVM

Incorrect string capitalization

String 'Choose IDE and project for workspace {0}' is not properly capitalized. It should have title capitalization
}
override fun show() {
}
private class WorkspaceVersionColumnInfo(columnName: String) : ColumnInfo<WorkspaceAgentListModel, String>(columnName) {
override fun valueOf(workspace: WorkspaceAgentListModel?): String? {

Check warning on line 895 in src/main/kotlin/com/coder/gateway/views/steps/CoderWorkspacesStepView.kt

GitHub Actions / Qodana Community for JVM

Redundant nullable return type

'valueOf' always returns non-null type
return if (workspace == null) {
"Unknown"
} else if (workspace.workspace.outdated) {