diff --git a/cmd/dagger/cmd/compute.go b/cmd/dagger/cmd/compute.go index ae539d68..7cf7bfab 100644 --- a/cmd/dagger/cmd/compute.go +++ b/cmd/dagger/cmd/compute.go @@ -13,7 +13,9 @@ import ( ) var ( - env *dagger.Env + // FIXME: global shared cue compiler is a workaround to limitation in the cue API + // This can be made cleaner by moving InputValue (or equivalent) under Env. + cc = &dagger.Compiler{} input *dagger.InputValue updater *dagger.InputValue ) @@ -33,6 +35,10 @@ var computeCmd = &cobra.Command{ lg := logger.New() ctx := lg.WithContext(appcontext.Context()) + env, err := dagger.NewEnv(cc) + if err != nil { + lg.Fatal().Err(err).Msg("unable to initialize environment") + } if err := updater.SourceFlag().Set(args[0]); err != nil { lg.Fatal().Err(err).Msg("invalid local source") } @@ -60,21 +66,9 @@ var computeCmd = &cobra.Command{ } func init() { - // Why is this stuff here? - // 1. input must be global for flag parsing - // 2. updater must be global for flag parsing - // 3. env must have same compiler as input & updater, - // therefore it must be global too. - // - // FIXME: roll up InputValue into Env? var err error - env, err = dagger.NewEnv() - if err != nil { - panic(err) - } - // Setup --input-* flags - input, err = dagger.NewInputValue(env.Compiler(), "{}") + input, err = dagger.NewInputValue(cc, "{}") if err != nil { panic(err) } @@ -84,7 +78,7 @@ func init() { computeCmd.Flags().Var(input.CueFlag(), "input-cue", "CUE") // Setup (future) --from-* flags - updater, err = dagger.NewInputValue(env.Compiler(), "[...{do:string, ...}]") + updater, err = dagger.NewInputValue(cc, "[...{do:string, ...}]") if err != nil { panic(err) } diff --git a/dagger/env.go b/dagger/env.go index a5582dc3..24f665e0 100644 --- a/dagger/env.go +++ b/dagger/env.go @@ -68,8 +68,10 @@ func (env *Env) SetUpdater(u interface{}) error { return nil } -func NewEnv() (*Env, error) { - cc := &Compiler{} +func NewEnv(cc *Compiler) (*Env, error) { + if cc == nil { + cc = &Compiler{} + } empty, err := cc.EmptyStruct() if err != nil { return nil, err diff --git a/dagger/env_test.go b/dagger/env_test.go index f22f943c..c09b6426 100644 --- a/dagger/env_test.go +++ b/dagger/env_test.go @@ -6,7 +6,7 @@ import ( ) func TestSimpleEnvSet(t *testing.T) { - env, err := NewEnv() + env, err := NewEnv(nil) if err != nil { t.Fatal(err) } @@ -23,7 +23,7 @@ func TestSimpleEnvSet(t *testing.T) { } func TestSimpleEnvSetFromInputValue(t *testing.T) { - env, err := NewEnv() + env, err := NewEnv(nil) if err != nil { t.Fatal(err) } @@ -45,7 +45,7 @@ func TestSimpleEnvSetFromInputValue(t *testing.T) { } func TestEnvInputComponent(t *testing.T) { - env, err := NewEnv() + env, err := NewEnv(nil) if err != nil { t.Fatal(err) } diff --git a/dagger/input_test.go b/dagger/input_test.go index ce079b08..d7172edc 100644 --- a/dagger/input_test.go +++ b/dagger/input_test.go @@ -6,7 +6,7 @@ import ( ) func TestEnvInputFlag(t *testing.T) { - env, err := NewEnv() + env, err := NewEnv(nil) if err != nil { t.Fatal(err) }