diff options
author | Matija Čupić <matteeyah@gmail.com> | 2018-09-07 20:53:28 +0200 |
---|---|---|
committer | Matija Čupić <matteeyah@gmail.com> | 2018-09-07 20:54:27 +0200 |
commit | 5f33690ebbe19dd8698bf8b432a5e6740305f007 (patch) | |
tree | 0f9714da4c8a8b2e70144df8967688550302efff /lib | |
parent | c3e33f06c2920a9f032ee8166cccf8423bd24b78 (diff) | |
download | gitlab-ce-5f33690ebbe19dd8698bf8b432a5e6740305f007.tar.gz |
Load external files in config
CE mirror of 8e03a6619be44fdaf19a6c13284ea8e51377b311
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/ci/config.rb | 6 | ||||
-rw-r--r-- | lib/gitlab/ci/config/entry/global.rb | 10 | ||||
-rw-r--r-- | lib/gitlab/ci/config/entry/includes.rb | 22 | ||||
-rw-r--r-- | lib/gitlab/ci/config/entry/validators.rb | 32 | ||||
-rw-r--r-- | lib/gitlab/ci/external_files/external_file.rb | 3 | ||||
-rw-r--r-- | lib/gitlab/ci/external_files/mapper.rb | 3 | ||||
-rw-r--r-- | lib/gitlab/ci/external_files/processor.rb | 3 |
7 files changed, 7 insertions, 72 deletions
diff --git a/lib/gitlab/ci/config.rb b/lib/gitlab/ci/config.rb index 46dad59eb8c..94b2fbc082b 100644 --- a/lib/gitlab/ci/config.rb +++ b/lib/gitlab/ci/config.rb @@ -1,15 +1,17 @@ module Gitlab module Ci - ## + # # Base GitLab CI Configuration facade # class Config ConfigError = Class.new(StandardError) def initialize(config, opts = {}) - @config = Config::Extendable + initial_config = Config::Extendable .new(build_config(config, opts)) .to_hash + processor = ::Gitlab::Ci::ExternalFiles::Processor.new(initial_config) + @config = processor.perform @global = Entry::Global.new(@config) @global.compose! diff --git a/lib/gitlab/ci/config/entry/global.rb b/lib/gitlab/ci/config/entry/global.rb index 401e566de77..a4ec8f0ff2f 100644 --- a/lib/gitlab/ci/config/entry/global.rb +++ b/lib/gitlab/ci/config/entry/global.rb @@ -33,15 +33,11 @@ module Gitlab entry :cache, Entry::Cache, description: 'Configure caching between build jobs.' - entry :includes, Entry::Includes, - description: 'External GitlLab Ci files' - helpers :before_script, :image, :services, :after_script, - :variables, :stages, :types, :cache, :jobs, :includes + :variables, :stages, :types, :cache, :jobs def compose!(_deps = nil) super(self) do - append_external_files! compose_jobs! compose_deprecated_entries! end @@ -49,10 +45,6 @@ module Gitlab private - def append_external_files! - return if includes_value.nil? - end - def compose_jobs! factory = Entry::Factory.new(Entry::Jobs) .value(@config.except(*self.class.nodes.keys)) diff --git a/lib/gitlab/ci/config/entry/includes.rb b/lib/gitlab/ci/config/entry/includes.rb deleted file mode 100644 index c7a8c7960e8..00000000000 --- a/lib/gitlab/ci/config/entry/includes.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Gitlab - module Ci - class Config - module Entry - ## - # Entry that represents a Docker image. - # - class Includes < Node - include Validatable - - validations do - validates :config, array_or_string: true, external_file: true, allow_nil: true - end - - def value - Array(@config) - end - end - end - end - end -end diff --git a/lib/gitlab/ci/config/entry/validators.rb b/lib/gitlab/ci/config/entry/validators.rb index 5b4d5d53821..b3c889ee92f 100644 --- a/lib/gitlab/ci/config/entry/validators.rb +++ b/lib/gitlab/ci/config/entry/validators.rb @@ -60,38 +60,6 @@ module Gitlab end end - class ArrayOrStringValidator < ActiveModel::EachValidator - def validate_each(record, attribute, value) - unless value.is_a?(Array) || value.is_a?(String) - record.errors.add(attribute, 'should be an array or a string') - end - end - end - - class ExternalFileValidator < ActiveModel::EachValidator - def validate_each(record, attribute, value) - if value.is_a?(Array) - value.each do |path| - validate_external_file(path, record, attribute) - end - else - validate_external_file(value, record, attribute) - end - end - - private - - def validate_external_file(value, record, attribute) - unless valid_url?(value) - record.errors.add(attribute, 'should be a valid local or remote file') - end - end - - def valid_url?(value) - Gitlab::UrlSanitizer.valid?(value) || File.exists?("#{Rails.root}/#{value}") - end - end - class KeyValidator < ActiveModel::EachValidator include LegacyValidationHelpers diff --git a/lib/gitlab/ci/external_files/external_file.rb b/lib/gitlab/ci/external_files/external_file.rb index 9bad8231c42..47d6d1c0fdc 100644 --- a/lib/gitlab/ci/external_files/external_file.rb +++ b/lib/gitlab/ci/external_files/external_file.rb @@ -4,7 +4,6 @@ module Gitlab module Ci module ExternalFiles class ExternalFile - def initialize(value) @value = value end @@ -18,7 +17,7 @@ module Gitlab end def valid? - remote_url? || File.exists?(base_path) + remote_url? || File.exist?(base_path) end private diff --git a/lib/gitlab/ci/external_files/mapper.rb b/lib/gitlab/ci/external_files/mapper.rb index 5deb2f5a2e5..4b5d2ddd6a1 100644 --- a/lib/gitlab/ci/external_files/mapper.rb +++ b/lib/gitlab/ci/external_files/mapper.rb @@ -2,14 +2,11 @@ module Gitlab module Ci module ExternalFiles class Mapper - def self.fetch_paths(values) paths = values.fetch(:includes, []) normalize_paths(paths) end - private - def self.normalize_paths(paths) if paths.is_a?(String) [build_external_file(paths)] diff --git a/lib/gitlab/ci/external_files/processor.rb b/lib/gitlab/ci/external_files/processor.rb index f38bc7633b5..221b6f58b98 100644 --- a/lib/gitlab/ci/external_files/processor.rb +++ b/lib/gitlab/ci/external_files/processor.rb @@ -25,7 +25,7 @@ module Gitlab attr_reader :values, :external_files def validate_external_file(external_file) - unless external_file.valid? + unless external_file.valid? raise ExternalFileError, 'External files should be a valid local or remote file' end end @@ -39,7 +39,6 @@ module Gitlab values.delete(:includes) values end - end end end |