summaryrefslogtreecommitdiff
path: root/lib/gitlab/ci
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-07-18 15:38:06 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-07-18 15:38:06 +0200
commit7cef4f1908d99743bf1dfb9c1cfdd6b2936b2b3d (patch)
tree3f6eb86dffcf85d8184663f6da8593bf5181eaf4 /lib/gitlab/ci
parent24b686ebb64e2f5a02d812e9aa726f1ba0868c2e (diff)
downloadgitlab-ce-7cef4f1908d99743bf1dfb9c1cfdd6b2936b2b3d.tar.gz
Improve valid keys validation for CI config nodes
Diffstat (limited to 'lib/gitlab/ci')
-rw-r--r--lib/gitlab/ci/config/node/artifacts.rb2
-rw-r--r--lib/gitlab/ci/config/node/cache.rb8
-rw-r--r--lib/gitlab/ci/config/node/validator.rb8
-rw-r--r--lib/gitlab/ci/config/node/validators.rb9
4 files changed, 12 insertions, 15 deletions
diff --git a/lib/gitlab/ci/config/node/artifacts.rb b/lib/gitlab/ci/config/node/artifacts.rb
index 7b3eb7e1992..2c301cf2917 100644
--- a/lib/gitlab/ci/config/node/artifacts.rb
+++ b/lib/gitlab/ci/config/node/artifacts.rb
@@ -13,6 +13,8 @@ module Gitlab
validations do
validates :config, type: Hash
+ validates :config,
+ allowed_keys: %i[name untracked paths when expire_in]
with_options allow_nil: true do
validates :name, type: String
diff --git a/lib/gitlab/ci/config/node/cache.rb b/lib/gitlab/ci/config/node/cache.rb
index cdf8ba2e35d..21d96b220b8 100644
--- a/lib/gitlab/ci/config/node/cache.rb
+++ b/lib/gitlab/ci/config/node/cache.rb
@@ -8,6 +8,10 @@ module Gitlab
class Cache < Entry
include Configurable
+ validations do
+ validates :config, allowed_keys: %i[key untracked paths]
+ end
+
node :key, Node::Key,
description: 'Cache key used to define a cache affinity.'
@@ -16,10 +20,6 @@ module Gitlab
node :paths, Node::Paths,
description: 'Specify which paths should be cached across builds.'
-
- validations do
- validates :config, allowed_keys: true
- end
end
end
end
diff --git a/lib/gitlab/ci/config/node/validator.rb b/lib/gitlab/ci/config/node/validator.rb
index ca000f245aa..43c7e102b50 100644
--- a/lib/gitlab/ci/config/node/validator.rb
+++ b/lib/gitlab/ci/config/node/validator.rb
@@ -21,12 +21,6 @@ module Gitlab
'Validator'
end
- def unknown_keys
- return [] unless config.is_a?(Hash)
-
- config.keys - @node.class.nodes.keys
- end
-
private
def location
@@ -35,7 +29,7 @@ module Gitlab
end
def key_name
- if key.blank? || key.nil?
+ if key.blank?
@node.class.name.demodulize.underscore.humanize
else
key
diff --git a/lib/gitlab/ci/config/node/validators.rb b/lib/gitlab/ci/config/node/validators.rb
index 5568be80166..b43a0bc0bab 100644
--- a/lib/gitlab/ci/config/node/validators.rb
+++ b/lib/gitlab/ci/config/node/validators.rb
@@ -5,10 +5,11 @@ module Gitlab
module Validators
class AllowedKeysValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
- if record.unknown_keys.any?
- unknown_list = record.unknown_keys.join(', ')
- record.errors.add(:config,
- "contains unknown keys: #{unknown_list}")
+ unknown_keys = record.config.try(:keys).to_a - options[:in]
+
+ if unknown_keys.any?
+ record.errors.add(:config, 'contains unknown keys: ' +
+ unknown_keys.join(', '))
end
end
end