@@ -161,6 +161,7 @@ func main() {
161
161
}
162
162
163
163
if launchCtx .warmup {
164
+ waitForTasksToFinish ()
164
165
launch (launchCtx )
165
166
return
166
167
}
@@ -853,3 +854,66 @@ func resolveProjectContextDir(launchCtx *LaunchContext) string {
853
854
854
855
return launchCtx .projectDir
855
856
}
857
+
858
+ func waitForTasksToFinish () {
859
+ ctx , cancel := context .WithCancel (context .Background ())
860
+ defer cancel ()
861
+
862
+ var conn * grpc.ClientConn
863
+ var err error
864
+
865
+ for {
866
+ conn , err = dial (ctx )
867
+ if err == nil {
868
+ err = checkTasks (ctx , conn )
869
+ }
870
+
871
+ if err == nil {
872
+ return
873
+ }
874
+
875
+ log .WithError (err ).Error ("launcher: failed to check tasks status" )
876
+
877
+ select {
878
+ case <- ctx .Done ():
879
+ return
880
+ case <- time .After (1 * time .Second ):
881
+ }
882
+ }
883
+ }
884
+
885
+ func checkTasks (ctx context.Context , conn * grpc.ClientConn ) error {
886
+ client := supervisor .NewStatusServiceClient (conn )
887
+ tasksResponse , err := client .TasksStatus (ctx , & supervisor.TasksStatusRequest {Observe : true })
888
+ if err != nil {
889
+ return xerrors .Errorf ("failed get tasks status client: %w" , err )
890
+ }
891
+
892
+ for {
893
+ var runningTasksCounter int
894
+
895
+ resp , err := tasksResponse .Recv ()
896
+ if err != nil {
897
+ return err
898
+ }
899
+
900
+ for _ , task := range resp .Tasks {
901
+ if task .State != supervisor .TaskState_closed && task .Presentation .Name != "GITPOD_JB_WARMUP_TASK" {
902
+ runningTasksCounter ++
903
+ }
904
+ }
905
+ if runningTasksCounter == 0 {
906
+ break
907
+ }
908
+ }
909
+
910
+ return nil
911
+ }
912
+
913
+ func dial (ctx context.Context ) (* grpc.ClientConn , error ) {
914
+ supervisorConn , err := grpc .DialContext (ctx , util .GetSupervisorAddress (), grpc .WithTransportCredentials (insecure .NewCredentials ()))
915
+ if err != nil {
916
+ err = xerrors .Errorf ("failed connecting to supervisor: %w" , err )
917
+ }
918
+ return supervisorConn , err
919
+ }
0 commit comments