Path: blob/main/components/supervisor/cmd/prepare-ide-prebuild.go
2498 views
// Copyright (c) 2023 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package cmd56import (7"context"8"strings"9"time"1011"github.com/gitpod-io/gitpod/common-go/log"12"github.com/gitpod-io/gitpod/common-go/util"13supervisor "github.com/gitpod-io/gitpod/supervisor/api"14"github.com/spf13/cobra"15"golang.org/x/xerrors"16"google.golang.org/grpc"17"google.golang.org/grpc/credentials/insecure"18)1920var prepareIDEPrebuildCmd = &cobra.Command{21Use: "prepare-ide-prebuild",22Short: "awaits when it is time to run IDE prebuild",23Run: func(cmd *cobra.Command, args []string) {24ctx := cmd.Context()25for {26conn, err := dial(ctx)27if err == nil {28err = checkTasks(ctx, conn)29}3031if err == nil || ctx.Err() != nil {32return33}3435log.WithError(err).Error("supervisor: failed to check tasks status")3637select {38case <-ctx.Done():39return40case <-time.After(1 * time.Second):41}42}43},44}4546func checkTasks(ctx context.Context, conn *grpc.ClientConn) error {47client := supervisor.NewStatusServiceClient(conn)48tasksResponse, err := client.TasksStatus(ctx, &supervisor.TasksStatusRequest{Observe: true})49if err != nil {50return xerrors.Errorf("failed get tasks status client: %w", err)51}5253for {54var runningTasksCounter int5556resp, err := tasksResponse.Recv()57if err != nil {58return err59}6061for _, task := range resp.Tasks {62idePrebuildTask := strings.Contains(task.Presentation.Name, "ide-prebuild-")63if task.State != supervisor.TaskState_closed && !idePrebuildTask {64runningTasksCounter++65}66}67if runningTasksCounter == 0 {68break69}70}7172return nil73}7475func dial(ctx context.Context) (*grpc.ClientConn, error) {76supervisorConn, err := grpc.DialContext(ctx, util.GetSupervisorAddress(), grpc.WithTransportCredentials(insecure.NewCredentials()))77if err != nil {78err = xerrors.Errorf("failed connecting to supervisor: %w", err)79}80return supervisorConn, err81}8283func init() {84rootCmd.AddCommand(prepareIDEPrebuildCmd)85}868788