Skip to content

Commit dd0adfc

Browse files
committed
feat(docker): add Docker connection and runtime support #306
Introduce `defaultDockerConnection` method and integrate Docker runtime management using `DockerServerRuntimesManager`. This enables handling Docker configurations and connections within the service.
1 parent b72674a commit dd0adfc

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed
Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package cc.unitmesh.container
22

33
import cc.unitmesh.devti.provider.RunService
4+
import com.intellij.docker.DockerCloudConfiguration
5+
import com.intellij.docker.DockerCloudType
6+
import com.intellij.docker.DockerServerRuntimesManager
47
import com.intellij.docker.dockerFile.DockerLanguage
58
import com.intellij.execution.configurations.RunProfile
69
import com.intellij.openapi.application.ApplicationManager
@@ -9,23 +12,41 @@ import com.intellij.openapi.project.Project
912
import com.intellij.openapi.vfs.VirtualFile
1013
import com.intellij.psi.PsiElement
1114
import com.intellij.psi.PsiManager
15+
import com.intellij.remoteServer.ServerType
16+
import com.intellij.remoteServer.configuration.RemoteServer
17+
import kotlinx.coroutines.future.await
1218
import kotlinx.coroutines.runBlocking
1319

1420
class RunDockerfileService : RunService {
1521
override fun isApplicable(project: Project, file: VirtualFile): Boolean = file.name == "Dockerfile" ||
16-
file.isValid && runReadAction { PsiManager.getInstance(project).findFile(file)?.language == DockerLanguage.INSTANCE }
22+
file.isValid && runReadAction {
23+
PsiManager.getInstance(project).findFile(file)?.language == DockerLanguage.INSTANCE
24+
}
1725

1826
override fun runConfigurationClass(project: Project): Class<out RunProfile>? = null
1927

28+
fun defaultDockerConnection() = object : RemoteServer<DockerCloudConfiguration> {
29+
override fun getName(): String = "DockerConnection"
30+
override fun getType(): ServerType<DockerCloudConfiguration?> = DockerCloudType.getInstance()
31+
override fun getConfiguration(): DockerCloudConfiguration = DockerCloudConfiguration.createDefault()
32+
33+
override fun setName(name: String?) {}
34+
}
35+
2036
override fun runFile(project: Project, virtualFile: VirtualFile, psiElement: PsiElement?, isFromToolAction: Boolean)
2137
: String? {
2238

2339
ApplicationManager.getApplication().invokeAndWait {
2440
runBlocking {
25-
41+
val instance = DockerServerRuntimesManager.getInstance(project)
42+
val dockerConnection = defaultDockerConnection()
43+
val runtime = instance
44+
.getOrCreateConnection(dockerConnection)
45+
.await()
2646
}
2747
}
2848

49+
2950
return null
3051
}
3152
}

0 commit comments

Comments
 (0)