Skip to content

Commit 31479d9

Browse files
committed
feat(container): add action creation for Docker servers #306
Introduce `createActions` method to generate a list of actions for Docker servers, filtering by SSH ID and creating default servers if none are available. Also, add `createDevcontainerCreateWithMountedSources` to dynamically create actions for mounting sources in devcontainers.
1 parent 3a6b244 commit 31479d9

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

exts/ext-container/src/233/main/kotlin/cc/unitmesh/container/RunDockerfileService.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@ import com.intellij.docker.DockerCloudConfiguration
55
import com.intellij.docker.DockerCloudType
66
import com.intellij.docker.DockerRunConfigurationCreator
77
import com.intellij.docker.DockerServerRuntimesManager
8+
import com.intellij.docker.agent.util.nullize
9+
import com.intellij.docker.connection.sshId
810
import com.intellij.docker.deploymentSource.DockerImageDeploymentSourceType
911
import com.intellij.docker.runtimes.DockerServerRuntime
12+
import com.intellij.docker.utils.createDefaultDockerServer
13+
import com.intellij.docker.utils.getDockerServers
1014
import com.intellij.execution.configurations.RunConfiguration
1115
import com.intellij.execution.configurations.RunProfile
16+
import com.intellij.openapi.actionSystem.AnAction
1217
import com.intellij.openapi.application.runReadAction
1318
import com.intellij.openapi.project.Project
1419
import com.intellij.openapi.vfs.VirtualFile
@@ -69,4 +74,27 @@ class RunDockerfileService : RunService {
6974

7075
return runtime
7176
}
77+
78+
79+
fun createActions(project: Project): List<AnAction> {
80+
val filteredServers =
81+
getDockerServers().filter {
82+
it.sshId == null
83+
}.nullize()
84+
?: listOf(createDefaultDockerServer("Local"))
85+
86+
return filteredServers.map {
87+
createDevcontainerCreateWithMountedSources(it)
88+
}
89+
}
90+
91+
fun createDevcontainerCreateWithMountedSources(server: RemoteServer<*>): AnAction {
92+
val clazz = Class.forName("com.intellij.clouds.docker.gateway.actions.DevcontainerCreateWithMountedSources")
93+
val constructor = clazz.declaredConstructors.firstOrNull {
94+
it.parameterCount == 1 && it.parameterTypes[0] == RemoteServer::class.java
95+
} ?: throw IllegalStateException("Constructor not found")
96+
97+
constructor.isAccessible = true
98+
return constructor.newInstance(server) as AnAction
99+
}
72100
}

0 commit comments

Comments
 (0)