github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/hud/webview/view.go (about)

     1  package webview
     2  
     3  import (
     4  	"fmt"
     5  
     6  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     7  
     8  	"github.com/tilt-dev/tilt/internal/controllers/apis/liveupdate"
     9  	"github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1"
    10  	"github.com/tilt-dev/tilt/pkg/model"
    11  	"github.com/tilt-dev/tilt/pkg/model/logstore"
    12  )
    13  
    14  func toAPITargetSpec(spec model.TargetSpec) (v1alpha1.UIResourceTargetSpec, error) {
    15  	switch typ := spec.(type) {
    16  	case model.ImageTarget:
    17  		return v1alpha1.UIResourceTargetSpec{
    18  			ID:            typ.ID().String(),
    19  			Type:          v1alpha1.UIResourceTargetTypeImage,
    20  			HasLiveUpdate: !liveupdate.IsEmptySpec(typ.LiveUpdateSpec),
    21  		}, nil
    22  	case model.DockerComposeTarget:
    23  		return v1alpha1.UIResourceTargetSpec{
    24  			ID:   typ.ID().String(),
    25  			Type: v1alpha1.UIResourceTargetTypeDockerCompose,
    26  		}, nil
    27  	case model.K8sTarget:
    28  		return v1alpha1.UIResourceTargetSpec{
    29  			ID:   typ.ID().String(),
    30  			Type: v1alpha1.UIResourceTargetTypeKubernetes,
    31  		}, nil
    32  	case model.LocalTarget:
    33  		return v1alpha1.UIResourceTargetSpec{
    34  			ID:   typ.ID().String(),
    35  			Type: v1alpha1.UIResourceTargetTypeLocal,
    36  		}, nil
    37  	default:
    38  		return v1alpha1.UIResourceTargetSpec{}, fmt.Errorf("unknown TargetSpec type %T for spec: '%v'", spec, spec)
    39  	}
    40  }
    41  
    42  func ToAPITargetSpecs(specs []model.TargetSpec) ([]v1alpha1.UIResourceTargetSpec, error) {
    43  	result := make([]v1alpha1.UIResourceTargetSpec, len(specs))
    44  	for i, spec := range specs {
    45  		protoSpec, err := toAPITargetSpec(spec)
    46  		if err != nil {
    47  			return nil, err
    48  		}
    49  		result[i] = protoSpec
    50  	}
    51  
    52  	return result, nil
    53  }
    54  
    55  func ToBuildRunning(br model.BuildRecord) *v1alpha1.UIBuildRunning {
    56  	if br.Empty() {
    57  		return nil
    58  	}
    59  
    60  	return &v1alpha1.UIBuildRunning{
    61  		StartTime: metav1.NewMicroTime(br.StartTime),
    62  		SpanID:    string(br.SpanID),
    63  	}
    64  }
    65  
    66  func ToBuildTerminated(br model.BuildRecord, logStore *logstore.LogStore) v1alpha1.UIBuildTerminated {
    67  	e := ""
    68  	if br.Error != nil {
    69  		e = br.Error.Error()
    70  	}
    71  
    72  	warnings := []string{}
    73  	if br.SpanID != "" {
    74  		warnings = logStore.Warnings(br.SpanID)
    75  	}
    76  
    77  	return v1alpha1.UIBuildTerminated{
    78  		Error: e,
    79  		// TODO(nick): Remove this, and compute it client-side.
    80  		Warnings:       warnings,
    81  		StartTime:      metav1.NewMicroTime(br.StartTime),
    82  		FinishTime:     metav1.NewMicroTime(br.FinishTime),
    83  		IsCrashRebuild: false,
    84  		SpanID:         string(br.SpanID),
    85  	}
    86  }
    87  
    88  func ToBuildsTerminated(brs []model.BuildRecord, logStore *logstore.LogStore) []v1alpha1.UIBuildTerminated {
    89  	ret := make([]v1alpha1.UIBuildTerminated, len(brs))
    90  	for i, br := range brs {
    91  		ret[i] = ToBuildTerminated(br, logStore)
    92  	}
    93  	return ret
    94  }
    95  
    96  func ToAPILinks(lns []model.Link) []v1alpha1.UIResourceLink {
    97  	ret := make([]v1alpha1.UIResourceLink, len(lns))
    98  	for i, ln := range lns {
    99  		ret[i] = v1alpha1.UIResourceLink{
   100  			URL:  ln.URLString(),
   101  			Name: ln.Name,
   102  		}
   103  	}
   104  	return ret
   105  }