Skip to content

Commit 239221f

Browse files
committed
provide support for multiple projects and check for .git folder
1 parent c0c2e05 commit 239221f

12 files changed

Lines changed: 403 additions & 298 deletions

File tree

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
}
66

77
group = "com.dashwave"
8-
version = "2.3.0"
8+
version = "2.3.1"
99

1010
repositories {
1111
mavenCentral()
Lines changed: 115 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,60 @@
11
package com.dashwave.plugin
22

3+
import com.dashwave.plugin.actions.BuildAction
34
import com.dashwave.plugin.dialogbox.CreateProjectDialog
5+
import com.dashwave.plugin.dialogbox.GitNotConfiguredDialog
46
import com.dashwave.plugin.dialogbox.ReadyForBuildDialog
57
import com.dashwave.plugin.messages.Messages
8+
import com.dashwave.plugin.notif.BalloonNotif
69
import com.dashwave.plugin.utils.DwCmds
710
import com.dashwave.plugin.utils.Process
811
import com.dashwave.plugin.windows.DashwaveWindow
912
import com.intellij.execution.filters.HyperlinkInfo
1013
import com.intellij.execution.ui.ConsoleViewContentType
1114
import com.intellij.notification.*
15+
import com.intellij.openapi.application.ApplicationManager
1216
import com.intellij.openapi.editor.markup.TextAttributes
1317
import com.intellij.openapi.project.Project
1418
import com.intellij.openapi.startup.StartupActivity
1519
import com.intellij.openapi.ui.DialogWrapper
1620
import kotlinx.serialization.json.*
21+
import com.intellij.openapi.wm.ToolWindowManager
1722
import java.awt.Color
1823
import java.io.File
1924
import java.io.IOException
2025
import okhttp3.OkHttpClient
2126
import okhttp3.Request
27+
import com.intellij.openapi.actionSystem.ActionManager
28+
import com.intellij.openapi.actionSystem.Anchor
29+
import com.intellij.openapi.actionSystem.Constraints
30+
import com.intellij.openapi.actionSystem.DefaultActionGroup
31+
import io.ktor.util.*
2232
import java.awt.Font
2333

2434
class PluginStartup: StartupActivity {
35+
companion object {
36+
var dwWindows:HashMap<String, DashwaveWindow> = HashMap()
37+
}
2538

2639
override fun runActivity(project: Project) {
27-
DashwaveWindow.p = project
28-
DashwaveWindow.show()
29-
checkDW(project)
40+
val dwWindow = DashwaveWindow(project)
41+
dwWindow.show()
42+
dwWindows[project.name] = dwWindow
43+
checkDW(project, dwWindow)
3044
}
3145
}
3246

33-
fun checkDW(project: Project) {
34-
val dwCmd = DwCmds("check-update", "", true)
47+
fun checkDW(project: Project, dwWindow: DashwaveWindow) {
48+
val dwCmd = DwCmds("check-update", project.basePath, true, dwWindow)
3549
val exitCode = dwCmd.executeWithExitCode()
3650
if (exitCode == 0) {
37-
DashwaveWindow.displayInfo(Messages.DW_INSTALLED_ALREADY)
38-
verifyLogin(project?.basePath)
51+
dwWindow.displayInfo(Messages.DW_INSTALLED_ALREADY)
52+
verifyLogin(project?.basePath, dwWindow)
3953
}else if(exitCode == 11){
4054
}else{
41-
DashwaveWindow.displayInfo(Messages.DW_NOT_INSTALLED)
55+
dwWindow.displayInfo(Messages.DW_NOT_INSTALLED)
4256
showInstallDW(project)
43-
installDW(project?.basePath)
57+
installDW(project?.basePath, dwWindow)
4458
}
4559
}
4660

@@ -55,61 +69,76 @@ fun showInstallDW(project: Project){
5569
notification.notify(project)
5670
}
5771

58-
fun installDW(pwd: String?){
59-
DashwaveWindow.displayOutput("🔨 Setting up plugin...\n\n", ConsoleViewContentType.NORMAL_OUTPUT)
72+
fun installDW(pwd: String?, dwWindow: DashwaveWindow){
73+
dwWindow.displayOutput("🔨 Setting up plugin...\n\n", ConsoleViewContentType.NORMAL_OUTPUT)
6074

6175
// Execute the script
62-
val process = Process("curl -sSL https://cli.dashwave.io | bash", pwd, true)
76+
val process = Process("curl -sSL https://cli.dashwave.io | bash", pwd, true, dwWindow)
6377
process.start(false)
6478
Thread{
6579
val exitCode = process.wait()
6680
if (exitCode == 0) {
67-
DashwaveWindow.displayInfo(Messages.DW_DEPS_INSTALL_SUCCESS)
68-
DashwaveWindow.displayInfo(Messages.DW_DEPS_CONFIGURING)
69-
val configCmd = DwCmds("config", pwd, true)
81+
dwWindow.displayInfo(Messages.DW_DEPS_INSTALL_SUCCESS)
82+
dwWindow.displayInfo(Messages.DW_DEPS_CONFIGURING)
83+
val configCmd = DwCmds("config", pwd, true, dwWindow)
7084
val exitcode = configCmd.executeWithExitCode()
7185
if(exitcode == 0){
72-
DashwaveWindow.displayInfo(Messages.DW_DEPS_CONFIGURE_SUCCESS)
73-
verifyLogin(pwd)
86+
dwWindow.displayInfo(Messages.DW_DEPS_CONFIGURE_SUCCESS)
87+
verifyLogin(pwd, dwWindow)
7488
}else{
75-
DashwaveWindow.displayError(Messages.DW_DEPS_CONFIGURE_FAILED)
89+
dwWindow.displayError(Messages.DW_DEPS_CONFIGURE_FAILED)
7690
}
7791
} else {
78-
DashwaveWindow.displayError(Messages.DW_DEPS_INSTALL_FAILED)
92+
dwWindow.displayError(Messages.DW_DEPS_INSTALL_FAILED)
7993
}
8094
}.start()
8195
}
8296

83-
fun verifyLogin(pwd:String?){
84-
listUsers(pwd)
85-
DashwaveWindow.addModulesAndVariants(HashMap<String,List<String>>(), "", "")
86-
val currentUserLoginCmd = DwCmds("user", "", true)
97+
fun verifyLogin(pwd:String?, dwWindow: DashwaveWindow){
98+
listUsers(pwd, dwWindow)
99+
dwWindow.addModulesAndVariants(HashMap<String,List<String>>(), "", "")
100+
val currentUserLoginCmd = DwCmds("user", pwd, true, dwWindow)
87101
val exitCode = currentUserLoginCmd.executeWithExitCode()
88102
if (exitCode == 0){
89-
DashwaveWindow.enableRunButton()
90-
checkProjectConnected(pwd)
103+
dwWindow.enableRunButton()
104+
checkProjectConnected(pwd, dwWindow)
91105
}else{
92-
loginUser(pwd)
106+
loginUser(pwd, dwWindow)
93107
}
94108
}
95109

96-
fun checkProjectConnected(pwd:String?){
97-
listUsers(pwd)
98-
if (doesFileExist("$pwd/dashwave.yml")){
99-
DashwaveWindow.enableRunButton()
110+
fun checkProjectConnected(pwd:String?, dwWindow: DashwaveWindow){
111+
listUsers(pwd, dwWindow)
112+
// check if .git folder exists
113+
val gitConfigFilepath = "$pwd/.git"
114+
if (!doesFileExist(gitConfigFilepath)){
115+
dwWindow.displayOutput("${Messages.GIT_NOT_CONFIGURED}", ConsoleViewContentType.ERROR_OUTPUT)
116+
val notif = BalloonNotif(
117+
"Could not find .git folder",
118+
"",
119+
"This is not a git repository, initialise git and push codebase to proceed ",
120+
NotificationType.ERROR,
121+
){}
122+
notif.show(dwWindow.p)
100123

101-
listModulesAndVariants(pwd)
124+
val dialog = GitNotConfiguredDialog()
125+
dialog.show()
126+
return
127+
}
102128

103-
DashwaveWindow.displayOutput("✅ Project is successfully connected to dashwave. Run a cloud build using dashwave icon on toolbar\n\n", ConsoleViewContentType.NORMAL_OUTPUT)
129+
if (doesFileExist("$pwd/dashwave.yml")){
130+
dwWindow.enableRunButton()
131+
listModulesAndVariants(pwd, dwWindow)
132+
dwWindow.displayOutput("✅ Project is successfully connected to dashwave. Run a cloud build using dashwave icon on toolbar\n\n", ConsoleViewContentType.NORMAL_OUTPUT)
104133
val dd = ReadyForBuildDialog()
105134
dd.show()
106135
}else {
107-
DashwaveWindow.displayOutput("⚠️ This project is not connected to dashwave, create a new project on dashwave\n\n", ConsoleViewContentType.NORMAL_OUTPUT)
108-
openCreateProjectDialog(pwd, true)
136+
dwWindow.displayOutput("⚠️ This project is not connected to dashwave, create a new project on dashwave\n\n", ConsoleViewContentType.NORMAL_OUTPUT)
137+
openCreateProjectDialog(pwd, true, dwWindow){}
109138
}
110139
}
111140

112-
fun loginUser(pwd:String?) {
141+
fun loginUser(pwd:String?, dwWindow: DashwaveWindow) {
113142
val loginDialog = LoginDialog()
114143
var accessCode: String = ""
115144

@@ -123,14 +152,15 @@ fun loginUser(pwd:String?) {
123152
}
124153

125154
val loginUserCmd = "login $accessCode"
126-
val exitCode = DwCmds(loginUserCmd, "", true).executeWithExitCode()
155+
val exitCode = DwCmds(loginUserCmd, pwd, true, dwWindow).executeWithExitCode()
127156
if (exitCode == 0) {
128-
checkProjectConnected(pwd)
157+
dwWindow.enableRunButton()
158+
checkProjectConnected(pwd, dwWindow)
129159
}else{
130160
var hyperlink = HyperlinkInfo { p: Project ->
131-
loginUser(pwd)
161+
loginUser(pwd, dwWindow)
132162
}
133-
DashwaveWindow.console.printHyperlink(Messages.DW_LOGIN_FAILED, hyperlink)
163+
dwWindow.console.printHyperlink(Messages.DW_LOGIN_FAILED, hyperlink)
134164
}
135165
}
136166

@@ -139,11 +169,11 @@ fun doesFileExist(path: String): Boolean {
139169
return file.exists()
140170
}
141171

142-
fun listUsers(pwd: String?){
143-
val usersCmd = DwCmds("user ls", pwd, false)
172+
fun listUsers(pwd: String?, dwWindow: DashwaveWindow){
173+
val usersCmd = DwCmds("user ls", pwd, false, dwWindow)
144174
val cmdOutput = usersCmd.executeWithOutput()
145175
if(cmdOutput.first != 0){
146-
DashwaveWindow.displayError("❌ Could not find logged in users\n"+cmdOutput.second)
176+
dwWindow.displayError("❌ Could not find logged in users\n"+cmdOutput.second)
147177
return
148178
}
149179
val jsonText = cmdOutput.second.trim()
@@ -154,13 +184,13 @@ fun listUsers(pwd: String?){
154184
val users = jsonObject["users"]?.jsonArray?.mapNotNull { it.jsonPrimitive.contentOrNull }
155185
val activeUser = jsonObject["active_user"]?.toString()
156186

157-
DashwaveWindow.addUsers(users, activeUser?:"",pwd)
187+
dwWindow.addUsers(users, activeUser?:"",pwd)
158188
}
159-
fun listModulesAndVariants(pwd:String?) {
160-
val configsCmd = DwCmds("build configs", pwd, false)
189+
fun listModulesAndVariants(pwd:String?, dwWindow: DashwaveWindow) {
190+
val configsCmd = DwCmds("build configs", pwd, false, dwWindow)
161191
var cmdOutput = configsCmd.executeWithOutput()
162192
if(cmdOutput.first != 0){
163-
DashwaveWindow.displayError("❌ Could not find modules and in variants\n"+cmdOutput.second)
193+
dwWindow.displayError("❌ Could not find modules and in variants\n"+cmdOutput.second)
164194
return
165195
}
166196
val jsonText = cmdOutput.second.trim()
@@ -191,34 +221,40 @@ fun listModulesAndVariants(pwd:String?) {
191221
}
192222
}
193223

194-
DashwaveWindow.addModulesAndVariants(map, defaultModule, defaultVariant)
224+
dwWindow.addModulesAndVariants(map, defaultModule, defaultVariant)
195225
}
196226

197-
fun openCreateProjectDialog(pwd:String?, openTip:Boolean):Boolean{
198-
val createProjectDialog = CreateProjectDialog()
199-
if (createProjectDialog.showAndGet()){
200-
val projectName = createProjectDialog.getProjectName()
201-
val rootDir = createProjectDialog.getRootDir()
202-
val techStack = createProjectDialog.getSelectedTechStack()
203-
val success = createProject(projectName, techStack, rootDir,pwd, openTip)
204-
return success
205-
}
206-
DashwaveWindow.show()
207-
val yellowOutput = ConsoleViewContentType("YellowOutput", TextAttributes(Color.YELLOW, null,null, null, Font.PLAIN))
208-
DashwaveWindow.displayOutput("⚠️ You must create a new project to be able to run builds on dashwave\n\n", yellowOutput)
209-
var hyperlink = HyperlinkInfo { p: Project ->
210-
openCreateProjectDialog(pwd, openTip)
227+
fun openCreateProjectDialog(pwd:String?, openTip:Boolean, dwWindow: DashwaveWindow,buildAction:()->Unit){
228+
ApplicationManager.getApplication().invokeLater{
229+
val createProjectDialog = CreateProjectDialog(dwWindow.p)
230+
if (createProjectDialog.showAndGet()){
231+
val projectName = createProjectDialog.getProjectName()
232+
val rootDir = createProjectDialog.getRootDir()
233+
val techStack = createProjectDialog.getSelectedTechStack()
234+
val success = createProject(projectName, techStack, rootDir,pwd, openTip, dwWindow)
235+
if(success){
236+
buildAction()
237+
}
238+
}else{
239+
// dwWindow.show()
240+
dwWindow.enableRunButton()
241+
dwWindow.disableCancelButton()
242+
val yellowOutput = ConsoleViewContentType("YellowOutput", TextAttributes(Color.YELLOW, null,null, null, Font.PLAIN))
243+
dwWindow.displayOutput("⚠️ You must create a new project to be able to run builds on dashwave\n\n", yellowOutput)
244+
var hyperlink = HyperlinkInfo { p: Project ->
245+
openCreateProjectDialog(pwd, openTip, dwWindow,buildAction)
246+
}
247+
dwWindow.console.printHyperlink("Click here", hyperlink)
248+
dwWindow.displayOutput(" to create a new dashwave project\n\n", ConsoleViewContentType.NORMAL_OUTPUT)
249+
}
211250
}
212-
DashwaveWindow.console.printHyperlink("Click here", hyperlink)
213-
DashwaveWindow.displayOutput(" to create a new dashwave project\n\n", ConsoleViewContentType.NORMAL_OUTPUT)
214-
return false
215251
}
216252

217-
fun createProject(projectName: String, devStack:String, rootDir:String,pwd:String?, openTip: Boolean) :Boolean{
253+
fun createProject(projectName: String, devStack:String, rootDir:String,pwd:String?, openTip: Boolean, dwWindow: DashwaveWindow) :Boolean{
218254
val createProjectCmd = "create-project --no-prompt --name=$projectName --dev-stack=$devStack --root-dir=$rootDir"
219-
val exitCode = DwCmds(createProjectCmd, pwd, true).executeWithExitCode()
255+
val exitCode = DwCmds(createProjectCmd, pwd, true, dwWindow).executeWithExitCode()
220256
if(exitCode == 0){
221-
DashwaveWindow.enableRunButton()
257+
dwWindow.enableRunButton()
222258
Notifications.Bus.notify(
223259
Notification(
224260
"YourPluginNotificationGroup",
@@ -227,19 +263,26 @@ fun createProject(projectName: String, devStack:String, rootDir:String,pwd:Strin
227263
NotificationType.INFORMATION
228264
)
229265
)
230-
DashwaveWindow.show()
231-
DashwaveWindow.displayInfo(Messages.PROJECT_CONNECTION_SUCCESS)
266+
// dwWindow.show()
267+
dwWindow.displayInfo(Messages.PROJECT_CONNECTION_SUCCESS)
232268

233269
if(openTip) {
234270
val dd = ReadyForBuildDialog()
235271
dd.show()
236272
}
237273
return true
238274
}
239-
DashwaveWindow.displayError(Messages.PROJECT_CONNECTION_FAILED)
275+
dwWindow.displayError(Messages.PROJECT_CONNECTION_FAILED)
276+
if(exitCode == 13){
277+
var hyperlink = HyperlinkInfo { p: Project ->
278+
loginUser(pwd, dwWindow)
279+
}
280+
dwWindow.console.printHyperlink("Login here\n\n", hyperlink)
281+
return false
282+
}
240283
var hyperlink = HyperlinkInfo { p: Project ->
241-
openCreateProjectDialog(pwd, openTip)
284+
openCreateProjectDialog(pwd, openTip, dwWindow){}
242285
}
243-
DashwaveWindow.console.printHyperlink("Please try again\n\n", hyperlink)
286+
dwWindow.console.printHyperlink("Please try again\n\n", hyperlink)
244287
return false
245288
}
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
11
package com.dashwave.plugin.actions
22

3+
import com.dashwave.plugin.PluginStartup
34
import com.dashwave.plugin.windows.DashwaveWindow
45
import com.dashwave.plugin.utils.DwBuild
56
import com.intellij.openapi.actionSystem.AnAction
67
import com.intellij.openapi.actionSystem.AnActionEvent
8+
import com.intellij.openapi.project.Project
9+
import com.intellij.openapi.util.IconLoader
10+
import javax.swing.Icon
711

812
class BuildAction: AnAction() {
913

10-
1114
override fun update(e: AnActionEvent) {
1215
super.update(e)
1316
val presentation = e.presentation
1417

1518
// Enable or disable the action based on your condition
16-
presentation.isEnabled = DashwaveWindow.runEnabled
19+
20+
presentation.isEnabled = PluginStartup.dwWindows?.get(e.project?.name)?.runEnabled?:false
1721
presentation.text = "Run build on dashwave"
1822
presentation.description = "Run build on dashwave"
1923
}
2024

2125
override fun actionPerformed(e: AnActionEvent) {
22-
val project = e.project
23-
if(project != null){
24-
val buildConfigs = DashwaveWindow.getBuildConfigs(project)
25-
val build = DwBuild(buildConfigs)
26-
build.run(project)
27-
}
26+
PluginStartup.dwWindows?.get(e.project?.name)?.runButton?.doClick()
2827
}
2928
}

0 commit comments

Comments
 (0)