- Add new parameters for Pipeline API
- Expand PipelinesFinder functions
This commit is contained in:
parent
9fd1a35fa9
commit
e9d9445195
|
@ -9,19 +9,19 @@ class Projects::PipelinesController < Projects::ApplicationController
|
||||||
def index
|
def index
|
||||||
@scope = params[:scope]
|
@scope = params[:scope]
|
||||||
@pipelines = PipelinesFinder
|
@pipelines = PipelinesFinder
|
||||||
.new(project)
|
.new(project, scope: @scope)
|
||||||
.execute(scope: @scope)
|
.execute
|
||||||
.page(params[:page])
|
.page(params[:page])
|
||||||
.per(30)
|
.per(30)
|
||||||
|
|
||||||
@running_count = PipelinesFinder
|
@running_count = PipelinesFinder
|
||||||
.new(project).execute(scope: 'running').count
|
.new(project, scope: 'running').execute.count
|
||||||
|
|
||||||
@pending_count = PipelinesFinder
|
@pending_count = PipelinesFinder
|
||||||
.new(project).execute(scope: 'pending').count
|
.new(project, scope: 'pending').execute.count
|
||||||
|
|
||||||
@finished_count = PipelinesFinder
|
@finished_count = PipelinesFinder
|
||||||
.new(project).execute(scope: 'finished').count
|
.new(project, scope: 'finished').execute.count
|
||||||
|
|
||||||
@pipelines_count = PipelinesFinder
|
@pipelines_count = PipelinesFinder
|
||||||
.new(project).execute.count
|
.new(project).execute.count
|
||||||
|
|
|
@ -1,29 +1,21 @@
|
||||||
class PipelinesFinder
|
class PipelinesFinder
|
||||||
attr_reader :project, :pipelines
|
attr_reader :project, :pipelines, :params
|
||||||
|
|
||||||
def initialize(project)
|
def initialize(project, params = {})
|
||||||
@project = project
|
@project = project
|
||||||
@pipelines = project.pipelines
|
@pipelines = project.pipelines
|
||||||
|
@params = params
|
||||||
end
|
end
|
||||||
|
|
||||||
def execute(scope: nil)
|
def execute
|
||||||
scoped_pipelines =
|
items = pipelines
|
||||||
case scope
|
items = by_scope(items)
|
||||||
when 'running'
|
items = by_status(items)
|
||||||
pipelines.running
|
items = by_ref(items)
|
||||||
when 'pending'
|
items = by_user(items)
|
||||||
pipelines.pending
|
items = by_duration(items)
|
||||||
when 'finished'
|
items = by_yaml_error(items)
|
||||||
pipelines.finished
|
order_and_sort(items)
|
||||||
when 'branches'
|
|
||||||
from_ids(ids_for_ref(branches))
|
|
||||||
when 'tags'
|
|
||||||
from_ids(ids_for_ref(tags))
|
|
||||||
else
|
|
||||||
pipelines
|
|
||||||
end
|
|
||||||
|
|
||||||
scoped_pipelines.order(id: :desc)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -43,4 +35,80 @@ class PipelinesFinder
|
||||||
def tags
|
def tags
|
||||||
project.repository.tag_names
|
project.repository.tag_names
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def by_scope(items)
|
||||||
|
case params[:scope]
|
||||||
|
when 'running'
|
||||||
|
items.running
|
||||||
|
when 'pending'
|
||||||
|
items.pending
|
||||||
|
when 'finished'
|
||||||
|
items.finished
|
||||||
|
when 'branches'
|
||||||
|
from_ids(ids_for_ref(branches))
|
||||||
|
when 'tags'
|
||||||
|
from_ids(ids_for_ref(tags))
|
||||||
|
else
|
||||||
|
items
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def by_status(items)
|
||||||
|
case params[:status]
|
||||||
|
when 'running'
|
||||||
|
items.running
|
||||||
|
when 'pending'
|
||||||
|
items.pending
|
||||||
|
when 'success'
|
||||||
|
items.success
|
||||||
|
when 'failed'
|
||||||
|
items.failed
|
||||||
|
when 'canceled'
|
||||||
|
items.canceled
|
||||||
|
when 'skipped'
|
||||||
|
items.skipped
|
||||||
|
else
|
||||||
|
items
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def by_ref(items)
|
||||||
|
if params[:ref].present?
|
||||||
|
items.where(ref: params[:ref])
|
||||||
|
else
|
||||||
|
items
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def by_user(items)
|
||||||
|
if params[:user_id].present?
|
||||||
|
items.where(user_id: params[:user_id])
|
||||||
|
else
|
||||||
|
items
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def by_duration(items)
|
||||||
|
if params[:duration].present?
|
||||||
|
items.where("duration > ?", params[:duration])
|
||||||
|
else
|
||||||
|
items
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def by_yaml_error(items)
|
||||||
|
if params[:yaml_error].present? && params[:yaml_error]
|
||||||
|
items.where("yaml_errors IS NOT NULL")
|
||||||
|
else
|
||||||
|
items
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def order_and_sort(items)
|
||||||
|
if params[:order_by].present? && params[:sort].present?
|
||||||
|
items.order("#{params[:order_by]} #{params[:sort]}")
|
||||||
|
else
|
||||||
|
items.order(id: :desc)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,11 +16,21 @@ module API
|
||||||
use :pagination
|
use :pagination
|
||||||
optional :scope, type: String, values: %w(running branches tags),
|
optional :scope, type: String, values: %w(running branches tags),
|
||||||
desc: 'Either running, branches, or tags'
|
desc: 'Either running, branches, or tags'
|
||||||
|
optional :status, type: String, values: ['running', 'pending', 'success', 'failed', 'canceled', 'skipped'],
|
||||||
|
desc: 'Pipeline Status'
|
||||||
|
optional :ref, type: String, desc: 'Pipeline Ref'
|
||||||
|
optional :duration, type: Integer, desc: 'Greater than the specified duration'
|
||||||
|
optional :yaml_error, type: Boolean, desc: 'If true, returns only yaml error pipelines.'
|
||||||
|
optional :user_id, type: String, desc: 'User who executed pipelines'
|
||||||
|
optional :order_by, type: String, values: ['id', 'status', 'ref', 'user_id', 'started_at', 'finished_at', 'created_at', 'updated_at'], default: 'id',
|
||||||
|
desc: 'Return issues ordered by `created_at` or `updated_at` fields.'
|
||||||
|
optional :sort, type: String, values: ['asc', 'desc'], default: 'desc',
|
||||||
|
desc: 'Return pipelines sorted in `asc` or `desc` order.'
|
||||||
end
|
end
|
||||||
get ':id/pipelines' do
|
get ':id/pipelines' do
|
||||||
authorize! :read_pipeline, user_project
|
authorize! :read_pipeline, user_project
|
||||||
|
|
||||||
pipelines = PipelinesFinder.new(user_project).execute(scope: params[:scope])
|
pipelines = PipelinesFinder.new(user_project, params).execute(scope: params[:scope])
|
||||||
present paginate(pipelines), with: Entities::PipelineBasic
|
present paginate(pipelines), with: Entities::PipelineBasic
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue