Class: Gitlab::Ci::Config
- Inherits:
-
Object
- Object
- Gitlab::Ci::Config
- Includes:
- Utils::StrongMemoize
- Defined in:
- lib/gitlab/ci/config.rb,
lib/gitlab/ci/config/yaml.rb,
lib/gitlab/ci/config/entry/job.rb,
lib/gitlab/ci/config/entry/key.rb,
lib/gitlab/ci/config/yaml/tags.rb,
lib/gitlab/ci/config/entry/jobs.rb,
lib/gitlab/ci/config/entry/need.rb,
lib/gitlab/ci/config/entry/port.rb,
lib/gitlab/ci/config/entry/root.rb,
lib/gitlab/ci/config/entry/tags.rb,
lib/gitlab/ci/config/extendable.rb,
lib/gitlab/ci/config/normalizer.rb,
lib/gitlab/ci/config/entry/cache.rb,
lib/gitlab/ci/config/entry/files.rb,
lib/gitlab/ci/config/entry/hooks.rb,
lib/gitlab/ci/config/entry/image.rb,
lib/gitlab/ci/config/entry/needs.rb,
lib/gitlab/ci/config/entry/paths.rb,
lib/gitlab/ci/config/entry/ports.rb,
lib/gitlab/ci/config/entry/retry.rb,
lib/gitlab/ci/config/entry/rules.rb,
lib/gitlab/ci/config/entry/stage.rb,
lib/gitlab/ci/config/header/root.rb,
lib/gitlab/ci/config/header/spec.rb,
lib/gitlab/ci/config/yaml/loader.rb,
lib/gitlab/ci/config/yaml/result.rb,
lib/gitlab/ci/config/entry/bridge.rb,
lib/gitlab/ci/config/entry/caches.rb,
lib/gitlab/ci/config/entry/hidden.rb,
lib/gitlab/ci/config/entry/policy.rb,
lib/gitlab/ci/config/entry/prefix.rb,
lib/gitlab/ci/config/entry/stages.rb,
lib/gitlab/ci/config/header/input.rb,
lib/gitlab/ci/config/entry/default.rb,
lib/gitlab/ci/config/entry/include.rb,
lib/gitlab/ci/config/entry/inherit.rb,
lib/gitlab/ci/config/entry/publish.rb,
lib/gitlab/ci/config/entry/release.rb,
lib/gitlab/ci/config/entry/reports.rb,
lib/gitlab/ci/config/entry/service.rb,
lib/gitlab/ci/config/entry/timeout.rb,
lib/gitlab/ci/config/entry/trigger.rb,
lib/gitlab/ci/config/entry/commands.rb,
lib/gitlab/ci/config/entry/coverage.rb,
lib/gitlab/ci/config/entry/id_token.rb,
lib/gitlab/ci/config/entry/includes.rb,
lib/gitlab/ci/config/entry/services.rb,
lib/gitlab/ci/config/entry/variable.rb,
lib/gitlab/ci/config/entry/workflow.rb,
lib/gitlab/ci/config/external/rules.rb,
lib/gitlab/ci/config/yaml/tags/base.rb,
lib/gitlab/ci/config/entry/artifacts.rb,
lib/gitlab/ci/config/entry/imageable.rb,
lib/gitlab/ci/config/entry/variables.rb,
lib/gitlab/ci/config/external/mapper.rb,
lib/gitlab/ci/config/entry/kubernetes.rb,
lib/gitlab/ci/config/entry/rules/rule.rb,
lib/gitlab/ci/config/extendable/entry.rb,
lib/gitlab/ci/config/external/context.rb,
lib/gitlab/ci/config/entry/environment.rb,
lib/gitlab/ci/config/entry/processable.rb,
lib/gitlab/ci/config/entry/pull_policy.rb,
lib/gitlab/ci/config/external/file/base.rb,
lib/gitlab/ci/config/external/processor.rb,
lib/gitlab/ci/config/normalizer/factory.rb,
lib/gitlab/ci/config/yaml/tags/resolver.rb,
lib/gitlab/ci/config/entry/allow_failure.rb,
lib/gitlab/ci/config/entry/include/rules.rb,
lib/gitlab/ci/config/external/file/local.rb,
lib/gitlab/ci/config/interpolation/block.rb,
lib/gitlab/ci/config/yaml/tags/reference.rb,
lib/gitlab/ci/config/edge_stages_injector.rb,
lib/gitlab/ci/config/entry/product/matrix.rb,
lib/gitlab/ci/config/entry/release/assets.rb,
lib/gitlab/ci/config/external/file/remote.rb,
lib/gitlab/ci/config/external/mapper/base.rb,
lib/gitlab/ci/config/interpolation/access.rb,
lib/gitlab/ci/config/interpolation/config.rb,
lib/gitlab/ci/config/interpolation/inputs.rb,
lib/gitlab/ci/config/entry/inherit/default.rb,
lib/gitlab/ci/config/entry/trigger/forward.rb,
lib/gitlab/ci/config/external/file/project.rb,
lib/gitlab/ci/config/interpolation/context.rb,
lib/gitlab/ci/config/entry/product/parallel.rb,
lib/gitlab/ci/config/external/file/artifact.rb,
lib/gitlab/ci/config/external/file/template.rb,
lib/gitlab/ci/config/external/mapper/filter.rb,
lib/gitlab/ci/config/interpolation/template.rb,
lib/gitlab/ci/config/entry/inherit/variables.rb,
lib/gitlab/ci/config/entry/product/variables.rb,
lib/gitlab/ci/config/external/file/component.rb,
lib/gitlab/ci/config/external/mapper/matcher.rb,
lib/gitlab/ci/config/entry/include/rules/rule.rb,
lib/gitlab/ci/config/entry/rules/rule/changes.rb,
lib/gitlab/ci/config/external/mapper/verifier.rb,
lib/gitlab/ci/config/entry/release/assets/link.rb,
lib/gitlab/ci/config/entry/release/assets/links.rb,
lib/gitlab/ci/config/external/mapper/normalizer.rb,
lib/gitlab/ci/config/interpolation/interpolator.rb,
lib/gitlab/ci/config/normalizer/matrix_strategy.rb,
lib/gitlab/ci/config/normalizer/number_strategy.rb,
lib/gitlab/ci/config/interpolation/functions/base.rb,
lib/gitlab/ci/config/entry/reports/coverage_report.rb,
lib/gitlab/ci/config/interpolation/functions_stack.rb,
lib/gitlab/ci/config/interpolation/inputs/base_input.rb,
lib/gitlab/ci/config/interpolation/functions/truncate.rb,
lib/gitlab/ci/config/external/mapper/location_expander.rb,
lib/gitlab/ci/config/interpolation/inputs/number_input.rb,
lib/gitlab/ci/config/interpolation/inputs/string_input.rb,
lib/gitlab/ci/config/external/mapper/variables_expander.rb,
lib/gitlab/ci/config/interpolation/inputs/boolean_input.rb
Overview
Base GitLab CI Configuration facade
Defined Under Namespace
Modules: Entry, External, Header, Interpolation, Yaml Classes: EdgeStagesInjector, Extendable, Normalizer
Constant Summary collapse
- ConfigError =
Class.new(StandardError)
- TIMEOUT_SECONDS =
ENV.fetch('GITLAB_CI_CONFIG_FETCH_TIMEOUT_SECONDS', 30).to_i.clamp(0, 60).seconds
- TIMEOUT_MESSAGE =
'Request timed out when fetching configuration files.'
- RESCUE_ERRORS =
[ Gitlab::Config::Loader::FormatError, Extendable::ExtensionError, External::Processor::IncludeError, Config::Yaml::Tags::TagError ].freeze
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
-
#source ⇒ Object
readonly
Returns the value of attribute source.
-
#source_ref_path ⇒ Object
readonly
Returns the value of attribute source_ref_path.
Instance Method Summary collapse
- #errors ⇒ Object
- #included_templates ⇒ Object
-
#initialize(config, project: nil, pipeline: nil, sha: nil, user: nil, parent_pipeline: nil, source: nil, pipeline_config: nil, logger: nil) ⇒ Config
constructor
rubocop: disable Metrics/ParameterLists.
- #jobs ⇒ Object
- #metadata ⇒ Object
- #normalized_jobs ⇒ Object
- #stages ⇒ Object
- #to_hash ⇒ Object
-
#valid? ⇒ Boolean
rubocop: enable Metrics/ParameterLists.
-
#variables ⇒ Object
Temporary method that should be removed after refactoring.
- #variables_with_data ⇒ Object
- #variables_with_prefill_data ⇒ Object
- #warnings ⇒ Object
- #workflow_name ⇒ Object
- #workflow_rules ⇒ Object
Constructor Details
#initialize(config, project: nil, pipeline: nil, sha: nil, user: nil, parent_pipeline: nil, source: nil, pipeline_config: nil, logger: nil) ⇒ Config
rubocop: disable Metrics/ParameterLists
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 |
# File 'lib/gitlab/ci/config.rb', line 25 def initialize(config, project: nil, pipeline: nil, sha: nil, user: nil, parent_pipeline: nil, source: nil, pipeline_config: nil, logger: nil) @logger = logger || ::Gitlab::Ci::Pipeline::Logger.new(project: project) @source_ref_path = pipeline&.source_ref_path @project = project @context = self.logger.instrument(:config_build_context, once: true) do pipeline ||= ::Ci::Pipeline.new(project: project, sha: sha, user: user, source: source) build_context(project: project, pipeline: pipeline, sha: sha, user: user, parent_pipeline: parent_pipeline, pipeline_config: pipeline_config) end @context.set_deadline(TIMEOUT_SECONDS) @source = source @config = self.logger.instrument(:config_expand, once: true) do (config) end @root = self.logger.instrument(:config_root, once: true) do Entry::Root.new(@config, project: project, user: user, logger: self.logger) end self.logger.instrument(:config_root_compose, once: true) do @root.compose! end rescue *rescue_errors => e raise Config::ConfigError, e. end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
22 23 24 |
# File 'lib/gitlab/ci/config.rb', line 22 def context @context end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
22 23 24 |
# File 'lib/gitlab/ci/config.rb', line 22 def logger @logger end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
22 23 24 |
# File 'lib/gitlab/ci/config.rb', line 22 def root @root end |
#source ⇒ Object (readonly)
Returns the value of attribute source.
22 23 24 |
# File 'lib/gitlab/ci/config.rb', line 22 def source @source end |
#source_ref_path ⇒ Object (readonly)
Returns the value of attribute source_ref_path.
22 23 24 |
# File 'lib/gitlab/ci/config.rb', line 22 def source_ref_path @source_ref_path end |
Instance Method Details
#errors ⇒ Object
59 60 61 |
# File 'lib/gitlab/ci/config.rb', line 59 def errors @root.errors end |
#included_templates ⇒ Object
106 107 108 |
# File 'lib/gitlab/ci/config.rb', line 106 def included_templates @context.includes.filter_map { |i| i[:location] if i[:type] == :template } end |
#jobs ⇒ Object
90 91 92 |
# File 'lib/gitlab/ci/config.rb', line 90 def jobs root.jobs_value end |
#metadata ⇒ Object
110 111 112 113 114 115 |
# File 'lib/gitlab/ci/config.rb', line 110 def { includes: @context.includes, merged_yaml: @config&.deep_stringify_keys&.to_yaml } end |
#normalized_jobs ⇒ Object
102 103 104 |
# File 'lib/gitlab/ci/config.rb', line 102 def normalized_jobs @normalized_jobs ||= Ci::Config::Normalizer.new(jobs).normalize_jobs end |
#stages ⇒ Object
86 87 88 |
# File 'lib/gitlab/ci/config.rb', line 86 def stages root.stages_value end |
#to_hash ⇒ Object
67 68 69 |
# File 'lib/gitlab/ci/config.rb', line 67 def to_hash @config end |
#valid? ⇒ Boolean
rubocop: enable Metrics/ParameterLists
55 56 57 |
# File 'lib/gitlab/ci/config.rb', line 55 def valid? @root.valid? end |
#variables ⇒ Object
Temporary method that should be removed after refactoring
74 75 76 |
# File 'lib/gitlab/ci/config.rb', line 74 def variables root.variables_value end |
#variables_with_data ⇒ Object
78 79 80 |
# File 'lib/gitlab/ci/config.rb', line 78 def variables_with_data root.variables_entry.value_with_data end |
#variables_with_prefill_data ⇒ Object
82 83 84 |
# File 'lib/gitlab/ci/config.rb', line 82 def variables_with_prefill_data root.variables_entry.value_with_prefill_data end |
#warnings ⇒ Object
63 64 65 |
# File 'lib/gitlab/ci/config.rb', line 63 def warnings @root.warnings end |
#workflow_name ⇒ Object
98 99 100 |
# File 'lib/gitlab/ci/config.rb', line 98 def workflow_name root.workflow_entry.name end |
#workflow_rules ⇒ Object
94 95 96 |
# File 'lib/gitlab/ci/config.rb', line 94 def workflow_rules root.workflow_entry.rules_value end |