github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/tiltfile/print/print.go (about)

     1  package print
     2  
     3  import (
     4  	"errors"
     5  
     6  	"go.starlark.net/starlark"
     7  
     8  	"github.com/tilt-dev/tilt/internal/tiltfile/starkit"
     9  	"github.com/tilt-dev/tilt/pkg/logger"
    10  )
    11  
    12  // Additional functions for print output.
    13  type Plugin struct{}
    14  
    15  func NewPlugin() Plugin {
    16  	return Plugin{}
    17  }
    18  
    19  func (Plugin) OnStart(env *starkit.Environment) error {
    20  	err := env.AddBuiltin("warn", warn)
    21  	if err != nil {
    22  		return err
    23  	}
    24  	err = env.AddBuiltin("fail", fail)
    25  	if err != nil {
    26  		return err
    27  	}
    28  	err = env.AddBuiltin("exit", exit)
    29  	if err != nil {
    30  		return err
    31  	}
    32  	return nil
    33  }
    34  
    35  func fail(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
    36  	var msg string
    37  	err := starkit.UnpackArgs(thread, fn.Name(), args, kwargs, "msg", &msg)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	return nil, errors.New(msg)
    43  }
    44  
    45  func warn(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
    46  	var msg string
    47  	err := starkit.UnpackArgs(thread, fn.Name(), args, kwargs, "msg", &msg)
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  
    52  	ctx, err := starkit.ContextFromThread(thread)
    53  	if err != nil {
    54  		return nil, err
    55  	}
    56  
    57  	logger.Get(ctx).Warnf("%s", msg)
    58  
    59  	return starlark.None, nil
    60  }
    61  
    62  func exit(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
    63  	var codeVal starlark.Value
    64  	err := starkit.UnpackArgs(thread, fn.Name(), args, kwargs, "code?", &codeVal)
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  
    69  	ctx, err := starkit.ContextFromThread(thread)
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  
    74  	if codeVal != nil && codeVal != starlark.None {
    75  		code := codeVal.String()
    76  		if code != "" {
    77  			logger.Get(ctx).Infof("%s", code)
    78  		}
    79  	}
    80  
    81  	return starlark.None, starkit.ErrStopExecution
    82  }