Skip to content

Commit cb94a16

Browse files
committed
refactor(container): move Dockerfile service implementation and update logic #306
- Move `RunDockerfileService` implementation to `ext-container` and update XML configurations. - Refactor `RunDockerfileService` to improve Docker runtime creation and configuration handling. - Remove unused imports and clean up code.
1 parent 063c304 commit cb94a16

File tree

6 files changed

+52
-34
lines changed

6 files changed

+52
-34
lines changed
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
<!-- Defines IDEA IDE-specific contributions and implementations. -->
22
<idea-plugin>
33
<extensions defaultExtensionNs="cc.unitmesh">
4-
<runService implementation="cc.unitmesh.container.RunDockerfileService"/>
5-
64
<chatContextProvider implementation="cc.unitmesh.container.provider.DockerContextProvider"/>
75
</extensions>
86
</idea-plugin>

core/src/main/kotlin/cc/unitmesh/devti/llm2/model/LlmConfig.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package cc.unitmesh.devti.llm2.model
22

33
import cc.unitmesh.devti.settings.AutoDevSettingsState
4-
import com.intellij.openapi.diagnostic.logger
54
import kotlinx.serialization.Serializable
65
import kotlinx.serialization.json.Json
76
import kotlin.text.ifEmpty

core/src/main/kotlin/cc/unitmesh/devti/util/AutoDevCoroutineScope.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class AutoDevAppScope: Disposable {
2828
fun workerScope(): CoroutineScope = service<AutoDevAppScope>().workerScope
2929
}
3030
}
31+
3132
@Service(Service.Level.PROJECT)
3233
class AutoDevCoroutineScope : Disposable {
3334
private val coroutineExceptionHandler = CoroutineExceptionHandler { _, throwable ->

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

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ package cc.unitmesh.container
33
import cc.unitmesh.devti.provider.RunService
44
import com.intellij.docker.DockerCloudConfiguration
55
import com.intellij.docker.DockerCloudType
6+
import com.intellij.docker.DockerRunConfigurationCreator
67
import com.intellij.docker.DockerServerRuntimesManager
7-
import com.intellij.docker.dockerFile.DockerLanguage
8+
import com.intellij.docker.deploymentSource.DockerImageDeploymentSourceType
9+
import com.intellij.docker.runtimes.DockerServerRuntime
10+
import com.intellij.execution.configurations.RunConfiguration
811
import com.intellij.execution.configurations.RunProfile
912
import com.intellij.openapi.application.ApplicationManager
1013
import com.intellij.openapi.application.runReadAction
@@ -14,39 +17,72 @@ import com.intellij.psi.PsiElement
1417
import com.intellij.psi.PsiManager
1518
import com.intellij.remoteServer.ServerType
1619
import com.intellij.remoteServer.configuration.RemoteServer
20+
import com.intellij.remoteServer.configuration.RemoteServersManager
1721
import kotlinx.coroutines.future.await
1822
import kotlinx.coroutines.runBlocking
1923

2024
class RunDockerfileService : RunService {
21-
override fun isApplicable(project: Project, file: VirtualFile): Boolean = file.name == "Dockerfile" ||
22-
file.isValid && runReadAction {
23-
PsiManager.getInstance(project).findFile(file)?.language == DockerLanguage.INSTANCE
25+
override fun isApplicable(project: Project, file: VirtualFile): Boolean {
26+
if (file.name == "Dockerfile") {
27+
return true
28+
}
29+
30+
return runReadAction {
31+
PsiManager.getInstance(project).findFile(file)?.language?.displayName == "Dockerfile"
32+
}
2433
}
2534

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

28-
fun defaultDockerConnection() = object : RemoteServer<DockerCloudConfiguration> {
37+
fun remoteServerConfig() = object : RemoteServer<DockerCloudConfiguration> {
2938
override fun getName(): String = "DockerConnection"
30-
override fun getType(): ServerType<DockerCloudConfiguration?> = DockerCloudType.getInstance()
39+
override fun getType(): ServerType<DockerCloudConfiguration> = DockerCloudType.getInstance()
3140
override fun getConfiguration(): DockerCloudConfiguration = DockerCloudConfiguration.createDefault()
3241

3342
override fun setName(name: String?) {}
3443
}
3544

45+
fun listAllDockerAccounts(): MutableList<RemoteServer<DockerCloudConfiguration>> {
46+
return RemoteServersManager.getInstance().getServers<DockerCloudConfiguration>(DockerCloudType.getInstance())
47+
}
48+
49+
override fun createConfiguration(
50+
project: Project,
51+
virtualFile: VirtualFile
52+
): RunConfiguration? {
53+
val imageType = DockerImageDeploymentSourceType.getInstance()
54+
val imageSource = imageType.singletonSource
55+
val creator = DockerRunConfigurationCreator(project)
56+
val cloudType = DockerCloudType.getInstance()
57+
val deploymentConfiguration = creator.createDeploymentConfigurationFromTemplate(imageType)
58+
?: cloudType.createDeploymentConfigurator(project)
59+
.createDefaultConfiguration(imageSource)
60+
61+
val server: RemoteServer<*> = remoteServerConfig()
62+
val createConfiguration = creator.createConfiguration(imageSource, deploymentConfiguration, server)
63+
return createConfiguration.configuration
64+
}
65+
3666
override fun runFile(project: Project, virtualFile: VirtualFile, psiElement: PsiElement?, isFromToolAction: Boolean)
3767
: String? {
3868

3969
ApplicationManager.getApplication().invokeAndWait {
4070
runBlocking {
41-
val instance = DockerServerRuntimesManager.getInstance(project)
42-
val dockerConnection = defaultDockerConnection()
43-
val runtime = instance
44-
.getOrCreateConnection(dockerConnection)
45-
.await()
71+
createRuntime(project)
72+
4673
}
4774
}
4875

49-
5076
return null
5177
}
78+
79+
private suspend fun createRuntime(project: Project): DockerServerRuntime {
80+
val instance = DockerServerRuntimesManager.getInstance(project)
81+
val dockerConnection = remoteServerConfig()
82+
val runtime: DockerServerRuntime = instance
83+
.getOrCreateConnection(dockerConnection)
84+
.await()
85+
86+
return runtime
87+
}
5288
}

exts/ext-container/src/233/main/resources/cc.unitmesh.container.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@
66
</dependencies>
77

88
<!-- Since limit of Docker, we move implementation to docker-contrib.xml -->
9+
<extensions defaultExtensionNs="cc.unitmesh">
10+
<runService implementation="cc.unitmesh.container.RunDockerfileService"/>
11+
</extensions>
912
</idea-plugin>

exts/ext-git/src/main/kotlin/RunDockerfileService.kt

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)