1
1
package envsec
2
2
3
3
import (
4
+ "bytes"
4
5
"encoding/json"
5
6
"os/exec"
6
7
@@ -15,7 +16,7 @@ func Env(projectDir string) (map[string]string, error) {
15
16
return nil , err
16
17
}
17
18
18
- if err := ensureEnvsecInitialized (); err != nil {
19
+ if err := ensureEnvsecInitialized (projectDir ); err != nil {
19
20
return nil , err
20
21
}
21
22
@@ -29,30 +30,38 @@ func ensureEnvsecInstalled() error {
29
30
return nil
30
31
}
31
32
32
- func ensureEnvsecInitialized () error {
33
- cmd := exec .Command ("envsec" , "init" )
34
- // TODO handle user not logged in
35
- // envsec init is currently broken in that it exits with 0 even if the user is not logged in
36
- return cmd .Run ()
33
+ func ensureEnvsecInitialized (projectDir string ) error {
34
+ cmd := exec .Command ("envsec" , "init" , "--json-errors" )
35
+ cmd .Dir = projectDir
36
+ var bufErr bytes.Buffer
37
+ cmd .Stderr = & bufErr
38
+
39
+ if err := cmd .Run (); err != nil {
40
+ return handleError (& bufErr , err )
41
+ }
42
+ return nil
37
43
}
38
44
39
45
func envsecList (projectDir string ) (map [string ]string , error ) {
40
46
cmd := exec .Command (
41
47
"envsec" , "ls" , "--show" ,
42
48
"--format" , "json" ,
43
- "--environment" , "dev" )
49
+ "--environment" , "dev" ,
50
+ "--json-errors" )
44
51
cmd .Dir = projectDir
52
+ var bufErr bytes.Buffer
53
+ cmd .Stderr = & bufErr
45
54
out , err := cmd .Output ()
46
55
if err != nil {
47
- return nil , errors . WithStack ( err )
56
+ return nil , handleError ( & bufErr , err )
48
57
}
49
58
var values []struct {
50
59
Name string `json:"name"`
51
60
Value string `json:"value"`
52
61
}
53
62
54
63
if err := json .Unmarshal (out , & values ); err != nil {
55
- return nil , errors .Wrap (err , "failed to parse envsec output" )
64
+ return nil , errors .Wrapf (err , "failed to parse envsec output: %s" , out )
56
65
}
57
66
58
67
m := map [string ]string {}
@@ -61,3 +70,13 @@ func envsecList(projectDir string) (map[string]string, error) {
61
70
}
62
71
return m , nil
63
72
}
73
+
74
+ func handleError (stderr * bytes.Buffer , err error ) error {
75
+ var errResponse struct {
76
+ Error string `json:"error"`
77
+ }
78
+ if err := json .Unmarshal (stderr .Bytes (), & errResponse ); err == nil {
79
+ return usererr .New (errResponse .Error )
80
+ }
81
+ return errors .WithStack (err )
82
+ }
0 commit comments