Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/ci/config/yaml/interpolator.rb')
-rw-r--r--lib/gitlab/ci/config/yaml/interpolator.rb90
1 files changed, 0 insertions, 90 deletions
diff --git a/lib/gitlab/ci/config/yaml/interpolator.rb b/lib/gitlab/ci/config/yaml/interpolator.rb
deleted file mode 100644
index 2909c2ac798..00000000000
--- a/lib/gitlab/ci/config/yaml/interpolator.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module Ci
- class Config
- module Yaml
- ##
- # Config::Yaml::Interpolator performs CI config file interpolation, and surfaces all possible interpolation
- # errors. It is designed to provide an external file's validation context too.
- #
- class Interpolator
- attr_reader :config, :args, :current_user, :errors
-
- def initialize(config, args, current_user: nil)
- @config = config
- @args = args.to_h
- @current_user = current_user
- @errors = []
- end
-
- def valid?
- @errors.none?
- end
-
- def to_hash
- @result.to_h
- end
-
- def error_message
- # Interpolator can have multiple error messages, like: ["interpolation interrupted by errors", "unknown
- # interpolation key: `abc`"] ?
- #
- # We are joining them together into a single one, because only one error can be surfaced when an external
- # file gets included and is invalid. The limit to three error messages combined is more than required.
- #
- @errors.first(3).join(', ')
- end
-
- def interpolate!
- return @errors.push(config.error) unless config.valid?
- return @result ||= config.content unless config.has_header?
-
- return @errors.concat(header.errors) unless header.valid?
- return @errors.concat(inputs.errors) unless inputs.valid?
- return @errors.concat(context.errors) unless context.valid?
- return @errors.concat(template.errors) unless template.valid?
-
- if current_user.present?
- ::Gitlab::UsageDataCounters::HLLRedisCounter
- .track_event('ci_interpolation_users', values: current_user.id)
- end
-
- @result ||= template.interpolated.to_h.deep_symbolize_keys
- end
-
- private
-
- def header
- @entry ||= Ci::Config::Header::Root.new(config.header).tap do |header|
- header.key = 'header'
-
- header.compose!
- end
- end
-
- def content
- @content ||= config.content
- end
-
- def spec
- @spec ||= header.inputs_value
- end
-
- def inputs
- @inputs ||= Ci::Input::Inputs.new(spec, args)
- end
-
- def context
- @context ||= Ci::Interpolation::Context.new({ inputs: inputs.to_hash })
- end
-
- def template
- @template ||= ::Gitlab::Ci::Interpolation::Template
- .new(content, context)
- end
- end
- end
- end
- end
-end