Support pipelines API
Pass `updated_at` to get only incremental changes since last update
This commit is contained in:
parent
532c031915
commit
4e06818d33
6 changed files with 32 additions and 21 deletions
|
@ -98,19 +98,38 @@ module Ci
|
|||
sha[0...8]
|
||||
end
|
||||
|
||||
def self.stages
|
||||
# We use pluck here due to problems with MySQL which doesn't allow LIMIT/OFFSET in queries
|
||||
CommitStatus.where(pipeline: pluck(:id)).stages
|
||||
end
|
||||
|
||||
def self.total_duration
|
||||
where.not(duration: nil).sum(:duration)
|
||||
end
|
||||
|
||||
def stages
|
||||
statuses.group('stage').select(:stage)
|
||||
.order('max(stage_idx)')
|
||||
end
|
||||
|
||||
def stages_with_statuses
|
||||
status_sql = statuses.latest.where('stage=sg.stage').status_sql
|
||||
|
||||
stages_with_statuses = CommitStatus.from(self.stages, :sg).
|
||||
pluck('sg.stage', status_sql)
|
||||
|
||||
stages_with_statuses.map do |stage|
|
||||
OpenStruct.new(
|
||||
name: stage.first,
|
||||
status: stage.last,
|
||||
pipeline: self
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def stages_with_latest_statuses
|
||||
statuses.latest.includes(project: :namespace).order(:stage_idx).group_by(&:stage)
|
||||
end
|
||||
|
||||
def artifacts
|
||||
builds.latest.with_artifacts_not_expired
|
||||
end
|
||||
|
||||
def project_id
|
||||
project.id
|
||||
end
|
||||
|
|
|
@ -119,16 +119,7 @@ class CommitStatus < ActiveRecord::Base
|
|||
|
||||
def self.stages
|
||||
# We group by stage name, but order stages by theirs' index
|
||||
unscoped.from(all, :sg).group('stage').order('max(stage_idx)', 'stage').pluck('sg.stage')
|
||||
end
|
||||
|
||||
def self.stages_status
|
||||
# We execute subquery for each stage to calculate a stage status
|
||||
statuses = unscoped.from(all, :sg).group('stage').pluck('sg.stage', all.where('stage=sg.stage').status_sql)
|
||||
statuses.inject({}) do |h, k|
|
||||
h[k.first] = k.last
|
||||
h
|
||||
end
|
||||
unscoped.from(all, :sg).group('stage').order('max(stage_idx)', 'stage').select('sg.stage')
|
||||
end
|
||||
|
||||
def failed_but_allowed?
|
||||
|
|
|
@ -45,9 +45,10 @@
|
|||
|
||||
- stages_status = pipeline.statuses.latest.stages_status
|
||||
%td.stage-cell
|
||||
- stages.each do |stage|
|
||||
- status = stages_status[stage]
|
||||
- tooltip = "#{stage.titleize}: #{status || 'not found'}"
|
||||
- pipeline.statuses.latest.stages_status.each do |stage|
|
||||
- name = stage.first
|
||||
- status = stage.last
|
||||
- tooltip = "#{name.titleize}: #{status || 'not found'}"
|
||||
- if status
|
||||
.stage-container
|
||||
= link_to namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline.id, anchor: stage), class: "has-tooltip ci-status-icon-#{status}", title: tooltip do
|
||||
|
|
|
@ -62,5 +62,5 @@
|
|||
- if pipeline.project.build_coverage_enabled?
|
||||
%th Coverage
|
||||
%th
|
||||
- pipeline.statuses.relevant.stages.each do |stage|
|
||||
- pipeline.stages.each do |stage|
|
||||
= render 'projects/commit/ci_stage', stage: stage, statuses: pipeline.statuses.relevant.where(stage: stage)
|
||||
|
|
|
@ -12,4 +12,4 @@
|
|||
%th Stages
|
||||
%th
|
||||
%th
|
||||
= render pipelines, commit_sha: true, stage: true, allow_retry: true, stages: pipelines.stages, show_commit: false
|
||||
= render pipelines, commit_sha: true, stage: true, allow_retry: true, show_commit: false
|
||||
|
|
|
@ -51,6 +51,6 @@
|
|||
%th Stages
|
||||
%th
|
||||
%th.hidden-xs
|
||||
= render @pipelines, commit_sha: true, stage: true, allow_retry: true, stages: stages
|
||||
= render @pipelines, commit_sha: true, stage: true, allow_retry: true
|
||||
|
||||
= paginate @pipelines, theme: 'gitlab'
|
||||
|
|
Loading…
Reference in a new issue