Support for events in the Slack integration
## Problem A ton of events aren't set to Slack via the project integration. The only events are Open, Close, and Comment. This is due to the code we have in https://gitlab.com/gitlab-org/gitlab/-/blob/26262d66a961ba06906648027c27b58067af19c6/app/models/project_services/chat_notification_service.rb#L130-133: ```ruby when "issue" ChatMessage::IssueMessage.new(data) unless update?(data) when "merge_request" ChatMessage::MergeMessage.new(data) unless update?(data) ``` This explicitly skips update events for issues and MRs. Comment in the file says: ```ruby # WebHook events often have an 'update' event that follows a 'open' or # 'close' action. Ignore update events for now to prevent duplicate # messages from arriving. ``` Looks like it has been this way since the Slack integration was first introduced in https://gitlab.com/gitlab-org/gitlab-foss/-/commit/afe5d7d209a4088d71e35d6382e6523b89f94ebe. It's a community contribution from @stanhu almost 6 years ago :smile: I think this was done because in `ChatMessage::IssueMessage`, we can see that we only send messages in the format: `Issue #{issue_link} #{state} by #{user_combined_name}`. `state` here is the current issue state. So it would be odd to keep on receiving `Issue opened by ...` when it was actually because of updates to the issue. ## Proposal So to fix this we'd have to support a different message for these updates so that it isn't confusing to users. Even just a simple `Issue xxx updated by ..` would probably be fine as a first iteration. Though I see that the payload has a `changes` attribute which we could probably use to further customize the message depending on the update that was done.
epic