Skip to content

Commit de99218

Browse files
author
m.kindritskiy
committed
fix #235 - do not fail if env sh declared but not defined
1 parent 0edc10b commit de99218

File tree

4 files changed

+60
-20
lines changed

4 files changed

+60
-20
lines changed

config/config/env.go

+40-4
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,48 @@ func (e *Envs) UnmarshalYAML(node *yaml.Node) error {
3636
keyNode := node.Content[i]
3737
valueNode := node.Content[i+1]
3838

39-
var env Env
40-
if err := valueNode.Decode(&env); err != nil {
39+
envAsStr := ""
40+
41+
if err := valueNode.Decode(&envAsStr); err == nil {
42+
e.Set(keyNode.Value, Env{Name: keyNode.Value, Value: envAsStr})
43+
continue
44+
}
45+
46+
envAsMap := struct {
47+
Name string
48+
Value string
49+
Sh *string
50+
Checksum *Checksum
51+
}{}
52+
53+
if err := valueNode.Decode(&envAsMap); err != nil {
4154
return err
4255
}
43-
env.Name = keyNode.Value
44-
e.Set(keyNode.Value, env)
56+
57+
env := Env{
58+
Name: keyNode.Value,
59+
Value: envAsMap.Value,
60+
Sh: "",
61+
Checksum: Checksum{},
62+
}
63+
64+
if env.Value == "" {
65+
if envAsMap.Sh == nil && envAsMap.Checksum == nil {
66+
return fmt.Errorf("lets: environment variable '%s' must have value or 'sh' or 'checksum'", keyNode.Value)
67+
}
68+
69+
if envAsMap.Sh != nil && envAsMap.Checksum != nil {
70+
return fmt.Errorf("lets: environment variable '%s' must have only 'sh' or 'checksum'", keyNode.Value)
71+
}
72+
73+
if envAsMap.Sh != nil {
74+
env.Sh = *envAsMap.Sh
75+
} else if envAsMap.Checksum != nil {
76+
env.Checksum = *envAsMap.Checksum
77+
}
78+
}
79+
80+
e.Set(env.Name, env)
4581
}
4682

4783
return nil

executor/executor.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ func (e *ExecuteError) ExitCode() int {
3737
}
3838

3939
type Executor struct {
40-
cfg *config.Config
41-
out io.Writer
40+
cfg *config.Config
41+
out io.Writer
4242
initCalled bool
4343
}
4444

tests/global_env.bats

+7-6
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ setup() {
99
@test "global_env: should provide env to command" {
1010
run lets global-env
1111
assert_success
12-
assert_line --index 0 "ONE=1"
13-
assert_line --index 1 "TWO=two"
14-
assert_line --index 2 "THREE=3"
15-
assert_line --index 3 "FOUR=4"
16-
assert_line --index 4 "BAR=Bar"
17-
assert_line --index 5 "FOO=bb1da47569d9fbe3b5f2216fdbd4c9b040ccb5c1"
12+
assert_line --index 0 "INT=1"
13+
assert_line --index 1 "STR=hi"
14+
assert_line --index 2 "STR_INT=1"
15+
assert_line --index 3 "BOOL=true"
16+
assert_line --index 4 "ORIGINAL=b"
17+
assert_line --index 5 "BAR=Bar"
18+
assert_line --index 6 "FOO=bb1da47569d9fbe3b5f2216fdbd4c9b040ccb5c1"
1819
}

tests/global_env/lets.yaml

+11-8
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
shell: bash
22

33
env:
4-
ONE: 1
5-
TWO: two
6-
THREE: "3"
4+
INT: 1
5+
STR: "hi"
6+
STR_INT: "1"
7+
BOOL: true
8+
ORIGINAL: "a"
79
BAR:
810
sh: echo Bar
911
FOO:
@@ -13,11 +15,12 @@ commands:
1315
global-env:
1416
description: Test global env
1517
env:
16-
FOUR: "4"
18+
ORIGINAL: "b"
1719
cmd: |
18-
echo ONE=${ONE}
19-
echo TWO=${TWO}
20-
echo THREE=${THREE}
21-
echo FOUR=${FOUR}
20+
echo INT=${INT}
21+
echo STR=${STR}
22+
echo STR_INT=${STR_INT}
23+
echo BOOL=${BOOL}
24+
echo ORIGINAL=${ORIGINAL}
2225
echo BAR=${BAR}
2326
echo FOO=${FOO}

0 commit comments

Comments
 (0)