@@ -92,6 +92,8 @@ func (s *Slack) handleDeployCmd(c *gin.Context) {
92
92
return
93
93
}
94
94
95
+ perms = s .filterPerms (perms , cu )
96
+
95
97
// Create a new callback to interact with submissions.
96
98
cb , err := s .i .CreateCallback (ctx , & ent.Callback {
97
99
Type : callback .TypeDeploy ,
@@ -122,6 +124,29 @@ func parseCmd(cmd string) (string, string) {
122
124
return nn [0 ], nn [1 ]
123
125
}
124
126
127
+ // filterPerms returns permissions except the deployer.
128
+ func (s * Slack ) filterPerms (perms []* ent.Perm , cu * ent.ChatUser ) []* ent.Perm {
129
+ ret := []* ent.Perm {}
130
+
131
+ for _ , p := range perms {
132
+ if p .Edges .User == nil {
133
+ s .log .Warn ("The user edge of perm is not found." , zap .Int ("perm_id" , p .ID ))
134
+ continue
135
+ }
136
+
137
+ if cu .Edges .User == nil {
138
+ s .log .Warn ("The user edge of chat-user is not found." , zap .String ("chat_user_id" , cu .ID ))
139
+ continue
140
+ }
141
+
142
+ if p .Edges .User .ID != cu .Edges .User .ID {
143
+ ret = append (ret , p )
144
+ }
145
+ }
146
+
147
+ return ret
148
+ }
149
+
125
150
func buildDeployView (callbackID string , c * vo.Config , perms []* ent.Perm ) slack.ModalViewRequest {
126
151
envs := []* slack.OptionBlockObject {}
127
152
for _ , env := range c .Envs {
@@ -150,69 +175,74 @@ func buildDeployView(callbackID string, c *vo.Config, perms []*ent.Perm) slack.M
150
175
})
151
176
}
152
177
178
+ set := []slack.Block {
179
+ slack .NewInputBlock (
180
+ blockEnv ,
181
+ slack .NewTextBlockObject (slack .PlainTextType , "Environment" , false , false ),
182
+ slack .NewOptionsSelectBlockElement (
183
+ slack .OptTypeStatic ,
184
+ slack .NewTextBlockObject (slack .PlainTextType , "Select target environment" , false , false ),
185
+ actionEnv ,
186
+ envs ... ,
187
+ ),
188
+ ),
189
+ slack .NewInputBlock (
190
+ blockType ,
191
+ slack .NewTextBlockObject (slack .PlainTextType , "Type" , false , false ),
192
+ slack .NewOptionsSelectBlockElement (
193
+ slack .OptTypeStatic ,
194
+ slack .NewTextBlockObject (slack .PlainTextType , "Select your ref type" , false , false ),
195
+ actionType ,
196
+ slack .NewOptionBlockObject (
197
+ "commit" ,
198
+ slack .NewTextBlockObject (slack .PlainTextType , "Commit" , false , false ),
199
+ nil ,
200
+ ),
201
+ slack .NewOptionBlockObject (
202
+ "branch" ,
203
+ slack .NewTextBlockObject (slack .PlainTextType , "Branch" , false , false ),
204
+ nil ,
205
+ ),
206
+ slack .NewOptionBlockObject (
207
+ "tag" ,
208
+ slack .NewTextBlockObject (slack .PlainTextType , "Tag" , false , false ),
209
+ nil ,
210
+ ),
211
+ ),
212
+ ),
213
+ slack .NewInputBlock (
214
+ blockRef ,
215
+ slack .NewTextBlockObject (slack .PlainTextType , "Ref" , false , false ),
216
+ slack .NewPlainTextInputBlockElement (
217
+ slack .NewTextBlockObject (slack .PlainTextType , "E.g. Commit - 25a667d6, Branch - main, Tag - v0.1.2" , false , false ),
218
+ actionRef ,
219
+ ),
220
+ ),
221
+ }
222
+
223
+ if len (approvers ) > 0 {
224
+ set = append (set , slack.InputBlock {
225
+ Type : slack .MBTInput ,
226
+ BlockID : blockApprovers ,
227
+ Label : slack .NewTextBlockObject (slack .PlainTextType , "Approvers" , false , false ),
228
+ Optional : true ,
229
+ Element : slack .NewOptionsSelectBlockElement (
230
+ slack .MultiOptTypeStatic ,
231
+ slack .NewTextBlockObject (slack .PlainTextType , "Select approvers" , false , false ),
232
+ actionApprovers ,
233
+ approvers ... ,
234
+ ),
235
+ })
236
+ }
237
+
153
238
return slack.ModalViewRequest {
154
239
Type : slack .VTModal ,
155
240
CallbackID : callbackID ,
156
241
Title : slack .NewTextBlockObject (slack .PlainTextType , "Deploy" , false , false ),
157
242
Submit : slack .NewTextBlockObject (slack .PlainTextType , "Submit" , false , false ),
158
243
Close : slack .NewTextBlockObject (slack .PlainTextType , "Close" , false , false ),
159
244
Blocks : slack.Blocks {
160
- BlockSet : []slack.Block {
161
- slack .NewInputBlock (
162
- blockEnv ,
163
- slack .NewTextBlockObject (slack .PlainTextType , "Environment" , false , false ),
164
- slack .NewOptionsSelectBlockElement (
165
- slack .OptTypeStatic ,
166
- slack .NewTextBlockObject (slack .PlainTextType , "Select target environment" , false , false ),
167
- actionEnv ,
168
- envs ... ,
169
- ),
170
- ),
171
- slack .NewInputBlock (
172
- blockType ,
173
- slack .NewTextBlockObject (slack .PlainTextType , "Type" , false , false ),
174
- slack .NewOptionsSelectBlockElement (
175
- slack .OptTypeStatic ,
176
- slack .NewTextBlockObject (slack .PlainTextType , "Select your ref type" , false , false ),
177
- actionType ,
178
- slack .NewOptionBlockObject (
179
- "commit" ,
180
- slack .NewTextBlockObject (slack .PlainTextType , "Commit" , false , false ),
181
- nil ,
182
- ),
183
- slack .NewOptionBlockObject (
184
- "branch" ,
185
- slack .NewTextBlockObject (slack .PlainTextType , "Branch" , false , false ),
186
- nil ,
187
- ),
188
- slack .NewOptionBlockObject (
189
- "tag" ,
190
- slack .NewTextBlockObject (slack .PlainTextType , "Tag" , false , false ),
191
- nil ,
192
- ),
193
- ),
194
- ),
195
- slack .NewInputBlock (
196
- blockRef ,
197
- slack .NewTextBlockObject (slack .PlainTextType , "Ref" , false , false ),
198
- slack .NewPlainTextInputBlockElement (
199
- slack .NewTextBlockObject (slack .PlainTextType , "E.g. Commit - 25a667d6, Branch - main, Tag - v0.1.2" , false , false ),
200
- actionRef ,
201
- ),
202
- ),
203
- slack.InputBlock {
204
- Type : slack .MBTInput ,
205
- BlockID : blockApprovers ,
206
- Label : slack .NewTextBlockObject (slack .PlainTextType , "Approvers" , false , false ),
207
- Optional : true ,
208
- Element : slack .NewOptionsSelectBlockElement (
209
- slack .MultiOptTypeStatic ,
210
- slack .NewTextBlockObject (slack .PlainTextType , "Select approvers" , false , false ),
211
- actionApprovers ,
212
- approvers ... ,
213
- ),
214
- },
215
- },
245
+ BlockSet : set ,
216
246
},
217
247
}
218
248
}
0 commit comments