Update rendering

This commit is contained in:
Kamil Trzcinski 2015-10-12 16:32:58 +02:00
parent 69c04498ef
commit 789fe7b489
6 changed files with 62 additions and 85 deletions

View File

@ -106,50 +106,47 @@ module Ci
end
def refs
statuses.pluck(:ref).compact.uniq
statuses.order(:ref).pluck(:ref).uniq
end
def statuses_for_ref(ref = nil)
if ref
statuses.for_ref(ref)
else
statuses
end
def latest_statuses
@latest_statuses ||= statuses.latest.to_a
end
def builds_without_retry(ref = nil)
if ref
builds.for_ref(ref).latest
else
builds.latest
end
def builds_without_retry
@builds_without_retry ||= builds.latest.to_a
end
def builds_without_retry_for_ref(ref)
builds_without_retry.select { |build| build.ref == ref }
end
def retried
@retried ||= (statuses.order(id: :desc) - statuses.latest)
end
def status(ref = nil)
def status
if yaml_errors.present?
return 'failed'
end
latest_statuses = statuses.latest.to_a
latest_statuses.reject! { |status| status.try(&:allow_failure?) }
latest_statuses.select! { |status| status.ref.nil? || status.ref == ref } if ref
@status ||= begin
latest = latest_statuses
latest.reject! { |status| status.try(&:allow_failure?) }
if latest_statuses.none?
return 'skipped'
elsif latest_statuses.all?(&:success?)
'success'
elsif latest_statuses.all?(&:pending?)
'pending'
elsif latest_statuses.any?(&:running?) || latest_statuses.any?(&:pending?)
'running'
elsif latest_statuses.all?(&:canceled?)
'canceled'
else
'failed'
if latest.none?
'skipped'
elsif latest.all?(&:success?)
'success'
elsif latest.all?(&:pending?)
'pending'
elsif latest.any?(&:running?) || latest.any?(&:pending?)
'running'
elsif latest.all?(&:canceled?)
'canceled'
else
'failed'
end
end
end
@ -173,8 +170,9 @@ module Ci
status == 'canceled'
end
def duration(ref = nil)
statuses_for_ref(ref).latest.select(&:duration).sum(&:duration).to_i
def duration
duration_array = latest_statuses.map(&:duration).compact
duration_array.reduce(:+).to_i
end
def finished_at
@ -190,8 +188,8 @@ module Ci
end
end
def matrix?(ref)
builds_without_retry(ref).pluck(:id).size > 1
def matrix_for_ref?(ref)
builds_without_retry_for_ref(ref).size > 1
end
def config_processor

View File

@ -16,8 +16,9 @@ class CommitStatus < ActiveRecord::Base
scope :success, -> { where(status: 'success') }
scope :failed, -> { where(status: 'failed') }
scope :running_or_pending, -> { where(status:[:running, :pending]) }
scope :latest, -> { where(id: unscope(:select).select('max(id)').group(:name, :ref)).order(stage_idx: :asc) }
scope :for_ref, ->(ref) { where(ref: [ref, nil]) }
scope :latest, -> { where(id: unscope(:select).select('max(id)').group(:name, :ref)) }
scope :ordered, -> { order(:ref, :stage_idx, :name) }
scope :for_ref, ->(ref) { where(ref: ref) }
scope :running_or_pending, -> { where(status: [:running, :pending]) }
state_machine :status, initial: :pending do

View File

@ -7,9 +7,9 @@
%code #{@build.ref}
#up-build-trace
- if @commit.matrix?(@build.ref)
- if @commit.matrix_for_ref?(@build.ref)
%ul.center-top-menu.build-top-menu
- @commit.builds_without_retry(@build.ref).each do |build|
- @commit.builds_without_retry_for_ref(@build.ref).each do |build|
%li{class: ('active' if build == @build) }
= link_to namespace_project_build_path(@project.namespace, @project, build) do
= ci_icon_for_status(build.status)
@ -20,7 +20,7 @@
= build.id
- unless @commit.builds_without_retry(@build.ref).include?(@build)
- unless @commit.builds_without_retry_for_ref(@build.ref).include?(@build)
%li.active
%a
Build ##{@build.id}

View File

@ -20,49 +20,28 @@
.bs-callout.bs-callout-warning
\.gitlab-ci.yml not found in this commit
- if @ci_commit.refs.blank?
.gray-content-block.second-block
Latest builds
- if @ci_commit.duration > 0
%small.pull-right
%i.fa.fa-time
#{time_interval_in_words @ci_commit.duration}
.gray-content-block.second-block
Latest
- if @ci_commit.duration > 0
%small.pull-right
%i.fa.fa-time
#{time_interval_in_words @ci_commit.duration}
%table.table.builds
%thead
%tr
%th Status
%th Build ID
%th Stage
%th Name
%th Duration
%th Finished at
- if @ci_project && @ci_project.coverage_enabled?
%th Coverage
%th
= render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.statuses.latest, coverage: @ci_project.try(:coverage_enabled?), controls: true
- @ci_commit.refs.sort.each do |ref|
.gray-content-block.second-block
Builds for #{ref}
- if @ci_commit.duration(ref) > 0
%small.pull-right
%i.fa.fa-time
#{time_interval_in_words @ci_commit.duration(ref)}
%table.table.builds
%thead
%tr
%th Status
%th Build ID
%th Stage
%th Name
%th Duration
%th Finished at
- if @ci_project && @ci_project.coverage_enabled?
%th Coverage
%th
= render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.statuses.for_ref(ref).latest, coverage: @ci_project.try(:coverage_enabled?), controls: true
%table.table.builds
%thead
%tr
%th Status
%th Build ID
%th Ref
%th Stage
%th Name
%th Duration
%th Finished at
- if @ci_project && @ci_project.coverage_enabled?
%th Coverage
%th
- @ci_commit.refs.each do |ref|
= render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.statuses.for_ref(ref).latest.ordered, coverage: @ci_project.try(:coverage_enabled?), controls: true
- if @ci_commit.retried.any?
.gray-content-block.second-block
@ -81,4 +60,4 @@
- if @ci_project && @ci_project.coverage_enabled?
%th Coverage
%th
= render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.retried, coverage: @ci_project.try(:coverage_enabled?), ref: true
= render partial: "projects/commit_statuses/commit_status", collection: @ci_commit.retried, coverage: @ci_project.try(:coverage_enabled?)

View File

@ -9,9 +9,8 @@
- else
%strong Build ##{commit_status.id}
- if defined?(ref) && ref
%td
= commit_status.ref
%td
= commit_status.ref
%td
= commit_status.stage

View File

@ -53,7 +53,7 @@ module API
name = params[:name] || params[:context]
status = GenericCommitStatus.running_or_pending.find_by(commit: ci_commit, name: name, ref: params[:ref])
status = GenericCommitStatus.new(commit: ci_commit, user: current_user) unless status
status ||= GenericCommitStatus.new(commit: ci_commit, user: current_user)
status.update(attrs)
case params[:state].to_s