github.com/tilt-dev/tilt@v0.36.0/internal/tiltfile/cisettings/ci_settings.go (about) 1 package cisettings 2 3 import ( 4 "time" 5 6 "go.starlark.net/starlark" 7 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 10 "github.com/tilt-dev/tilt/internal/tiltfile/starkit" 11 "github.com/tilt-dev/tilt/internal/tiltfile/value" 12 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1" 13 "github.com/tilt-dev/tilt/pkg/model" 14 ) 15 16 // Implements functions for dealing with ci settings. 17 type Plugin struct { 18 ciTimeoutFlag model.CITimeoutFlag 19 } 20 21 func NewPlugin(ciTimeoutFlag model.CITimeoutFlag) Plugin { 22 return Plugin{ 23 ciTimeoutFlag: ciTimeoutFlag, 24 } 25 } 26 27 func (e Plugin) NewState() interface{} { 28 return model.DefaultSessionCISpec(e.ciTimeoutFlag) 29 } 30 31 func (e Plugin) OnStart(env *starkit.Environment) error { 32 return env.AddBuiltin("ci_settings", e.ciSettings) 33 } 34 35 func (e *Plugin) ciSettings(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { 36 var k8sGracePeriod value.Duration = -1 37 var timeout value.Duration = -1 38 var readinessTimeout value.Duration = -1 39 if err := starkit.UnpackArgs(thread, fn.Name(), args, kwargs, 40 "k8s_grace_period?", &k8sGracePeriod, 41 "timeout?", &timeout, 42 "readiness_timeout?", &readinessTimeout); err != nil { 43 return nil, err 44 } 45 46 err := starkit.SetState(thread, func(settings *v1alpha1.SessionCISpec) *v1alpha1.SessionCISpec { 47 if k8sGracePeriod != -1 { 48 settings = settings.DeepCopy() 49 settings.K8sGracePeriod = &metav1.Duration{Duration: time.Duration(k8sGracePeriod)} 50 } 51 if timeout != -1 { 52 settings = settings.DeepCopy() 53 settings.Timeout = &metav1.Duration{Duration: time.Duration(timeout)} 54 } 55 if readinessTimeout != -1 { 56 settings = settings.DeepCopy() 57 settings.ReadinessTimeout = &metav1.Duration{Duration: time.Duration(readinessTimeout)} 58 } 59 return settings 60 }) 61 62 return starlark.None, err 63 } 64 65 var _ starkit.StatefulPlugin = Plugin{} 66 67 func MustState(model starkit.Model) *v1alpha1.SessionCISpec { 68 state, err := GetState(model) 69 if err != nil { 70 panic(err) 71 } 72 return state 73 } 74 75 func GetState(m starkit.Model) (*v1alpha1.SessionCISpec, error) { 76 state := &v1alpha1.SessionCISpec{} 77 err := m.Load(&state) 78 return state, err 79 }