@@ -12,7 +12,8 @@ import (
12
12
semver "go.bug.st/relaxed-semver"
13
13
)
14
14
15
- func PlatformInstall (ctx context.Context , req * rpc.PlatformInstallReq , progress commands.ProgressCB ) (* rpc.PlatformInstallResp , error ) {
15
+ func PlatformInstall (ctx context.Context , req * rpc.PlatformInstallReq ,
16
+ progress commands.ProgressCB , taskCB commands.TaskProgressCB ) (* rpc.PlatformInstallResp , error ) {
16
17
var version * semver.Version
17
18
if req .Version != "" {
18
19
if v , err := semver .Parse (req .Version ); err == nil {
@@ -21,18 +22,18 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallReq, progress
21
22
return nil , fmt .Errorf ("invalid version: %s" , err )
22
23
}
23
24
}
24
- ref := & packagemanager.PlatformReference {
25
+
26
+ pm := commands .GetPackageManager (req )
27
+ platform , tools , err := pm .FindPlatformReleaseDependencies (& packagemanager.PlatformReference {
25
28
Package : req .PlatformPackage ,
26
29
PlatformArchitecture : req .Architecture ,
27
- PlatformVersion : version }
28
- pm := commands .GetPackageManager (req )
29
- platform , tools , err := pm .FindPlatformReleaseDependencies (ref )
30
+ PlatformVersion : version ,
31
+ })
30
32
if err != nil {
31
- formatter .PrintError (err , "Could not determine platform dependencies" )
32
- return nil , fmt .Errorf ("Could not determine platform dependencies: %s" , err )
33
+ return nil , fmt .Errorf ("finding platform dependencies: %s" , err )
33
34
}
34
35
35
- err = installPlatform (pm , platform , tools , progress )
36
+ err = installPlatform (pm , platform , tools , progress , taskCB )
36
37
if err != nil {
37
38
return nil , err
38
39
}
@@ -47,51 +48,56 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallReq, progress
47
48
48
49
func installPlatform (pm * packagemanager.PackageManager ,
49
50
platformRelease * cores.PlatformRelease , requiredTools []* cores.ToolRelease ,
50
- progress commands.ProgressCB ) error {
51
+ progress commands.ProgressCB , taskCB commands. TaskProgressCB ) error {
51
52
log := pm .Log .WithField ("platform" , platformRelease )
52
53
53
54
// Prerequisite checks before install
54
55
if platformRelease .IsInstalled () {
55
56
log .Warn ("Platform already installed" )
56
- formatter . Print ( "Platform " + platformRelease .String () + " already installed" )
57
- return fmt . Errorf ( "Platform " + platformRelease . String () + " already installed" )
57
+ taskCB ( & rpc. TaskProgress { Name : "Platform " + platformRelease .String () + " already installed" , Completed : true } )
58
+ return nil
58
59
}
59
60
toolsToInstall := []* cores.ToolRelease {}
60
61
for _ , tool := range requiredTools {
61
62
if tool .IsInstalled () {
62
63
log .WithField ("tool" , tool ).Warn ("Tool already installed" )
63
- formatter . Print ( "Tool " + tool .String () + " already installed" )
64
+ taskCB ( & rpc. TaskProgress { Name : "Tool " + tool .String () + " already installed" , Completed : true } )
64
65
} else {
65
66
toolsToInstall = append (toolsToInstall , tool )
66
67
}
67
68
}
68
69
69
70
// Package download
71
+ taskCB (& rpc.TaskProgress {Name : "Downloading packages" })
70
72
for _ , tool := range toolsToInstall {
71
73
downloadTool (pm , tool , progress )
72
74
}
73
75
downloadPlatform (pm , platformRelease , progress )
76
+ taskCB (& rpc.TaskProgress {Completed : true })
74
77
78
+ // Install tools first
75
79
for _ , tool := range toolsToInstall {
76
- InstallToolRelease (pm , tool )
80
+ err := InstallToolRelease (pm , tool , taskCB )
81
+ if err != nil {
82
+ // TODO: handle error
83
+ }
77
84
}
78
85
79
86
// Are we installing or upgrading?
80
87
platform := platformRelease .Platform
81
88
installed := pm .GetInstalledPlatformRelease (platform )
82
89
if installed == nil {
83
90
log .Info ("Installing platform" )
84
- formatter . Print ( "Installing " + platformRelease .String () + "..." )
91
+ taskCB ( & rpc. TaskProgress { Name : "Installing " + platformRelease .String ()} )
85
92
} else {
86
93
log .Info ("Updating platform " + installed .String ())
87
- formatter . Print ( "Updating " + installed .String () + " with " + platformRelease .String () + "..." )
94
+ taskCB ( & rpc. TaskProgress { Name : "Updating " + installed .String () + " with " + platformRelease .String ()} )
88
95
}
89
96
90
97
// Install
91
98
err := pm .InstallPlatform (platformRelease )
92
99
if err != nil {
93
100
log .WithError (err ).Error ("Cannot install platform" )
94
- formatter .PrintError (err , "Cannot install platform" )
95
101
return err
96
102
}
97
103
@@ -102,43 +108,44 @@ func installPlatform(pm *packagemanager.PackageManager,
102
108
// In case of error try to rollback
103
109
if errUn != nil {
104
110
log .WithError (errUn ).Error ("Error updating platform." )
105
- formatter . PrintError ( errUn , "Error updating platform" )
111
+ taskCB ( & rpc. TaskProgress { Message : "Error updating platform: " + err . Error ()} )
106
112
107
113
// Rollback
108
114
if err := pm .UninstallPlatform (platformRelease ); err != nil {
109
115
log .WithError (err ).Error ("Error rolling-back changes." )
110
- formatter . PrintError ( err , "Error rolling-back changes." )
111
- return fmt .Errorf ("rolling-back changes: %s" , err )
116
+ taskCB ( & rpc. TaskProgress { Message : "Error rolling-back changes: " + err . Error ()} )
117
+ // return fmt.Errorf("rolling-back changes: %s", err)
112
118
}
119
+
113
120
return fmt .Errorf ("updating platform: %s" , errUn )
114
121
}
115
122
}
116
123
117
124
log .Info ("Platform installed" )
118
- formatter . Print ( platformRelease .String () + " installed" )
125
+ taskCB ( & rpc. TaskProgress { Message : platformRelease .String () + " installed" , Completed : true } )
119
126
return nil
120
127
}
121
128
122
129
// InstallToolRelease installs a ToolRelease
123
- func InstallToolRelease (pm * packagemanager.PackageManager , toolRelease * cores.ToolRelease ) error {
130
+ func InstallToolRelease (pm * packagemanager.PackageManager , toolRelease * cores.ToolRelease , taskCB commands. TaskProgressCB ) error {
124
131
log := pm .Log .WithField ("Tool" , toolRelease )
125
132
126
133
if toolRelease .IsInstalled () {
127
134
log .Warn ("Tool already installed" )
128
- formatter . Print ( "Tool " + toolRelease .String () + " already installed" )
129
- return fmt . Errorf ( "Tool " + toolRelease . String () + " already installed" )
135
+ taskCB ( & rpc. TaskProgress { Name : "Tool " + toolRelease .String () + " already installed" , Completed : true } )
136
+ return nil
130
137
}
131
138
132
139
log .Info ("Installing tool" )
133
- formatter . Print ( "Installing " + toolRelease .String () + "..." )
140
+ taskCB ( & rpc. TaskProgress { Name : "Installing " + toolRelease .String ()} )
134
141
err := pm .InstallTool (toolRelease )
135
142
if err != nil {
136
143
log .WithError (err ).Warn ("Cannot install tool" )
137
144
formatter .PrintError (err , "Cannot install tool: " + toolRelease .String ())
138
145
return fmt .Errorf ("Cannot install tool: " + toolRelease .String (), err )
139
146
}
140
-
141
147
log .Info ("Tool installed" )
142
- formatter .Print (toolRelease .String () + " installed" )
148
+ taskCB (& rpc.TaskProgress {Message : toolRelease .String () + " installed" , Completed : true })
149
+
143
150
return nil
144
151
}
0 commit comments