From 080dd1825cf4688bbfb71578f23f4b1fd7eb480e Mon Sep 17 00:00:00 2001 From: noah Date: Fri, 8 Oct 2021 05:27:47 +0900 Subject: [PATCH 1/3] Fix not to display the deployer in the approvers select. --- internal/server/slack/deploy.go | 142 ++++++++++++++++++------------ internal/server/slack/rollback.go | 55 +++++++----- 2 files changed, 117 insertions(+), 80 deletions(-) diff --git a/internal/server/slack/deploy.go b/internal/server/slack/deploy.go index cb51d5f8..beb9c1ff 100644 --- a/internal/server/slack/deploy.go +++ b/internal/server/slack/deploy.go @@ -92,6 +92,8 @@ func (s *Slack) handleDeployCmd(c *gin.Context) { return } + perms = s.filterPerms(perms, cu) + // Create a new callback to interact with submissions. cb, err := s.i.CreateCallback(ctx, &ent.Callback{ Type: callback.TypeDeploy, @@ -122,6 +124,29 @@ func parseCmd(cmd string) (string, string) { return nn[0], nn[1] } +// filterPerms returns permissions except the deployer. +func (s *Slack) filterPerms(perms []*ent.Perm, cu *ent.ChatUser) []*ent.Perm { + ret := []*ent.Perm{} + + for _, p := range perms { + if p.Edges.User == nil { + s.log.Warn("The user edge of perm is not found.", zap.Int("perm_id", p.ID)) + continue + } + + if cu.Edges.User == nil { + s.log.Warn("The user edge of chat-user is not found.", zap.String("chat_user_id", cu.ID)) + continue + } + + if p.Edges.User.ID != cu.Edges.User.ID { + ret = append(ret, p) + } + } + + return ret +} + func buildDeployView(callbackID string, c *vo.Config, perms []*ent.Perm) slack.ModalViewRequest { envs := []*slack.OptionBlockObject{} for _, env := range c.Envs { @@ -150,6 +175,66 @@ func buildDeployView(callbackID string, c *vo.Config, perms []*ent.Perm) slack.M }) } + set := []slack.Block{ + slack.NewInputBlock( + blockEnv, + slack.NewTextBlockObject(slack.PlainTextType, "Environment", false, false), + slack.NewOptionsSelectBlockElement( + slack.OptTypeStatic, + slack.NewTextBlockObject(slack.PlainTextType, "Select target environment", false, false), + actionEnv, + envs..., + ), + ), + slack.NewInputBlock( + blockType, + slack.NewTextBlockObject(slack.PlainTextType, "Type", false, false), + slack.NewOptionsSelectBlockElement( + slack.OptTypeStatic, + slack.NewTextBlockObject(slack.PlainTextType, "Select your ref type", false, false), + actionType, + slack.NewOptionBlockObject( + "commit", + slack.NewTextBlockObject(slack.PlainTextType, "Commit", false, false), + nil, + ), + slack.NewOptionBlockObject( + "branch", + slack.NewTextBlockObject(slack.PlainTextType, "Branch", false, false), + nil, + ), + slack.NewOptionBlockObject( + "tag", + slack.NewTextBlockObject(slack.PlainTextType, "Tag", false, false), + nil, + ), + ), + ), + slack.NewInputBlock( + blockRef, + slack.NewTextBlockObject(slack.PlainTextType, "Ref", false, false), + slack.NewPlainTextInputBlockElement( + slack.NewTextBlockObject(slack.PlainTextType, "E.g. Commit - 25a667d6, Branch - main, Tag - v0.1.2", false, false), + actionRef, + ), + ), + } + + if len(approvers) != 0 { + set = append(set, slack.InputBlock{ + Type: slack.MBTInput, + BlockID: blockApprovers, + Label: slack.NewTextBlockObject(slack.PlainTextType, "Approvers", false, false), + Optional: true, + Element: slack.NewOptionsSelectBlockElement( + slack.MultiOptTypeStatic, + slack.NewTextBlockObject(slack.PlainTextType, "Select approvers", false, false), + actionApprovers, + approvers..., + ), + }) + } + return slack.ModalViewRequest{ Type: slack.VTModal, CallbackID: callbackID, @@ -157,62 +242,7 @@ func buildDeployView(callbackID string, c *vo.Config, perms []*ent.Perm) slack.M Submit: slack.NewTextBlockObject(slack.PlainTextType, "Submit", false, false), Close: slack.NewTextBlockObject(slack.PlainTextType, "Close", false, false), Blocks: slack.Blocks{ - BlockSet: []slack.Block{ - slack.NewInputBlock( - blockEnv, - slack.NewTextBlockObject(slack.PlainTextType, "Environment", false, false), - slack.NewOptionsSelectBlockElement( - slack.OptTypeStatic, - slack.NewTextBlockObject(slack.PlainTextType, "Select target environment", false, false), - actionEnv, - envs..., - ), - ), - slack.NewInputBlock( - blockType, - slack.NewTextBlockObject(slack.PlainTextType, "Type", false, false), - slack.NewOptionsSelectBlockElement( - slack.OptTypeStatic, - slack.NewTextBlockObject(slack.PlainTextType, "Select your ref type", false, false), - actionType, - slack.NewOptionBlockObject( - "commit", - slack.NewTextBlockObject(slack.PlainTextType, "Commit", false, false), - nil, - ), - slack.NewOptionBlockObject( - "branch", - slack.NewTextBlockObject(slack.PlainTextType, "Branch", false, false), - nil, - ), - slack.NewOptionBlockObject( - "tag", - slack.NewTextBlockObject(slack.PlainTextType, "Tag", false, false), - nil, - ), - ), - ), - slack.NewInputBlock( - blockRef, - slack.NewTextBlockObject(slack.PlainTextType, "Ref", false, false), - slack.NewPlainTextInputBlockElement( - slack.NewTextBlockObject(slack.PlainTextType, "E.g. Commit - 25a667d6, Branch - main, Tag - v0.1.2", false, false), - actionRef, - ), - ), - slack.InputBlock{ - Type: slack.MBTInput, - BlockID: blockApprovers, - Label: slack.NewTextBlockObject(slack.PlainTextType, "Approvers", false, false), - Optional: true, - Element: slack.NewOptionsSelectBlockElement( - slack.MultiOptTypeStatic, - slack.NewTextBlockObject(slack.PlainTextType, "Select approvers", false, false), - actionApprovers, - approvers..., - ), - }, - }, + BlockSet: set, }, } } diff --git a/internal/server/slack/rollback.go b/internal/server/slack/rollback.go index 14f20c53..46f69747 100644 --- a/internal/server/slack/rollback.go +++ b/internal/server/slack/rollback.go @@ -77,6 +77,8 @@ func (s *Slack) handleRollbackCmd(c *gin.Context) { return } + perms = s.filterPerms(perms, cu) + cb, err := s.i.CreateCallback(ctx, &ent.Callback{ Type: callback.TypeRollback, RepoID: r.ID, @@ -136,6 +138,34 @@ func buildRollbackView(callbackID string, as []*deploymentAggregation, perms []* nil)) } + sets := []slack.Block{ + slack.NewInputBlock( + blockDeployment, + slack.NewTextBlockObject(slack.PlainTextType, "Deployments", false, false), + slack.NewOptionsGroupSelectBlockElement( + slack.OptTypeStatic, + slack.NewTextBlockObject(slack.PlainTextType, "Select target deployment", false, false), + actionDeployment, + groups..., + ), + ), + } + + if len(approvers) != 0 { + sets = append(sets, slack.InputBlock{ + Type: slack.MBTInput, + BlockID: blockApprovers, + Optional: true, + Label: slack.NewTextBlockObject(slack.PlainTextType, "Approvers", false, false), + Element: slack.NewOptionsSelectBlockElement( + slack.MultiOptTypeStatic, + slack.NewTextBlockObject(slack.PlainTextType, "Select approvers", false, false), + actionApprovers, + approvers..., + ), + }) + } + return slack.ModalViewRequest{ Type: slack.VTModal, CallbackID: callbackID, @@ -143,30 +173,7 @@ func buildRollbackView(callbackID string, as []*deploymentAggregation, perms []* Submit: slack.NewTextBlockObject(slack.PlainTextType, "Submit", false, false), Close: slack.NewTextBlockObject(slack.PlainTextType, "Close", false, false), Blocks: slack.Blocks{ - BlockSet: []slack.Block{ - slack.NewInputBlock( - blockDeployment, - slack.NewTextBlockObject(slack.PlainTextType, "Deployments", false, false), - slack.NewOptionsGroupSelectBlockElement( - slack.OptTypeStatic, - slack.NewTextBlockObject(slack.PlainTextType, "Select target deployment", false, false), - actionDeployment, - groups..., - ), - ), - slack.InputBlock{ - Type: slack.MBTInput, - BlockID: blockApprovers, - Optional: true, - Label: slack.NewTextBlockObject(slack.PlainTextType, "Approvers", false, false), - Element: slack.NewOptionsSelectBlockElement( - slack.MultiOptTypeStatic, - slack.NewTextBlockObject(slack.PlainTextType, "Select approvers", false, false), - actionApprovers, - approvers..., - ), - }, - }, + BlockSet: sets, }, } } From d8622558ada03feca3a16cbbf981a68712ba8d2e Mon Sep 17 00:00:00 2001 From: noah Date: Fri, 8 Oct 2021 05:28:12 +0900 Subject: [PATCH 2/3] Fix into full-text 'environment' --- internal/server/slack/lock.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/server/slack/lock.go b/internal/server/slack/lock.go index 431dcbd4..be6fb03b 100644 --- a/internal/server/slack/lock.go +++ b/internal/server/slack/lock.go @@ -181,7 +181,7 @@ func (s *Slack) handleUnlockCmd(c *gin.Context) { // Build the modal with unlocked envs. locks, err := s.i.ListLocksOfRepo(ctx, r) if len(locks) == 0 { - postResponseMessage(cmd.ChannelID, cmd.ResponseURL, fmt.Sprintf("There is no locked envs in the `%s/%s` repository.", ns, n)) + postResponseMessage(cmd.ChannelID, cmd.ResponseURL, fmt.Sprintf("There is no locked environments in the `%s/%s` repository.", ns, n)) c.Status(http.StatusOK) return } else if err != nil { @@ -273,7 +273,7 @@ func (s *Slack) interactLock(c *gin.Context) { UserID: cu.Edges.User.ID, RepoID: cb.Edges.Repo.ID, }); err != nil { - s.log.Error("It has failed to lock the env.", zap.Error(err)) + s.log.Error("It has failed to lock the environment.", zap.Error(err)) c.Status(http.StatusInternalServerError) return } @@ -306,7 +306,7 @@ func (s *Slack) interactUnlock(c *gin.Context) { } if err := s.i.DeleteLock(ctx, lock); err != nil { - s.log.Error("It has failed to unlock the env.", zap.Error(err)) + s.log.Error("It has failed to unlock the environment.", zap.Error(err)) c.Status(http.StatusInternalServerError) return } From 97a481e8bf9f526c260c129f51bad2a1a9713af5 Mon Sep 17 00:00:00 2001 From: noah Date: Fri, 8 Oct 2021 05:28:51 +0900 Subject: [PATCH 3/3] Fix condition for the len of approvers --- internal/server/slack/deploy.go | 2 +- internal/server/slack/rollback.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/server/slack/deploy.go b/internal/server/slack/deploy.go index beb9c1ff..2048a3fa 100644 --- a/internal/server/slack/deploy.go +++ b/internal/server/slack/deploy.go @@ -220,7 +220,7 @@ func buildDeployView(callbackID string, c *vo.Config, perms []*ent.Perm) slack.M ), } - if len(approvers) != 0 { + if len(approvers) > 0 { set = append(set, slack.InputBlock{ Type: slack.MBTInput, BlockID: blockApprovers, diff --git a/internal/server/slack/rollback.go b/internal/server/slack/rollback.go index 46f69747..9ab88516 100644 --- a/internal/server/slack/rollback.go +++ b/internal/server/slack/rollback.go @@ -151,7 +151,7 @@ func buildRollbackView(callbackID string, as []*deploymentAggregation, perms []* ), } - if len(approvers) != 0 { + if len(approvers) > 0 { sets = append(sets, slack.InputBlock{ Type: slack.MBTInput, BlockID: blockApprovers,