pipeline_entity.rb 1.79 KB
Newer Older
Kamil Trzcinski's avatar
Kamil Trzcinski committed
1 2 3 4
class PipelineEntity < Grape::Entity
  include RequestAwareEntity

  expose :id
5
  expose :user, using: UserEntity
6

7
  expose :path do |pipeline|
8 9 10 11 12
    namespace_project_pipeline_path(
      pipeline.project.namespace,
      pipeline.project,
      pipeline)
  end
Kamil Trzcinski's avatar
Kamil Trzcinski committed
13

14
  expose :details do
15 16 17 18 19 20
    expose :status do |pipeline, options|
      StatusEntity.represent(
        pipeline.detailed_status(request.user),
        options)
    end

Kamil Trzcinski's avatar
Kamil Trzcinski committed
21 22
    expose :duration
    expose :finished_at
23
    expose :stages, using: PipelineStageEntity
Kamil Trzcinski's avatar
Kamil Trzcinski committed
24 25 26
    expose :artifacts, using: PipelineArtifactEntity
    expose :manual_actions, using: PipelineActionEntity
  end
Kamil Trzcinski's avatar
Kamil Trzcinski committed
27

28
  expose :flags do
Kamil Trzcinski's avatar
Kamil Trzcinski committed
29 30
    expose :latest?, as: :latest
    expose :triggered?, as: :triggered
31

Kamil Trzcinski's avatar
Kamil Trzcinski committed
32 33 34
    expose :yaml_errors?, as: :yaml_errors do |pipeline|
      pipeline.yaml_errors.present?
    end
35

Kamil Trzcinski's avatar
Kamil Trzcinski committed
36 37 38 39 40
    expose :stuck?, as: :stuck do |pipeline|
      pipeline.builds.any?(&:stuck?)
    end
  end

41
  expose :ref do
Kamil Trzcinski's avatar
Kamil Trzcinski committed
42 43 44 45
    expose :name do |pipeline|
      pipeline.ref
    end

46
    expose :url do |pipeline|
Kamil Trzcinski's avatar
Kamil Trzcinski committed
47 48 49 50 51 52 53 54 55
      namespace_project_tree_url(
        pipeline.project.namespace,
        pipeline.project,
        id: pipeline.ref)
    end

    expose :tag?
  end

56
  expose :commit, using: CommitEntity
Kamil Trzcinski's avatar
Kamil Trzcinski committed
57

58
  expose :retry_url do |pipeline|
59
    can?(request.user, :update_pipeline, pipeline.project) &&
Kamil Trzcinski's avatar
Kamil Trzcinski committed
60
      pipeline.retryable? &&
61 62
      retry_namespace_project_pipeline_path(pipeline.project.namespace,
                                            pipeline.project, pipeline.id)
Kamil Trzcinski's avatar
Kamil Trzcinski committed
63 64
  end

65
  expose :cancel_url do |pipeline|
66
    can?(request.user, :update_pipeline, pipeline.project) &&
Kamil Trzcinski's avatar
Kamil Trzcinski committed
67
      pipeline.cancelable? &&
68 69 70 71
      cancel_namespace_project_pipeline_path(pipeline.project.namespace,
                                             pipeline.project, pipeline.id)
  end

72
  expose :created_at, :updated_at
Kamil Trzcinski's avatar
Kamil Trzcinski committed
73
end