github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/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 &v1alpha1.SessionCISpec{ 29 Timeout: &metav1.Duration{Duration: time.Duration(e.ciTimeoutFlag)}, 30 } 31 } 32 33 func (e Plugin) OnStart(env *starkit.Environment) error { 34 return env.AddBuiltin("ci_settings", e.ciSettings) 35 } 36 37 func (e *Plugin) ciSettings(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { 38 var k8sGracePeriod value.Duration = -1 39 var timeout value.Duration = -1 40 if err := starkit.UnpackArgs(thread, fn.Name(), args, kwargs, 41 "k8s_grace_period?", &k8sGracePeriod, 42 "timeout?", &timeout); 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 return settings 56 }) 57 58 return starlark.None, err 59 } 60 61 var _ starkit.StatefulPlugin = Plugin{} 62 63 func MustState(model starkit.Model) *v1alpha1.SessionCISpec { 64 state, err := GetState(model) 65 if err != nil { 66 panic(err) 67 } 68 return state 69 } 70 71 func GetState(m starkit.Model) (*v1alpha1.SessionCISpec, error) { 72 state := &v1alpha1.SessionCISpec{} 73 err := m.Load(&state) 74 return state, err 75 }