summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/pipelines_controller.rb2
-rw-r--r--app/models/ci/build.rb8
-rw-r--r--app/models/ci/pipeline.rb3
-rw-r--r--app/models/commit_status.rb5
-rw-r--r--app/services/ci/create_pipeline_service.rb5
-rw-r--r--app/services/ci/create_trigger_request_service.rb2
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