72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   module Ci
 | |
|     class ProjectConfig
 | |
|       class Source
 | |
|         include Gitlab::Utils::StrongMemoize
 | |
| 
 | |
|         def initialize(
 | |
|           project:, sha:, custom_content: nil, pipeline_source: nil, pipeline_source_bridge: nil,
 | |
|           triggered_for_branch: false, ref: nil, inputs: {})
 | |
|           @project = project
 | |
|           @sha = sha
 | |
|           @custom_content = custom_content
 | |
|           @pipeline_source = pipeline_source
 | |
|           @pipeline_source_bridge = pipeline_source_bridge
 | |
|           @triggered_for_branch = triggered_for_branch
 | |
|           @ref = ref
 | |
|           @inputs = inputs
 | |
|         end
 | |
| 
 | |
|         def exists?
 | |
|           strong_memoize(:exists) do
 | |
|             content.present?
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         def content
 | |
|           raise NotImplementedError
 | |
|         end
 | |
| 
 | |
|         # Indicates if we are prepending the content with an "internal" `include`
 | |
|         def internal_include_prepended?
 | |
|           false
 | |
|         end
 | |
| 
 | |
|         def source
 | |
|           raise NotImplementedError
 | |
|         end
 | |
| 
 | |
|         def url
 | |
|           nil
 | |
|         end
 | |
| 
 | |
|         def inputs_for_pipeline_creation
 | |
|           # For internal_include_prepended?, we already pass the inputs to the `include` statement.
 | |
|           internal_include_prepended? ? {} : inputs
 | |
|         end
 | |
| 
 | |
|         private
 | |
| 
 | |
|         attr_reader :project, :sha, :custom_content, :pipeline_source, :pipeline_source_bridge, :triggered_for_branch,
 | |
|           :ref, :inputs
 | |
| 
 | |
|         def ci_config_path
 | |
|           @ci_config_path ||= project.ci_config_path_or_default
 | |
|         end
 | |
| 
 | |
|         def ci_yaml_include(config)
 | |
|           YAML.dump('include' => [config.merge(include_inputs)])
 | |
|         end
 | |
| 
 | |
|         def include_inputs
 | |
|           { 'inputs' => inputs }.compact_blank
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| Gitlab::Ci::ProjectConfig::Source.prepend_mod
 |