github.com/grahambrereton-form3/tilt@v0.10.18/internal/tiltfile/dockerprune/docker_prune.go (about) 1 package dockerprune 2 3 import ( 4 "fmt" 5 "time" 6 7 "go.starlark.net/starlark" 8 9 "github.com/windmilleng/tilt/pkg/model" 10 11 "github.com/windmilleng/tilt/internal/tiltfile/starkit" 12 ) 13 14 // Implements functions for dealing with Docker Prune settings. 15 type Extension struct { 16 } 17 18 func NewExtension() Extension { 19 return Extension{} 20 } 21 22 func (e Extension) NewState() interface{} { 23 return model.DockerPruneSettings{ 24 Enabled: true, 25 MaxAge: model.DockerPruneDefaultMaxAge, 26 Interval: model.DockerPruneDefaultInterval, 27 } 28 } 29 30 func (e Extension) OnStart(env *starkit.Environment) error { 31 return env.AddBuiltin("docker_prune_settings", e.dockerPruneSettings) 32 } 33 34 func (e Extension) dockerPruneSettings(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { 35 var disable bool 36 var intervalHrs, numBuilds, maxAgeMins int 37 if err := starkit.UnpackArgs(thread, fn.Name(), args, kwargs, 38 "disable?", &disable, 39 "max_age_mins?", &maxAgeMins, 40 "num_builds?", &numBuilds, 41 "interval_hrs?", &intervalHrs); err != nil { 42 return nil, err 43 } 44 45 if numBuilds != 0 && intervalHrs != 0 { 46 return nil, fmt.Errorf("can't specify both 'prune every X builds' and 'prune every Y hours'; please pass " + 47 "only one of `num_builds` and `interval_hrs`") 48 } 49 50 err := starkit.SetState(thread, func(settings model.DockerPruneSettings) model.DockerPruneSettings { 51 settings.Enabled = !disable 52 if maxAgeMins != 0 { 53 settings.MaxAge = time.Duration(maxAgeMins) * time.Minute 54 } 55 settings.NumBuilds = numBuilds 56 if intervalHrs != 0 { 57 settings.Interval = time.Duration(intervalHrs) * time.Hour 58 } 59 return settings 60 }) 61 62 return starlark.None, err 63 } 64 65 var _ starkit.StatefulExtension = Extension{} 66 67 func MustState(model starkit.Model) model.DockerPruneSettings { 68 state, err := GetState(model) 69 if err != nil { 70 panic(err) 71 } 72 return state 73 } 74 75 func GetState(m starkit.Model) (model.DockerPruneSettings, error) { 76 var state model.DockerPruneSettings 77 err := m.Load(&state) 78 return state, err 79 }