diff options
Diffstat (limited to 'app/models/ci/bridge.rb')
-rw-r--r-- | app/models/ci/bridge.rb | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/app/models/ci/bridge.rb b/app/models/ci/bridge.rb index 1697067f633..2e725e0baff 100644 --- a/app/models/ci/bridge.rb +++ b/app/models/ci/bridge.rb @@ -27,7 +27,7 @@ module Ci # rubocop:enable Cop/ActiveRecordSerialize state_machine :status do - after_transition created: :pending do |bridge| + after_transition [:created, :manual] => :pending do |bridge| next unless bridge.downstream_project bridge.run_after_commit do @@ -46,6 +46,10 @@ module Ci event :scheduled do transition all => :scheduled end + + event :actionize do + transition created: :manual + end end def self.retry(bridge, current_user) @@ -126,9 +130,27 @@ module Ci false end + def playable? + return false unless ::Gitlab::Ci::Features.manual_bridges_enabled?(project) + + action? && !archived? && manual? + end + def action? - false + return false unless ::Gitlab::Ci::Features.manual_bridges_enabled?(project) + + %w[manual].include?(self.when) + end + + # rubocop: disable CodeReuse/ServiceClass + # We don't need it but we are taking `job_variables_attributes` parameter + # to make it consistent with `Ci::Build#play` method. + def play(current_user, job_variables_attributes = nil) + Ci::PlayBridgeService + .new(project, current_user) + .execute(self) end + # rubocop: enable CodeReuse/ServiceClass def artifacts? false @@ -185,6 +207,10 @@ module Ci [] end + def target_revision_ref + downstream_pipeline_params.dig(:target_revision, :ref) + end + private def cross_project_params |