-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrender.go
More file actions
68 lines (58 loc) · 2.07 KB
/
Copy pathrender.go
File metadata and controls
68 lines (58 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package taskrun
import (
"errors"
"github.com/gookit/taskrun/internal/render"
)
// renderVars is the read-only view available to template interpolation and
// condition evaluation. The implementation lives in internal/render.
type renderVars = render.Vars
// conditionEvaluator is a compiled condition. An empty condition is always true.
type conditionEvaluator func() (bool, error)
// wrapRender maps a rendering error onto the package error kinds. A deferred
// value keeps the package sentinel so Inspect can report it.
func wrapRender(err error) error {
if err == nil {
return nil
}
if errors.Is(err, render.ErrDeferred) {
return errDeferred
}
var rerr *render.Error
if errors.As(err, &rerr) {
kind := ErrKindInvalidDefinition
if rerr.Kind == render.KindInvalidRequest {
kind = ErrKindInvalidRequest
}
return &RunError{Kind: kind, Err: err}
}
return err
}
// renderTemplate interpolates namespaced templates. "$${" escapes a literal
// "${"; unknown references are errors.
func renderTemplate(source string, rv renderVars) (string, error) {
out, err := render.Render(source, rv)
if err != nil {
return "", wrapRender(err)
}
return out, nil
}
// lookupEnv resolves an environment name honoring Windows case-insensitivity.
func lookupEnv(env map[string]string, name string) (string, bool) { return render.LookupEnv(env, name) }
// resolveVarLevel evaluates one level of static variables in dependency order.
func resolveVarLevel(level map[string]any, base renderVars) (map[string]any, error) {
out, err := render.ResolveLevel(level, base)
if err != nil {
return nil, wrapRender(err)
}
return out, nil
}
// detectVarCycle rejects static variable cycles before any request runs.
func detectVarCycle(level map[string]any) error { return wrapRender(render.DetectCycle(level)) }
// compileCondition compiles an expr condition against the read-only view.
func compileCondition(source string, rv renderVars) (conditionEvaluator, error) {
check, err := render.CompileCondition(source, rv)
if err != nil {
return nil, wrapRender(err)
}
return conditionEvaluator(check), nil
}