summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-07-20 14:15:18 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-07-20 14:15:18 +0200
commitdff10976da42cc729069cddf0f032347fe2f6b14 (patch)
tree403b1f281e0e6196d1ecbd3b76fdabfa7162272b
parentf83bccfe4f98281ed80c95189c5f7ed77799b2b3 (diff)
downloadgitlab-ce-dff10976da42cc729069cddf0f032347fe2f6b14.tar.gz
Move job dependencies entry to the new CI config
-rw-r--r--lib/ci/gitlab_ci_yaml_processor.rb24
-rw-r--r--lib/gitlab/ci/config/node/job.rb4
-rw-r--r--spec/lib/ci/gitlab_ci_yaml_processor_spec.rb2
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