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:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-09-24 21:06:05 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-09-24 21:06:05 +0300
commit2ed368929ab5094fec5da8038f723463596a80cf (patch)
treeaec98d50349b0e9a490db0099253b801b2d1a9ea /lib/gitlab/ci/config.rb
parentf1a5755898e865428c923587402fd965b601c4ea (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/ci/config.rb')
-rw-r--r--lib/gitlab/ci/config.rb44
1 files changed, 31 insertions, 13 deletions
diff --git a/lib/gitlab/ci/config.rb b/lib/gitlab/ci/config.rb
index 668e4a5e246..342dcb2f784 100644
--- a/lib/gitlab/ci/config.rb
+++ b/lib/gitlab/ci/config.rb
@@ -7,6 +7,8 @@ module Gitlab
#
class Config
ConfigError = Class.new(StandardError)
+ TIMEOUT_SECONDS = 30.seconds
+ TIMEOUT_MESSAGE = 'Resolving config took longer than expected'
RESCUE_ERRORS = [
Gitlab::Config::Loader::FormatError,
@@ -17,17 +19,17 @@ module Gitlab
attr_reader :root
def initialize(config, project: nil, sha: nil, user: nil)
- @config = Config::Extendable
- .new(build_config(config, project: project, sha: sha, user: user))
- .to_hash
+ @context = build_context(project: project, sha: sha, user: user)
+
+ if Feature.enabled?(:ci_limit_yaml_expansion, project, default_enabled: true)
+ @context.set_deadline(TIMEOUT_SECONDS)
+ end
+
+ @config = expand_config(config)
@root = Entry::Root.new(@config)
@root.compose!
- rescue Gitlab::Config::Loader::Yaml::DataTooLargeError => e
- Gitlab::Sentry.track_exception(e, extra: { user: user.inspect, project: project.inspect })
- raise Config::ConfigError, e.message
-
rescue *rescue_errors => e
raise Config::ConfigError, e.message
end
@@ -61,18 +63,34 @@ module Gitlab
private
- def build_config(config, project:, sha:, user:)
+ def expand_config(config)
+ build_config(config)
+
+ rescue Gitlab::Config::Loader::Yaml::DataTooLargeError => e
+ track_exception(e)
+ raise Config::ConfigError, e.message
+
+ rescue Gitlab::Ci::Config::External::Context::TimeoutError => e
+ track_exception(e)
+ raise Config::ConfigError, TIMEOUT_MESSAGE
+ end
+
+ def build_config(config)
initial_config = Gitlab::Config::Loader::Yaml.new(config).load!
+ initial_config = Config::External::Processor.new(initial_config, @context).perform
- process_external_files(initial_config, project: project, sha: sha, user: user)
+ Config::Extendable.new(initial_config).to_hash
end
- def process_external_files(config, project:, sha:, user:)
- Config::External::Processor.new(config,
+ def build_context(project:, sha:, user:)
+ Config::External::Context.new(
project: project,
sha: sha || project&.repository&.root_ref_sha,
- user: user,
- expandset: Set.new).perform
+ user: user)
+ end
+
+ def track_exception(error)
+ Gitlab::Sentry.track_exception(error, extra: @context.sentry_payload)
end
# Overriden in EE