Remove path based task lookup

Signed-off-by: Helder Correia <174525+helderco@users.noreply.github.com>
This commit is contained in:
Helder Correia
2022-03-09 11:29:26 -01:00
parent 17c45ea36c
commit 34b6c289dd
7 changed files with 71 additions and 109 deletions

View File

@@ -13,19 +13,37 @@ import (
)
func init() {
Register("client.env.*", func() Task { return &clientEnvTask{} })
Register("ClientEnv", func() Task { return &clientEnvTask{} })
}
type clientEnvTask struct {
}
func (t clientEnvTask) Run(ctx context.Context, pctx *plancontext.Context, _ solver.Solver, v *compiler.Value) (*compiler.Value, error) {
lg := log.Ctx(ctx)
log.Ctx(ctx).Debug().Msg("loading environment variables")
envvar := v.ParentLabel(1)
fields, err := v.Fields()
if err != nil {
return nil, err
}
lg.Debug().Str("envvar", envvar).Msg("loading environment variable")
envs := make(map[string]interface{})
for _, field := range fields {
if field.Selector == cue.Str("$dagger") {
continue
}
envvar := field.Label()
val, err := t.getEnv(envvar, field.Value, pctx)
if err != nil {
return nil, err
}
envs[envvar] = val
}
return compiler.NewValue().FillFields(envs)
}
func (t clientEnvTask) getEnv(envvar string, v *compiler.Value, pctx *plancontext.Context) (interface{}, error) {
env := os.Getenv(envvar)
if env == "" {
return nil, fmt.Errorf("environment variable %q not set", envvar)
@@ -33,21 +51,20 @@ func (t clientEnvTask) Run(ctx context.Context, pctx *plancontext.Context, _ sol
// Resolve default in disjunction if a type hasn't been specified
val, _ := v.Default()
out := compiler.NewValue()
if plancontext.IsSecretValue(val) {
secret := pctx.Secrets.New(env)
return out.Fill(secret.MarshalCUE())
return secret.MarshalCUE(), nil
}
if val.IsConcrete() {
return nil, fmt.Errorf("unexpected concrete value, please use a type")
return nil, fmt.Errorf("%s: unexpected concrete value, please use a type", envvar)
}
k := val.IncompleteKind()
if k == cue.StringKind {
return out.Fill(env)
return env, nil
}
return nil, fmt.Errorf("unsupported type %q", k)
return nil, fmt.Errorf("%s: unsupported type %q", envvar, k)
}