diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/projects/pipelines_controller.rb | 2 | ||||
-rw-r--r-- | app/models/ci/build.rb | 8 | ||||
-rw-r--r-- | app/models/ci/pipeline.rb | 3 | ||||
-rw-r--r-- | app/models/commit_status.rb | 5 | ||||
-rw-r--r-- | app/services/ci/create_pipeline_service.rb | 5 | ||||
-rw-r--r-- | app/services/ci/create_trigger_request_service.rb | 2 |
6 files changed, 11 insertions, 14 deletions
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index a433634dd58..b0c72cfe4b4 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -19,7 +19,7 @@ class Projects::PipelinesController < Projects::ApplicationController end def create - @pipeline = Ci::CreatePipelineService.new(project, current_user, create_params).execute(skip_ci: false, save_on_errors: false) + @pipeline = Ci::CreatePipelineService.new(project, current_user, create_params).execute(ignore_skip_ci: true, save_on_errors: false) unless @pipeline.persisted? render 'new' return diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 48a49ef203e..05b11f3b115 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -70,14 +70,6 @@ module Ci build.execute_hooks end - # We use around_transition to create builds for next stage as soon as possible, before the `after_*` is executed - around_transition any => [:success, :failed, :canceled] do |build, block| - block.call - if build.pipeline - build.pipeline.process! - end - end - after_transition any => [:success, :failed, :canceled] do |build| build.update_coverage build.execute_hooks diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index 5c85578bdf3..c1417903590 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -90,12 +90,14 @@ module Ci def cancel_running builds.running_or_pending.each(&:cancel) + reload_status! end def retry_failed(user) builds.latest.failed.select(&:retryable?).each do |build| Ci::Build.retry(build, user) end + reload_status! end def latest? @@ -182,7 +184,6 @@ module Ci def process! Ci::ProcessPipelineService.new(project, user).execute(self) - reload_status! end def predefined_variables diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 79e038b6a78..9c730904ba3 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -70,9 +70,12 @@ class CommitStatus < ActiveRecord::Base MergeRequests::AddTodoWhenBuildFailsService.new(commit_status.pipeline.project, nil).execute(commit_status) end - after_transition any => [:success, :failed, :canceled] do |commit_status| + # We use around_transition to process pipeline on next stages as soon as possible, before the `after_*` is executed + around_transition any => [:success, :failed, :canceled] do |commit_status, block| + block.call if commit_status.pipeline commit_status.pipeline.process! + commit_status.pipeline.reload_status! end end end diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb index 1acc411af49..25160cb72c4 100644 --- a/app/services/ci/create_pipeline_service.rb +++ b/app/services/ci/create_pipeline_service.rb @@ -2,7 +2,7 @@ module Ci class CreatePipelineService < BaseService attr_reader :pipeline - def execute(skip_ci: true, save_on_errors: true, trigger_request: nil) + def execute(ignore_skip_ci: false, save_on_errors: true, trigger_request: nil) @pipeline = Ci::Pipeline.new( project: project, ref: ref, @@ -36,7 +36,7 @@ module Ci return error(pipeline.yaml_errors, save: save_on_errors) end - if skip_ci && skip_ci? + if !ignore_skip_ci && skip_ci? return error('Creation of pipeline is skipped', save: save_on_errors) end @@ -46,6 +46,7 @@ module Ci pipeline.save pipeline.process! + pipeline.reload_status! pipeline end diff --git a/app/services/ci/create_trigger_request_service.rb b/app/services/ci/create_trigger_request_service.rb index c6be8f41ca4..6af3c1ca5b1 100644 --- a/app/services/ci/create_trigger_request_service.rb +++ b/app/services/ci/create_trigger_request_service.rb @@ -4,7 +4,7 @@ module Ci trigger_request = trigger.trigger_requests.create(variables: variables) pipeline = Ci::CreatePipelineService.new(project, nil, ref: ref). - execute(skip_ci: false, trigger_request: trigger_request) + execute(ignore_skip_ci: true, trigger_request: trigger_request) if pipeline.persisted? trigger_request end |