20
20
watcher * fsnotify.Watcher
21
21
api * slack.Client
22
22
onlyOnce sync.Once
23
- envList = []string {".env" , ".env.test" , ".env.development" , ".env.production" }
23
+ envList = []string {
24
+ ".env" ,
25
+ ".env.test" ,
26
+ ".env.development" ,
27
+ ".env.production" ,
28
+ ".env.dev" ,
29
+ ".env.prod" ,
30
+ }
24
31
)
25
32
26
33
func nilChecker (err error ) {
@@ -41,23 +48,50 @@ func getEnvList() []string {
41
48
return envList
42
49
}
43
50
51
+ func hasNamedEnvFiles (filePath string ) bool {
52
+ var result bool
53
+
54
+ _ , fErr := os .Stat (filePath )
55
+
56
+ if os .IsNotExist (fErr ) {
57
+ result = false
58
+ }
59
+
60
+ if ! os .IsNotExist (fErr ) {
61
+ result = true
62
+ }
63
+
64
+ return result
65
+ }
66
+
44
67
// @dev start watching multiple envs
45
68
func registerEnvs () {
46
69
for _ , v := range getEnvList () {
47
70
wd , _ := os .Getwd ()
48
71
filePath := strings .Join ([]string {wd , "/" , v }, "" )
49
72
50
- wErr := watcher .Add (filePath )
51
- nilChecker (wErr )
52
- color .Blue (fmt .Sprintf ("watching: %v" , v ))
73
+ // add only existing envs
74
+ ok := hasNamedEnvFiles (filePath )
75
+
76
+ if ok {
77
+ wErr := watcher .Add (filePath )
78
+ nilChecker (wErr )
79
+ color .Blue (fmt .Sprintf ("watching: %v" , v ))
80
+ }
53
81
}
54
82
}
55
83
56
84
// @dev load multiple envs and init slack instance
57
85
func initSlack () {
58
86
for _ , v := range envList {
59
- lErr := godotenv .Load (v )
60
- nilChecker (lErr )
87
+ wd , _ := os .Getwd ()
88
+ filePath := strings .Join ([]string {wd , "/" , v }, "" )
89
+ ok := hasNamedEnvFiles (filePath )
90
+
91
+ if ok {
92
+ lErr := godotenv .Load (v )
93
+ nilChecker (lErr )
94
+ }
61
95
}
62
96
63
97
_api := slack .New (os .Getenv ("SLACK_BOT_USER_OAUTH_TOKEN" ))
@@ -66,67 +100,83 @@ func initSlack() {
66
100
67
101
connectionMsg := fmt .Sprintf ("slack API connected to: %s" , res .Team )
68
102
color .Green (connectionMsg )
69
-
103
+
70
104
api = _api
71
105
}
72
106
73
107
func updateEnvs () {
74
- wd , _ := os .Getwd ()
75
-
76
108
for _ , v := range getEnvList () {
77
- data , rErr := os .ReadFile (v )
78
- nilChecker (rErr )
79
-
80
- wrapDirName := "config"
81
- wrapDirPath := strings .Join ([]string {wd , "/" , wrapDirName , "/" }, "" )
82
- wrapEnvName := strings .Join ([]string {v , "." , wrapDirName }, "" )
83
- wrapEnvFile := strings .Join ([]string {wrapDirPath , wrapEnvName }, "" )
84
-
85
- // @dev owning user has a read and write permission: 0644
86
- os .WriteFile (wrapEnvFile , data , fs .FileMode (config .OWNER_PERM ))
109
+ wd , _ := os .Getwd ()
110
+ filePath := strings .Join ([]string {wd , "/" , v }, "" )
111
+
112
+ ok := hasNamedEnvFiles (filePath )
113
+
114
+ if ok {
115
+ data , rErr := os .ReadFile (v )
116
+ nilChecker (rErr )
117
+
118
+ wrapDirName := "config"
119
+ wrapDirPath := strings .Join ([]string {wd , "/" , wrapDirName , "/" }, "" )
120
+ wrapEnvName := strings .Join ([]string {v , "." , wrapDirName }, "" )
121
+ wrapEnvFile := strings .Join ([]string {wrapDirPath , wrapEnvName }, "" )
122
+
123
+ // @dev owning user has a read and write permission: 0644
124
+ os .WriteFile (wrapEnvFile , data , fs .FileMode (config .OWNER_PERM ))
125
+ }
87
126
}
88
127
}
89
128
90
129
func cleanupEnvs () {
130
+ userEnvList := []string {}
91
131
wd , _ := os .Getwd ()
92
- for _ , v := range getEnvList () {
93
- fullPathForWrapEnv := strings .Join ([]string {wd , "/" , "config" , "/" , v , ".config" }, "" )
94
- _ , sErr := os .Stat (fullPathForWrapEnv )
95
132
96
- if ok := os .IsExist (sErr ); ok {
97
- rErr := os .Remove (fullPathForWrapEnv )
98
- nilChecker (rErr )
133
+ for _ , v := range getEnvList () {
134
+ ok := hasNamedEnvFiles (strings .Join ([]string {wd , "/" , v }, "" ))
135
+ if ok {
136
+ userEnvList = append (userEnvList , v )
99
137
}
138
+ }
100
139
140
+ for _ , v := range userEnvList {
141
+ fullPathForWrapEnv := strings .Join ([]string {wd , "/" , "config" , "/" , v , ".config" }, "" )
142
+
143
+ rErr := os .Remove (fullPathForWrapEnv )
144
+ nilChecker (rErr )
145
+
101
146
_ , cErr := os .Create (fullPathForWrapEnv )
102
147
nilChecker (cErr )
103
-
148
+
104
149
_data , rErr := os .ReadFile (v )
105
150
nilChecker (rErr )
106
-
151
+
107
152
wErr := os .WriteFile (fullPathForWrapEnv , _data , fs .FileMode (config .OWNER_PERM ))
108
153
nilChecker (wErr )
109
154
}
110
-
111
155
color .Red ("envs config setup done" )
112
156
}
113
157
114
158
func sendSlackDM () {
115
159
wd , _ := os .Getwd ()
116
-
117
- // has
160
+
118
161
envStringMapForWrapEnv := make (map [string ]string )
119
162
envStringForWrapEnv := "DEFAULT_VALUE"
120
-
163
+
121
164
for _ , v := range getEnvList () {
122
- if isDone := isUpdateFinished (); isDone [v ] {
123
- fullPathForWrapEnv := strings .Join ([]string {wd , "/" , "config" , "/" , v , ".config" }, "" )
124
- wrapEnvName := strings .Join ([]string {v , ".config" }, "" )
165
+ filePath := strings .Join ([]string {wd , "/" , v }, "" )
125
166
126
- envStringForWrapEnv = convertEnvMapToString (fullPathForWrapEnv , wrapEnvName )
127
- envStringMapForWrapEnv [wrapEnvName ] = envStringForWrapEnv
167
+ ok := hasNamedEnvFiles (filePath )
128
168
129
- notifyEnvChange (envStringMapForWrapEnv [wrapEnvName ], v )
169
+ if ok {
170
+ if isDone := isUpdateFinished (); isDone [v ] {
171
+
172
+ fullPathForWrapEnv := strings .Join ([]string {wd , "/" , "config" , "/" , v , ".config" }, "" )
173
+ wrapEnvName := strings .Join ([]string {v , ".config" }, "" )
174
+
175
+ envStringForWrapEnv = convertEnvMapToString (fullPathForWrapEnv , wrapEnvName )
176
+ envStringMapForWrapEnv [wrapEnvName ] = envStringForWrapEnv
177
+
178
+ notifyEnvChange (envStringMapForWrapEnv [wrapEnvName ], v )
179
+ }
130
180
}
131
181
}
132
182
}
@@ -139,12 +189,16 @@ func isUpdateFinished() map[string]bool {
139
189
wd , _ := os .Getwd ()
140
190
fullPath := strings .Join ([]string {wd , "/" , v }, "" )
141
191
142
- _data , _rErr := os .ReadFile (fullPath )
143
- nilChecker (_rErr )
144
- data := string (_data )
192
+ ok := hasNamedEnvFiles (fullPath )
145
193
146
- hasOwllyTrigger := strings .Contains (data , config .RESERVED )
147
- isDone [v ] = hasOwllyTrigger
194
+ if ok {
195
+ _data , _rErr := os .ReadFile (fullPath )
196
+ nilChecker (_rErr )
197
+ data := string (_data )
198
+
199
+ hasOwllyTrigger := strings .Contains (data , config .RESERVED )
200
+ isDone [v ] = hasOwllyTrigger
201
+ }
148
202
}
149
203
150
204
return isDone
0 commit comments