1
1
import {
2
2
ProvisionerJobLog ,
3
+ ProvisionerJobStatus ,
3
4
TemplateVersion ,
4
5
UploadResponse ,
5
6
WorkspaceResource ,
6
7
} from "api/typesGenerated"
7
8
import { assign , createMachine } from "xstate"
8
9
import * as API from "api/api"
9
10
import { TemplateVersionFiles } from "util/templateVersion"
10
- import * as Tar from "tar-js"
11
+ import Tar from "tar-js"
11
12
12
13
export interface CreateVersionData {
13
14
file : File
@@ -40,21 +41,34 @@ export const templateVersionEditorMachine = createMachine(
40
41
| { type : "ADD_BUILD_LOG" ; log : ProvisionerJobLog }
41
42
| { type : "UPDATE_ACTIVE_VERSION" } ,
42
43
services : { } as {
44
+ uploadTar : {
45
+ data : UploadResponse
46
+ }
43
47
createBuild : {
44
48
data : TemplateVersion
45
49
}
46
50
cancelBuild : {
51
+ data : void
52
+ }
53
+ fetchVersion : {
47
54
data : TemplateVersion
48
55
}
56
+ getResources : {
57
+ data : WorkspaceResource [ ]
58
+ }
59
+ updateActiveVersion : {
60
+ data : void
61
+ }
49
62
} ,
50
63
} ,
64
+ tsTypes : { } as import ( "./templateVersionEditorXService.typegen" ) . Typegen0 ,
51
65
initial : "idle" ,
52
66
states : {
53
67
idle : {
54
68
on : {
55
69
CREATE_VERSION : {
56
70
actions : [ "assignCreateBuild" ] ,
57
- target : "uploadTar " ,
71
+ target : "cancelingBuild " ,
58
72
} ,
59
73
UPDATE_ACTIVE_VERSION : {
60
74
target : "updatingActiveVersion" ,
@@ -71,14 +85,24 @@ export const templateVersionEditorMachine = createMachine(
71
85
} ,
72
86
} ,
73
87
} ,
88
+ cancelingBuild : {
89
+ tags : "loading" ,
90
+ invoke : {
91
+ id : "cancelBuild" ,
92
+ src : "cancelBuild" ,
93
+ onDone : {
94
+ target : "uploadTar" ,
95
+ } ,
96
+ } ,
97
+ } ,
74
98
uploadTar : {
75
99
tags : "loading" ,
76
100
invoke : {
77
101
id : "uploadTar" ,
78
102
src : "uploadTar" ,
79
103
onDone : {
80
104
target : "creatingBuild" ,
81
- actions : [ "assignUploadResponse" ] ,
105
+ actions : "assignUploadResponse" ,
82
106
} ,
83
107
} ,
84
108
} ,
@@ -88,7 +112,7 @@ export const templateVersionEditorMachine = createMachine(
88
112
id : "createBuild" ,
89
113
src : "createBuild" ,
90
114
onDone : {
91
- actions : [ "assignBuild" ] ,
115
+ actions : "assignBuild" ,
92
116
target : "watchingBuildLogs" ,
93
117
} ,
94
118
} ,
@@ -104,14 +128,14 @@ export const templateVersionEditorMachine = createMachine(
104
128
} ,
105
129
on : {
106
130
ADD_BUILD_LOG : {
107
- actions : [ "addBuildLog" ] ,
131
+ actions : "addBuildLog" ,
108
132
} ,
109
133
CANCEL_VERSION : {
110
- actions : [ "cancelBuild" ] ,
134
+ actions : "cancelBuild" ,
111
135
target : "idle" ,
112
136
} ,
113
137
CREATE_VERSION : {
114
- actions : [ "cancelBuild" , " assignCreateBuild"] ,
138
+ actions : [ "assignCreateBuild" ] ,
115
139
target : "uploadTar" ,
116
140
} ,
117
141
} ,
@@ -145,8 +169,8 @@ export const templateVersionEditorMachine = createMachine(
145
169
assignCreateBuild : assign ( {
146
170
files : ( _ , event ) => event . files ,
147
171
templateId : ( _ , event ) => event . templateId ,
148
- buildLogs : [ ] ,
149
- resources : [ ] ,
172
+ buildLogs : ( _ , _1 ) => [ ] ,
173
+ resources : ( _ , _1 ) => [ ] ,
150
174
} ) ,
151
175
assignResources : assign ( {
152
176
resources : ( _ , event ) => event . data ,
@@ -174,7 +198,7 @@ export const templateVersionEditorMachine = createMachine(
174
198
...context . version ,
175
199
job : {
176
200
...context . version . job ,
177
- status : "running" ,
201
+ status : "running" as ProvisionerJobStatus ,
178
202
} ,
179
203
}
180
204
} ,
@@ -238,20 +262,22 @@ export const templateVersionEditorMachine = createMachine(
238
262
}
239
263
return API . getTemplateVersionResources ( ctx . version . id )
240
264
} ,
241
- cancelBuild : ( ctx ) => {
265
+ cancelBuild : async ( ctx ) => {
242
266
if ( ! ctx . version ) {
243
- throw new Error ( "template version must be set" )
267
+ return
268
+ }
269
+ if ( ctx . version . job . status === "running" ) {
270
+ await API . cancelTemplateVersionBuild ( ctx . version . id )
244
271
}
245
- return API . cancelTemplateVersionBuild ( ctx . version . id )
246
272
} ,
247
- updateActiveVersion : ( ctx ) => {
273
+ updateActiveVersion : async ( ctx ) => {
248
274
if ( ! ctx . templateId ) {
249
275
throw new Error ( "template must be set" )
250
276
}
251
277
if ( ! ctx . version ) {
252
278
throw new Error ( "template version must be set" )
253
279
}
254
- return API . updateActiveTemplateVersion ( ctx . templateId , {
280
+ await API . updateActiveTemplateVersion ( ctx . templateId , {
255
281
id : ctx . version . id ,
256
282
} )
257
283
} ,
0 commit comments