@@ -21,6 +21,7 @@ import {
21
21
EnvVarWithValue ,
22
22
IDESettings ,
23
23
Identity as IdentityProtocol ,
24
+ JetBrainsProductConfig ,
24
25
NamedWorkspaceFeatureFlag ,
25
26
PrebuiltWorkspaceState ,
26
27
ProjectEnvVar ,
@@ -35,8 +36,9 @@ import {
35
36
WithEnvvarsContext ,
36
37
WithPrebuild ,
37
38
WorkspaceAutostartOption ,
38
- WorkspaceContext , WorkspaceInfo ,
39
- WorkspaceSession as WorkspaceSessionProtocol
39
+ WorkspaceContext ,
40
+ WorkspaceInfo ,
41
+ WorkspaceSession as WorkspaceSessionProtocol ,
40
42
} from "@gitpod/gitpod-protocol/lib/protocol" ;
41
43
import {
42
44
OrgMemberInfo ,
@@ -134,7 +136,8 @@ import {
134
136
ParseContextURLResponse ,
135
137
PrebuildInitializer ,
136
138
SnapshotInitializer ,
137
- UpdateWorkspaceRequest_UpdateTimeout , Workspace ,
139
+ UpdateWorkspaceRequest_UpdateTimeout ,
140
+ Workspace ,
138
141
WorkspaceClass ,
139
142
WorkspaceGitStatus ,
140
143
WorkspaceInitializer ,
@@ -151,7 +154,7 @@ import {
151
154
WorkspaceSpec_WorkspaceType ,
152
155
WorkspaceStatus ,
153
156
WorkspaceStatus_PrebuildResult ,
154
- WorkspaceStatus_WorkspaceConditions
157
+ WorkspaceStatus_WorkspaceConditions ,
155
158
} from "@gitpod/public-api/lib/gitpod/v1/workspace_pb" ;
156
159
import { getPrebuildLogPath } from "./prebuild-utils" ;
157
160
import { InvalidGitpodYMLError , RepositoryNotFoundError , UnauthorizedRepositoryAccessError } from "./public-api-errors" ;
@@ -1194,8 +1197,10 @@ export class PublicAPIConverter {
1194
1197
1195
1198
toPrebuildStatus ( gitpodHost : string , prebuild : PrebuildWithStatus ) : PrebuildStatus {
1196
1199
const tasks : TaskLog [ ] = [ ] ;
1200
+ let taskIndex = 0 ;
1197
1201
if ( prebuild . workspace ?. config ?. tasks ) {
1198
1202
for ( let i = 0 ; i < prebuild . workspace . config . tasks . length ; i ++ ) {
1203
+ taskIndex = i ;
1199
1204
const task = prebuild . workspace . config . tasks [ i ] ;
1200
1205
tasks . push (
1201
1206
new TaskLog ( {
@@ -1211,6 +1216,48 @@ export class PublicAPIConverter {
1211
1216
) ;
1212
1217
}
1213
1218
}
1219
+
1220
+ const capitalize = ( input : string ) => {
1221
+ return input . charAt ( 0 ) . toUpperCase ( ) + input . slice ( 1 ) ;
1222
+ } ;
1223
+
1224
+ // This is a hack mimicking the supervisor behavior of adding dynamic IDE tasks https://github.com/gitpod-io/gitpod/blob/e7d79c355e2cd6ac34056ea52d7bdcda45975839/components/ide-service/pkg/server/server.go#L508-L540
1225
+ if ( prebuild . workspace . config . jetbrains ) {
1226
+ const jetbrainsIdes = Object . entries ( prebuild . workspace . config . jetbrains ) . sort ( ( [ a ] , [ b ] ) =>
1227
+ a . localeCompare ( b ) ,
1228
+ ) as [ string , JetBrainsProductConfig ] [ ] ;
1229
+ for ( const [ ide , ideConfig ] of jetbrainsIdes ) {
1230
+ if ( ! ideConfig . prebuilds ) {
1231
+ continue ;
1232
+ }
1233
+
1234
+ if ( ideConfig . prebuilds . version !== "latest" ) {
1235
+ tasks . push (
1236
+ new TaskLog ( {
1237
+ taskId : `jb-warmup-${ ide } -stable` ,
1238
+ taskLabel : `JetBrains ${ capitalize ( ide ) } warmup (stable)` ,
1239
+ logUrl : new URL (
1240
+ getPrebuildLogPath ( prebuild . info . id , `${ ++ taskIndex } ` ) ,
1241
+ gitpodHost ,
1242
+ ) . toString ( ) ,
1243
+ } ) ,
1244
+ ) ;
1245
+ }
1246
+ if ( ideConfig . prebuilds . version !== "stable" ) {
1247
+ tasks . push (
1248
+ new TaskLog ( {
1249
+ taskId : `jb-warmup-${ ide } -latest` ,
1250
+ taskLabel : `JetBrains ${ capitalize ( ide ) } warmup (latest)` ,
1251
+ logUrl : new URL (
1252
+ getPrebuildLogPath ( prebuild . info . id , `${ ++ taskIndex } ` ) ,
1253
+ gitpodHost ,
1254
+ ) . toString ( ) ,
1255
+ } ) ,
1256
+ ) ;
1257
+ }
1258
+ }
1259
+ }
1260
+
1214
1261
return new PrebuildStatus ( {
1215
1262
phase : new PrebuildPhase ( {
1216
1263
name : this . toPrebuildPhase ( prebuild . status ) ,
0 commit comments