diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-07-18 15:46:24 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-07-18 16:26:38 +0200 |
commit | 6d466733a2ab90f2a4d9904e7bfe1ef887568210 (patch) | |
tree | 86356a90bcfbb575c4b5bd0ddf88d90e8bf1c5da | |
parent | 7cef4f1908d99743bf1dfb9c1cfdd6b2936b2b3d (diff) | |
download | gitlab-ce-6d466733a2ab90f2a4d9904e7bfe1ef887568210.tar.gz |
Validate allowed keys only in new CI config
-rw-r--r-- | lib/ci/gitlab_ci_yaml_processor.rb | 19 | ||||
-rw-r--r-- | lib/gitlab/ci/config/node/job.rb | 5 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/config/node/job_spec.rb | 10 |
3 files changed, 15 insertions, 19 deletions
diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index 6901dfbd15d..5c54489ab3f 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -4,15 +4,6 @@ module Ci include Gitlab::Ci::Config::Node::LegacyValidationHelpers - DEFAULT_STAGE = 'test' - ALLOWED_YAML_KEYS = [:before_script, :after_script, :image, :services, :types, :stages, :variables, :cache] - ALLOWED_JOB_KEYS = [:tags, :script, :only, :except, :type, :image, :services, - :allow_failure, :type, :stage, :when, :artifacts, :cache, - :dependencies, :before_script, :after_script, :variables, - :environment] - ALLOWED_CACHE_KEYS = [:key, :untracked, :paths] - ALLOWED_ARTIFACTS_KEYS = [:name, :untracked, :paths, :when, :expire_in] - attr_reader :path, :cache, :stages def initialize(config, path = nil) @@ -102,21 +93,11 @@ module Ci def validate_job!(name, job) raise ValidationError, "Unknown parameter: #{name}" unless job.is_a?(Hash) && job.has_key?(:script) - validate_job_keys!(name, job) validate_job_types!(name, job) - validate_job_stage!(name, job) if job[:stage] validate_job_dependencies!(name, job) if job[:dependencies] end - def validate_job_keys!(name, job) - job.keys.each do |key| - unless (ALLOWED_JOB_KEYS + %i[name]).include? key - raise ValidationError, "#{name} job: unknown parameter #{key}" - end - end - end - def validate_job_types!(name, job) if job[:tags] && !validate_array_of_strings(job[:tags]) raise ValidationError, "#{name} job: tags parameter should be an array of strings" diff --git a/lib/gitlab/ci/config/node/job.rb b/lib/gitlab/ci/config/node/job.rb index a6d7f16769c..48569a7e890 100644 --- a/lib/gitlab/ci/config/node/job.rb +++ b/lib/gitlab/ci/config/node/job.rb @@ -9,6 +9,11 @@ module Gitlab include Configurable validations do + validates :config, allowed_keys: + %i[tags script only except type image services allow_failure + type stage when artifacts cache dependencies before_script + after_script variables environment] + validates :config, presence: true validates :name, presence: true validates :name, type: Symbol diff --git a/spec/lib/gitlab/ci/config/node/job_spec.rb b/spec/lib/gitlab/ci/config/node/job_spec.rb index 2721908c5d7..1484fb60dd8 100644 --- a/spec/lib/gitlab/ci/config/node/job_spec.rb +++ b/spec/lib/gitlab/ci/config/node/job_spec.rb @@ -46,6 +46,16 @@ describe Gitlab::Ci::Config::Node::Job do end end end + + context 'when unknown keys detected' do + let(:config) { { unknown: true } } + + describe '#valid' do + it 'is not valid' do + expect(entry).not_to be_valid + end + end + end end end |