@@ -92,6 +92,8 @@ func (s *Slack) handleDeployCmd(c *gin.Context) {
9292 return
9393 }
9494
95+ perms = s .filterPerms (perms , cu )
96+
9597 // Create a new callback to interact with submissions.
9698 cb , err := s .i .CreateCallback (ctx , & ent.Callback {
9799 Type : callback .TypeDeploy ,
@@ -122,6 +124,29 @@ func parseCmd(cmd string) (string, string) {
122124 return nn [0 ], nn [1 ]
123125}
124126
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+
125150func buildDeployView (callbackID string , c * vo.Config , perms []* ent.Perm ) slack.ModalViewRequest {
126151 envs := []* slack.OptionBlockObject {}
127152 for _ , env := range c .Envs {
@@ -150,69 +175,74 @@ func buildDeployView(callbackID string, c *vo.Config, perms []*ent.Perm) slack.M
150175 })
151176 }
152177
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+
153238 return slack.ModalViewRequest {
154239 Type : slack .VTModal ,
155240 CallbackID : callbackID ,
156241 Title : slack .NewTextBlockObject (slack .PlainTextType , "Deploy" , false , false ),
157242 Submit : slack .NewTextBlockObject (slack .PlainTextType , "Submit" , false , false ),
158243 Close : slack .NewTextBlockObject (slack .PlainTextType , "Close" , false , false ),
159244 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 ,
216246 },
217247 }
218248}
0 commit comments