From dff10976da42cc729069cddf0f032347fe2f6b14 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 20 Jul 2016 14:15:18 +0200 Subject: Move job dependencies entry to the new CI config --- lib/ci/gitlab_ci_yaml_processor.rb | 24 ++++++++++-------------- lib/gitlab/ci/config/node/job.rb | 4 +++- spec/lib/ci/gitlab_ci_yaml_processor_spec.rb | 2 +- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index 24601fdfe85..a2e8bd22a52 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -98,21 +98,22 @@ module Ci @jobs = @ci_config.jobs @jobs.each do |name, job| - validate_job!(name, job) + # logical validation for job + + validate_job_stage!(name, job) + validate_job_dependencies!(name, job) end end def yaml_variables(name) - variables = global_variables.merge(job_variables(name)) + variables = (@variables || {}) + .merge(job_variables(name)) + variables.map do |key, value| { key: key, value: value, public: true } end end - def global_variables - @variables || {} - end - def job_variables(name) job = @jobs[name.to_sym] return {} unless job @@ -120,21 +121,16 @@ module Ci job[:variables] || {} end - def validate_job!(name, job) - validate_job_stage!(name, job) if job[:stage] - validate_job_dependencies!(name, job) if job[:dependencies] - end - def validate_job_stage!(name, job) + return unless job[:stage] + unless job[:stage].is_a?(String) && job[:stage].in?(@stages) raise ValidationError, "#{name} job: stage parameter should be #{@stages.join(", ")}" end end def validate_job_dependencies!(name, job) - unless validate_array_of_strings(job[:dependencies]) - raise ValidationError, "#{name} job: dependencies parameter should be an array of strings" - end + return unless job[:dependencies] stage_index = @stages.index(job[:stage]) diff --git a/lib/gitlab/ci/config/node/job.rb b/lib/gitlab/ci/config/node/job.rb index dc0813a8c18..ace79d829f2 100644 --- a/lib/gitlab/ci/config/node/job.rb +++ b/lib/gitlab/ci/config/node/job.rb @@ -13,7 +13,7 @@ module Gitlab type stage when artifacts cache dependencies before_script after_script variables environment] - attributes :tags, :allow_failure, :when, :environment + attributes :tags, :allow_failure, :when, :environment, :dependencies validations do validates :config, allowed_keys: ALLOWED_KEYS @@ -37,6 +37,8 @@ module Gitlab format: { with: Gitlab::Regex.environment_name_regex, message: Gitlab::Regex.environment_name_regex_message } + + validates :dependencies, array_of_strings: true end end diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb index 5785b7e59fb..61490555ff5 100644 --- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb +++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb @@ -1239,7 +1239,7 @@ EOT config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", dependencies: "string" } }) expect do GitlabCiYamlProcessor.new(config) - end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: dependencies parameter should be an array of strings") + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:rspec dependencies should be an array of strings") end end -- cgit v1.2.1