1
1
package cc.unitmesh.container
2
2
3
3
import cc.unitmesh.devti.provider.RunService
4
+ import com.intellij.docker.DockerCloudConfiguration
5
+ import com.intellij.docker.DockerCloudType
6
+ import com.intellij.docker.DockerServerRuntimesManager
4
7
import com.intellij.docker.dockerFile.DockerLanguage
5
8
import com.intellij.execution.configurations.RunProfile
6
9
import com.intellij.openapi.application.ApplicationManager
@@ -9,23 +12,41 @@ import com.intellij.openapi.project.Project
9
12
import com.intellij.openapi.vfs.VirtualFile
10
13
import com.intellij.psi.PsiElement
11
14
import com.intellij.psi.PsiManager
15
+ import com.intellij.remoteServer.ServerType
16
+ import com.intellij.remoteServer.configuration.RemoteServer
17
+ import kotlinx.coroutines.future.await
12
18
import kotlinx.coroutines.runBlocking
13
19
14
20
class RunDockerfileService : RunService {
15
21
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
+ }
17
25
18
26
override fun runConfigurationClass (project : Project ): Class <out RunProfile >? = null
19
27
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
+
20
36
override fun runFile (project : Project , virtualFile : VirtualFile , psiElement : PsiElement ? , isFromToolAction : Boolean )
21
37
: String? {
22
38
23
39
ApplicationManager .getApplication().invokeAndWait {
24
40
runBlocking {
25
-
41
+ val instance = DockerServerRuntimesManager .getInstance(project)
42
+ val dockerConnection = defaultDockerConnection()
43
+ val runtime = instance
44
+ .getOrCreateConnection(dockerConnection)
45
+ .await()
26
46
}
27
47
}
28
48
49
+
29
50
return null
30
51
}
31
52
}
0 commit comments