@@ -2,6 +2,9 @@ package start
22
33import (
44 "fmt"
5+ "os"
6+ "os/exec"
7+ "time"
58
69 "github.com/manifoldco/promptui"
710)
@@ -52,13 +55,13 @@ func dockerExists() bool {
5255}
5356
5457func minikubeExists () bool {
55- // TODO(daniel-hutao )
56- return false
58+ _ , err := exec . LookPath ( "minikube" )
59+ return err == nil
5760}
5861
5962func helmExists () bool {
60- // TODO(daniel-hutao )
61- return false
63+ _ , err := exec . LookPath ( "helm" )
64+ return err == nil
6265}
6366
6467func argocdExists () bool {
@@ -75,12 +78,42 @@ func installDocker() error {
7578 _ , err := prompt .Run ()
7679 if err != nil {
7780 fmt .Println ("Docker must be installed. Quit now." )
78- return nil
81+ return err
82+ }
83+
84+ cmd := exec .Command ("brew" , "install" , "docker" , "--cask" )
85+ cmd .Stdout = os .Stdout
86+ cmd .Stderr = os .Stderr
87+ if err = cmd .Run (); err != nil {
88+ fmt .Printf ("Failed to install Docker. Error: %s" , err )
89+ }
90+
91+ cmd = exec .Command ("open" , "-a" , "Docker" )
92+ cmd .Stdout = os .Stdout
93+ cmd .Stderr = os .Stderr
94+ if err = cmd .Run (); err != nil {
95+ fmt .Printf ("Failed to start up Docker. Error: %s" , err )
96+ return err
97+ }
98+
99+ return waitForDockerRun ()
100+ }
101+
102+ func waitForDockerRun () error {
103+ fmt .Println ("\n Please make sure your docker has been started. The OS may ask you to authorize it manually." )
104+ fmt .Println ()
105+ time .Sleep (time .Second )
106+ prompt := promptui.Prompt {
107+ Label : "I've verified that Docker is running properly by using the `docker version` command." ,
108+ IsConfirm : true ,
109+ }
110+
111+ _ , err := prompt .Run ()
112+ if err != nil {
113+ fmt .Println ("Please make sure docker starts properly first." )
114+ return err
79115 }
80116
81- // TODO(daniel-hutao): install Docker
82- fmt .Println ("Docker installing..." )
83- fmt .Println ("Docker installed." )
84117 return nil
85118}
86119
@@ -93,12 +126,16 @@ func installMinikube() error {
93126 _ , err := prompt .Run ()
94127 if err != nil {
95128 fmt .Println ("Minikube must be installed. Quit now." )
96- return nil
129+ return err
97130 }
98131
99- // TODO(daniel-hutao): install Minikube
100- fmt .Println ("Minikube installing..." )
101- fmt .Println ("Minikube installed." )
132+ cmd := exec .Command ("brew" , "install" , "minikube" )
133+ cmd .Stdout = os .Stdout
134+ cmd .Stderr = os .Stderr
135+ if err = cmd .Run (); err != nil {
136+ fmt .Printf ("Failed to install Minikube. Error: %s" , err )
137+ return err
138+ }
102139 return nil
103140}
104141
@@ -111,12 +148,16 @@ func installHelm() error {
111148 _ , err := prompt .Run ()
112149 if err != nil {
113150 fmt .Println ("Helm must be installed. Quit now." )
114- return nil
151+ return err
115152 }
116153
117- // TODO(daniel-hutao): install Helm
118- fmt .Println ("Helm installing..." )
119- fmt .Println ("Helm installed." )
154+ cmd := exec .Command ("brew" , "install" , "helm" )
155+ cmd .Stdout = os .Stdout
156+ cmd .Stderr = os .Stderr
157+ if err = cmd .Run (); err != nil {
158+ fmt .Printf ("Failed to install Helm. Error: %s" , err )
159+ return err
160+ }
120161 return nil
121162}
122163
@@ -129,11 +170,23 @@ func installArgocd() error {
129170 _ , err := prompt .Run ()
130171 if err != nil {
131172 fmt .Println ("Argo CD must be installed. Quit now." )
132- return nil
173+ return err
174+ }
175+
176+ cmd := exec .Command ("helm" , "repo" , "add" , "argo" , "https://argoproj.github.io/argo-helm" )
177+ cmd .Stdout = os .Stdout
178+ cmd .Stderr = os .Stderr
179+ if err = cmd .Run (); err != nil {
180+ fmt .Printf ("Failed to add Helm repo. Error: %s" , err )
181+ return err
133182 }
134183
135- // TODO(daniel-hutao): install Argo CD
136- fmt .Println ("Argo CD installing..." )
137- fmt .Println ("Argo CD installed." )
184+ cmd = exec .Command ("helm" , "install" , "argo/argo-cd" , "-n" , "argocd" , "--create-namespace" )
185+ cmd .Stdout = os .Stdout
186+ cmd .Stderr = os .Stderr
187+ if err = cmd .Run (); err != nil {
188+ fmt .Printf ("Failed to install Argo CD. Error: %s" , err )
189+ return err
190+ }
138191 return nil
139192}
0 commit comments