Skip to content
This repository was archived by the owner on May 30, 2024. It is now read-only.

Commit b9dc1e9

Browse files
author
Noah Hanjun Lee
authored
Fix not to display the deployer for the approvers select in Slack (#151)
1 parent f243811 commit b9dc1e9

File tree

3 files changed

+120
-83
lines changed

3 files changed

+120
-83
lines changed

internal/server/slack/deploy.go

Lines changed: 86 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
125150
func 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
}

internal/server/slack/lock.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ func (s *Slack) handleUnlockCmd(c *gin.Context) {
181181
// Build the modal with unlocked envs.
182182
locks, err := s.i.ListLocksOfRepo(ctx, r)
183183
if len(locks) == 0 {
184-
postResponseMessage(cmd.ChannelID, cmd.ResponseURL, fmt.Sprintf("There is no locked envs in the `%s/%s` repository.", ns, n))
184+
postResponseMessage(cmd.ChannelID, cmd.ResponseURL, fmt.Sprintf("There is no locked environments in the `%s/%s` repository.", ns, n))
185185
c.Status(http.StatusOK)
186186
return
187187
} else if err != nil {
@@ -273,7 +273,7 @@ func (s *Slack) interactLock(c *gin.Context) {
273273
UserID: cu.Edges.User.ID,
274274
RepoID: cb.Edges.Repo.ID,
275275
}); err != nil {
276-
s.log.Error("It has failed to lock the env.", zap.Error(err))
276+
s.log.Error("It has failed to lock the environment.", zap.Error(err))
277277
c.Status(http.StatusInternalServerError)
278278
return
279279
}
@@ -306,7 +306,7 @@ func (s *Slack) interactUnlock(c *gin.Context) {
306306
}
307307

308308
if err := s.i.DeleteLock(ctx, lock); err != nil {
309-
s.log.Error("It has failed to unlock the env.", zap.Error(err))
309+
s.log.Error("It has failed to unlock the environment.", zap.Error(err))
310310
c.Status(http.StatusInternalServerError)
311311
return
312312
}

internal/server/slack/rollback.go

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ func (s *Slack) handleRollbackCmd(c *gin.Context) {
7777
return
7878
}
7979

80+
perms = s.filterPerms(perms, cu)
81+
8082
cb, err := s.i.CreateCallback(ctx, &ent.Callback{
8183
Type: callback.TypeRollback,
8284
RepoID: r.ID,
@@ -136,37 +138,42 @@ func buildRollbackView(callbackID string, as []*deploymentAggregation, perms []*
136138
nil))
137139
}
138140

141+
sets := []slack.Block{
142+
slack.NewInputBlock(
143+
blockDeployment,
144+
slack.NewTextBlockObject(slack.PlainTextType, "Deployments", false, false),
145+
slack.NewOptionsGroupSelectBlockElement(
146+
slack.OptTypeStatic,
147+
slack.NewTextBlockObject(slack.PlainTextType, "Select target deployment", false, false),
148+
actionDeployment,
149+
groups...,
150+
),
151+
),
152+
}
153+
154+
if len(approvers) > 0 {
155+
sets = append(sets, slack.InputBlock{
156+
Type: slack.MBTInput,
157+
BlockID: blockApprovers,
158+
Optional: true,
159+
Label: slack.NewTextBlockObject(slack.PlainTextType, "Approvers", false, false),
160+
Element: slack.NewOptionsSelectBlockElement(
161+
slack.MultiOptTypeStatic,
162+
slack.NewTextBlockObject(slack.PlainTextType, "Select approvers", false, false),
163+
actionApprovers,
164+
approvers...,
165+
),
166+
})
167+
}
168+
139169
return slack.ModalViewRequest{
140170
Type: slack.VTModal,
141171
CallbackID: callbackID,
142172
Title: slack.NewTextBlockObject(slack.PlainTextType, "Rollback", false, false),
143173
Submit: slack.NewTextBlockObject(slack.PlainTextType, "Submit", false, false),
144174
Close: slack.NewTextBlockObject(slack.PlainTextType, "Close", false, false),
145175
Blocks: slack.Blocks{
146-
BlockSet: []slack.Block{
147-
slack.NewInputBlock(
148-
blockDeployment,
149-
slack.NewTextBlockObject(slack.PlainTextType, "Deployments", false, false),
150-
slack.NewOptionsGroupSelectBlockElement(
151-
slack.OptTypeStatic,
152-
slack.NewTextBlockObject(slack.PlainTextType, "Select target deployment", false, false),
153-
actionDeployment,
154-
groups...,
155-
),
156-
),
157-
slack.InputBlock{
158-
Type: slack.MBTInput,
159-
BlockID: blockApprovers,
160-
Optional: true,
161-
Label: slack.NewTextBlockObject(slack.PlainTextType, "Approvers", false, false),
162-
Element: slack.NewOptionsSelectBlockElement(
163-
slack.MultiOptTypeStatic,
164-
slack.NewTextBlockObject(slack.PlainTextType, "Select approvers", false, false),
165-
actionApprovers,
166-
approvers...,
167-
),
168-
},
169-
},
176+
BlockSet: sets,
170177
},
171178
}
172179
}

0 commit comments

Comments
 (0)