github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/pkg/model/local_target.go (about) 1 package model 2 3 import ( 4 "fmt" 5 6 "github.com/tilt-dev/tilt/internal/sliceutils" 7 "github.com/tilt-dev/tilt/pkg/apis" 8 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1" 9 ) 10 11 type LocalTarget struct { 12 UpdateCmdSpec *v1alpha1.CmdSpec 13 14 Name TargetName 15 ServeCmd Cmd // e.g. `python main.py` 16 Links []Link // zero+ links assoc'd with this resource (to be displayed in UIs) 17 Deps []string // a list of ABSOLUTE file paths that are dependencies of this target 18 19 FileWatchIgnores []v1alpha1.IgnoreDef 20 21 // Indicates that we should allow this to run in parallel with other 22 // resources (by default, this is presumed unsafe and is not allowed). 23 AllowParallel bool 24 25 ReadinessProbe *v1alpha1.Probe 26 27 // Move this to CmdServerSpec when we move CmdServer to API 28 ServeCmdDisableSource *v1alpha1.DisableSource 29 } 30 31 var _ TargetSpec = LocalTarget{} 32 33 func NewLocalTarget(name TargetName, updateCmd Cmd, serveCmd Cmd, deps []string) LocalTarget { 34 var updateCmdSpec *v1alpha1.CmdSpec 35 if !updateCmd.Empty() { 36 updateCmdSpec = &v1alpha1.CmdSpec{ 37 Args: updateCmd.Argv, 38 Dir: updateCmd.Dir, 39 Env: updateCmd.Env, 40 } 41 } 42 43 return LocalTarget{ 44 Name: name, 45 UpdateCmdSpec: updateCmdSpec, 46 Deps: deps, 47 ServeCmd: serveCmd, 48 } 49 } 50 51 func (lt LocalTarget) WithIgnores(ignores []v1alpha1.IgnoreDef) LocalTarget { 52 lt.FileWatchIgnores = ignores 53 return lt 54 } 55 56 func (lt LocalTarget) GetFileWatchIgnores() []v1alpha1.IgnoreDef { 57 return lt.FileWatchIgnores 58 } 59 60 func (lt LocalTarget) UpdateCmdName() string { 61 if lt.UpdateCmdSpec == nil { 62 return "" 63 } 64 return apis.SanitizeName(fmt.Sprintf("%s:update", lt.ID().Name)) 65 } 66 67 func (lt LocalTarget) Empty() bool { 68 return lt.UpdateCmdSpec == nil && lt.ServeCmd.Empty() 69 } 70 71 func (lt LocalTarget) WithAllowParallel(val bool) LocalTarget { 72 lt.AllowParallel = val 73 return lt 74 } 75 76 func (lt LocalTarget) WithLinks(links []Link) LocalTarget { 77 lt.Links = links 78 return lt 79 } 80 81 func (lt LocalTarget) WithReadinessProbe(probeSpec *v1alpha1.Probe) LocalTarget { 82 lt.ReadinessProbe = probeSpec 83 return lt 84 } 85 86 func (lt LocalTarget) ID() TargetID { 87 return TargetID{ 88 Name: lt.Name, 89 Type: TargetTypeLocal, 90 } 91 } 92 93 func (lt LocalTarget) DependencyIDs() []TargetID { 94 return nil 95 } 96 97 func (lt LocalTarget) Validate() error { 98 if lt.UpdateCmdSpec != nil && lt.UpdateCmdSpec.Dir == "" { 99 return fmt.Errorf("[Validate] LocalTarget cmd missing workdir") 100 } 101 if !lt.ServeCmd.Empty() && lt.ServeCmd.Dir == "" { 102 return fmt.Errorf("[Validate] LocalTarget serve_cmd missing workdir") 103 } 104 return nil 105 } 106 107 // Implements: engine.WatchableManifest 108 func (lt LocalTarget) Dependencies() []string { 109 return sliceutils.DedupedAndSorted(lt.Deps) 110 }