diff options
-rw-r--r-- | app/models/ci/commit.rb | 10 | ||||
-rw-r--r-- | app/models/concerns/ci_status.rb | 6 | ||||
-rw-r--r-- | app/services/ci/create_builds_service.rb | 2 | ||||
-rw-r--r-- | features/steps/shared/builds.rb | 6 | ||||
-rw-r--r-- | features/steps/shared/project.rb | 2 | ||||
-rw-r--r-- | spec/lib/ci/status_spec.rb | 15 |
6 files changed, 26 insertions, 15 deletions
diff --git a/app/models/ci/commit.rb b/app/models/ci/commit.rb index d09866a4bdf..2ab1fefe8e1 100644 --- a/app/models/ci/commit.rb +++ b/app/models/ci/commit.rb @@ -117,7 +117,7 @@ module Ci # get status for all prior builds prior_builds = latest_builds.reject { |other_build| next_stages.include?(other_build.stage) } - status = Ci::Status.get_status(prior_builds) + status = prior_builds.status # create builds for next stages based next_stages.any? do |stage| @@ -185,7 +185,7 @@ module Ci private def update_status - status = + self.status = if yaml_errors.present? 'failed' else @@ -194,17 +194,17 @@ module Ci end def update_started_at - started_at = + self.started_at = statuses.minimum(:started_at) end def update_finished_at - finished_at = + self.finished_at = statuses.maximum(:finished_at) end def update_duration - duration = begin + self.duration = begin duration_array = latest.map(&:duration).compact duration_array.reduce(:+).to_i end diff --git a/app/models/concerns/ci_status.rb b/app/models/concerns/ci_status.rb index 25bee601f43..6450b6dd202 100644 --- a/app/models/concerns/ci_status.rb +++ b/app/models/concerns/ci_status.rb @@ -5,7 +5,7 @@ module CiStatus def status objs = all.to_a if objs.none? - nil + nil elsif objs.all? { |status| status.success? || status.try(:ignored?) } 'success' elsif objs.all?(&:pending?) @@ -14,6 +14,8 @@ module CiStatus 'running' elsif objs.all?(&:canceled?) 'canceled' + elsif objs.all?(&:skipped?) + 'skipped' else 'failed' end @@ -56,4 +58,4 @@ module CiStatus def complete? canceled? || success? || failed? end -end
\ No newline at end of file +end diff --git a/app/services/ci/create_builds_service.rb b/app/services/ci/create_builds_service.rb index bbc8251a2da..18274ce24e2 100644 --- a/app/services/ci/create_builds_service.rb +++ b/app/services/ci/create_builds_service.rb @@ -22,7 +22,7 @@ module Ci builds_attrs.map do |build_attrs| # don't create the same build twice unless @commit.builds.find_by(ref: @commit.ref, tag: @commit.tag, - trigger_request: trigger_request, name: build_attrs[:name]) + trigger_request: trigger_request, name: build_attrs[:name]) build_attrs.slice!(:name, :commands, :tag_list, diff --git a/features/steps/shared/builds.rb b/features/steps/shared/builds.rb index c4c7672a432..cf30e23b6bd 100644 --- a/features/steps/shared/builds.rb +++ b/features/steps/shared/builds.rb @@ -10,16 +10,16 @@ module SharedBuilds end step 'project has a recent build' do - @ci_commit = create(:ci_commit, project: @project, sha: @project.commit.sha) + @ci_commit = create(:ci_commit, project: @project, sha: @project.commit.sha, ref: 'master') @build = create(:ci_build_with_coverage, commit: @ci_commit) end step 'recent build is successful' do - @build.update_column(:status, 'success') + @build.update(status: 'success') end step 'recent build failed' do - @build.update_column(:status, 'failed') + @build.update(status: 'failed') end step 'project has another build that is running' do diff --git a/features/steps/shared/project.rb b/features/steps/shared/project.rb index 3eb0cf00e67..084338f30d8 100644 --- a/features/steps/shared/project.rb +++ b/features/steps/shared/project.rb @@ -230,7 +230,7 @@ module SharedProject step 'project "Shop" has CI build' do project = Project.find_by(name: "Shop") - create :ci_commit, project: project, sha: project.commit.sha, ref: 'master' + commit = create :ci_commit, project: project, sha: project.commit.sha, ref: 'master', status: 'skipped' end step 'I should see last commit with CI status' do diff --git a/spec/lib/ci/status_spec.rb b/spec/lib/ci/status_spec.rb index 47f3df6e3ce..1c37921cd7e 100644 --- a/spec/lib/ci/status_spec.rb +++ b/spec/lib/ci/status_spec.rb @@ -1,8 +1,17 @@ require 'spec_helper' -describe Ci::Status do - describe '.get_status' do - subject { described_class.get_status(statuses) } +describe CiStatus do + before do + @object = Object.new + @object.extend(CiStatus::ClassMethods) + end + + describe '.status' do + before do + allow(@object).to receive(:all).and_return(statuses) + end + + subject { @object.status } shared_examples 'build status summary' do context 'all successful' do |