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 }