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/external/rules.rb')
-rw-r--r--lib/gitlab/ci/config/external/rules.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/gitlab/ci/config/external/rules.rb b/lib/gitlab/ci/config/external/rules.rb
index 5a788427172..95470537de3 100644
--- a/lib/gitlab/ci/config/external/rules.rb
+++ b/lib/gitlab/ci/config/external/rules.rb
@@ -5,7 +5,13 @@ module Gitlab
class Config
module External
class Rules
+ ALLOWED_KEYS = Entry::Include::Rules::Rule::ALLOWED_KEYS
+
+ InvalidIncludeRulesError = Class.new(Mapper::Error)
+
def initialize(rule_hashes)
+ validate(rule_hashes)
+
@rule_list = Build::Rules::Rule.fabricate_list(rule_hashes)
end
@@ -19,6 +25,16 @@ module Gitlab
@rule_list.find { |rule| rule.matches?(nil, context) }
end
+ def validate(rule_hashes)
+ return unless rule_hashes.is_a?(Array)
+
+ rule_hashes.each do |rule_hash|
+ next if (rule_hash.keys - ALLOWED_KEYS).empty?
+
+ raise InvalidIncludeRulesError, "invalid include rule: #{rule_hash}"
+ end
+ end
+
Result = Struct.new(:result) do
def pass?
!!result