summaryrefslogtreecommitdiff
path: root/app/services/ci/pipelines/add_job_service.rb
blob: 03bdb4912008521aeee9143694e8e0658c9ced6c (plain)
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
# frozen_string_literal: true

module Ci
  module Pipelines
    class AddJobService
      attr_reader :pipeline

      def initialize(pipeline)
        @pipeline = pipeline

        raise ArgumentError, "Pipeline must be persisted for this service to be used" unless @pipeline.persisted?
      end

      def execute!(job, &block)
        assign_pipeline_attributes(job)

        Ci::Pipeline.transaction do
          yield(job)

          job.update_older_statuses_retried! if Feature.enabled?(:ci_fix_commit_status_retried, @pipeline.project, default_enabled: :yaml)
        end

        ServiceResponse.success(payload: { job: job })
      rescue StandardError => e
        ServiceResponse.error(message: e.message, payload: { job: job })
      end

      private

      def assign_pipeline_attributes(job)
        job.pipeline = @pipeline
        job.project = @pipeline.project
        job.ref = @pipeline.ref
      end
    end
  end
end