github.com/grahambrereton-form3/tilt@v0.10.18/internal/tiltfile/os/os.go (about)

     1  package os
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  
     7  	"go.starlark.net/starlark"
     8  
     9  	"github.com/windmilleng/tilt/internal/tiltfile/starkit"
    10  )
    11  
    12  // The starlark OS module.
    13  // Modeled after Bazel's repository_os
    14  // https://docs.bazel.build/versions/master/skylark/lib/repository_os.html
    15  // and Python's OS module
    16  // https://docs.python.org/3/library/os.html
    17  type Extension struct {
    18  }
    19  
    20  func NewExtension() Extension {
    21  	return Extension{}
    22  }
    23  
    24  func (e Extension) OnStart(env *starkit.Environment) error {
    25  	environValue, err := environ()
    26  	if err != nil {
    27  		return err
    28  	}
    29  	return env.AddValue("os.environ", environValue)
    30  }
    31  
    32  func environ() (starlark.Value, error) {
    33  	env := os.Environ()
    34  	result := starlark.NewDict(len(env))
    35  	for _, e := range os.Environ() {
    36  		pair := strings.SplitN(e, "=", 2)
    37  		err := result.SetKey(starlark.String(pair[0]), starlark.String(pair[1]))
    38  		if err != nil {
    39  			return nil, err
    40  		}
    41  	}
    42  	result.Freeze()
    43  	return result, nil
    44  }