Class: Gitlab::Ci::Pipeline::Seed::Build

Inherits:
Base
  • Object
show all
Includes:
Utils::StrongMemoize
Defined in:
lib/gitlab/ci/pipeline/seed/build.rb,
lib/gitlab/ci/pipeline/seed/build/cache.rb

Defined Under Namespace

Classes: Cache

Instance Method Summary collapse

Constructor Details

#initialize(context, attributes, stages_for_needs_lookup) ⇒ Build

Returns a new instance of Build.



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
# File 'lib/gitlab/ci/pipeline/seed/build.rb', line 12

def initialize(context, attributes, stages_for_needs_lookup)
  @context = context
  @pipeline = context.pipeline
  @seed_attributes = attributes
  @stages_for_needs_lookup = stages_for_needs_lookup.compact
  @needs_attributes = dig(:needs_attributes)
  @resource_group_key = attributes.delete(:resource_group_key)
  @job_variables = @seed_attributes.delete(:job_variables)
  @root_variables_inheritance = @seed_attributes.delete(:root_variables_inheritance) { true }

  @using_rules  = attributes.key?(:rules)
  @using_only   = attributes.key?(:only)
  @using_except = attributes.key?(:except)

  @only = Gitlab::Ci::Build::Policy
    .fabricate(attributes.delete(:only))
  @except = Gitlab::Ci::Build::Policy
    .fabricate(attributes.delete(:except))
  @rules = Gitlab::Ci::Build::Rules
    .new(attributes.delete(:rules), default_when: attributes[:when])
  @cache = Gitlab::Ci::Build::Cache
    .new(attributes.delete(:cache), @pipeline)

  calculate_yaml_variables!
end

Instance Method Details

#attributesObject



66
67
68
69
70
71
72
73
# File 'lib/gitlab/ci/pipeline/seed/build.rb', line 66

def attributes
  @seed_attributes
    .deep_merge(pipeline_attributes)
    .deep_merge(rules_attributes)
    .deep_merge(allow_failure_criteria_attributes)
    .deep_merge(@cache.cache_attributes)
    .deep_merge(runner_tags)
end

#bridge?Boolean

Returns:

  • (Boolean)


75
76
77
78
79
80
# File 'lib/gitlab/ci/pipeline/seed/build.rb', line 75

def bridge?
  attributes_hash = @seed_attributes.to_h
  attributes_hash.dig(:options, :trigger).present? ||
    (attributes_hash.dig(:options, :bridge_needs).instance_of?(Hash) &&
     attributes_hash.dig(:options, :bridge_needs, :pipeline).present?)
end

#errorsObject



55
56
57
58
59
60
61
62
63
# File 'lib/gitlab/ci/pipeline/seed/build.rb', line 55

def errors
  logger.instrument(:pipeline_seed_build_errors) do
    # We check rules errors before checking "included?" because rules affects its inclusion status.
    next rules_errors if rules_errors
    next unless included?

    [needs_errors, variable_expansion_errors].compact.flatten
  end
end

#included?Boolean

Returns:

  • (Boolean)


42
43
44
45
46
47
48
49
50
51
52
# File 'lib/gitlab/ci/pipeline/seed/build.rb', line 42

def included?
  logger.instrument(:pipeline_seed_build_inclusion) do
    if @using_rules
      rules_result.pass?
    elsif @using_only || @using_except
      all_of_only? && none_of_except?
    else
      true
    end
  end
end

#nameObject



38
39
40
# File 'lib/gitlab/ci/pipeline/seed/build.rb', line 38

def name
  dig(:name)
end

#to_resourceObject



82
83
84
85
86
87
88
89
90
# File 'lib/gitlab/ci/pipeline/seed/build.rb', line 82

def to_resource
  logger.instrument(:pipeline_seed_build_to_resource) do
    if bridge?
      ::Ci::Bridge.new(attributes)
    else
      ::Ci::Build.new(attributes)
    end
  end
end