pipeline_data_builder.rb 1.84 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
module Gitlab
  module DataBuilder
    module PipelineDataBuilder
      module_function

      def build(pipeline)
        {
          object_kind: 'pipeline',
          object_attributes: hook_attrs(pipeline),
          user: pipeline.user.try(:hook_attrs),
          project: pipeline.project.hook_attrs(backward: false),
          commit: pipeline.commit.try(:hook_attrs),
          builds: pipeline.builds.map(&method(:build_hook_attrs))
        }
      end

      def hook_attrs(pipeline)
        first_pending_build = pipeline.builds.first_pending
        config_processor = pipeline.config_processor

        {
          id: pipeline.id,
          ref: pipeline.ref,
          tag: pipeline.tag,
          sha: pipeline.sha,
          before_sha: pipeline.before_sha,
          status: pipeline.status,
          stage: first_pending_build.try(:stage),
          stages: config_processor.try(:stages),
          created_at: pipeline.created_at,
          finished_at: pipeline.finished_at,
          duration: pipeline.duration
        }
      end

      def build_hook_attrs(build)
        {
          id: build.id,
          stage: build.stage,
          name: build.name,
          status: build.status,
          created_at: build.created_at,
          started_at: build.started_at,
          finished_at: build.finished_at,
          when: build.when,
          manual: build.manual?,
          user: build.user.try(:hook_attrs),
          runner: build.runner && runner_hook_attrs(build.runner),
          artifacts_file: {
            filename: build.artifacts_file.filename,
            size: build.artifacts_size
          }
        }
      end

      def runner_hook_attrs(runner)
        {
          id: runner.id,
          description: runner.description,
          active: runner.active?,
          is_shared: runner.is_shared?
        }
      end
    end
  end
end