summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/chat_commands/command.rb1
-rw-r--r--lib/gitlab/chat_commands/deploy.rb20
2 files changed, 16 insertions, 5 deletions
diff --git a/lib/gitlab/chat_commands/command.rb b/lib/gitlab/chat_commands/command.rb
index 5f131703d40..0ec358debc7 100644
--- a/lib/gitlab/chat_commands/command.rb
+++ b/lib/gitlab/chat_commands/command.rb
@@ -4,6 +4,7 @@ module Gitlab
COMMANDS = [
Gitlab::ChatCommands::IssueShow,
Gitlab::ChatCommands::IssueCreate,
+ Gitlab::ChatCommands::Deploy,
].freeze
def execute
diff --git a/lib/gitlab/chat_commands/deploy.rb b/lib/gitlab/chat_commands/deploy.rb
index 8165d52575d..c0b93cca68c 100644
--- a/lib/gitlab/chat_commands/deploy.rb
+++ b/lib/gitlab/chat_commands/deploy.rb
@@ -9,6 +9,10 @@ module Gitlab
'deploy <environment> to <target-environment>'
end
+ def self.available?(project)
+ project.builds_enabled?
+ end
+
def self.allowed?(project, user)
can?(user, :create_deployment, project)
end
@@ -17,11 +21,8 @@ module Gitlab
from = match[:from]
to = match[:to]
- environment = project.environments.find_by(name: from)
- return unless environment
-
- actions = environment.actions_for(to)
- return unless actions.any?
+ actions = find_actions(from, to)
+ return unless actions.present?
if actions.one?
actions.first.play(current_user)
@@ -29,6 +30,15 @@ module Gitlab
Result.new(:error, 'Too many actions defined')
end
end
+
+ private
+
+ def find_actions(from, to)
+ environment = project.environments.find_by(name: from)
+ return unless environment
+
+ environment.actions_for(to).select(&:starts_environment?)
+ end
end
end
end