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  }