summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2015-06-30 11:59:44 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2015-06-30 12:48:48 +0200
commit1a733c84e76a1fdfc919c9ea779300eded1d1551 (patch)
tree71e231642cd0809953528f0460bc39e0c1562177
parenta7cbd3ad4245642c1aa4ae07e0b23aa39f59a8b8 (diff)
downloadgitlab-ci-1a733c84e76a1fdfc919c9ea779300eded1d1551.tar.gz
Enhance YAML validation
-rw-r--r--lib/gitlab_ci_yaml_processor.rb62
-rw-r--r--spec/lib/gitlab_ci_yaml_processor_spec.rb11
2 files changed, 36 insertions, 37 deletions
diff --git a/lib/gitlab_ci_yaml_processor.rb b/lib/gitlab_ci_yaml_processor.rb
index 46093d6..20cfef0 100644
--- a/lib/gitlab_ci_yaml_processor.rb
+++ b/lib/gitlab_ci_yaml_processor.rb
@@ -28,7 +28,7 @@ class GitlabCiYamlProcessor
def builds
@jobs.map do |name, job|
{
- script: "#{@before_script.join("\n")}\n#{normilize_script(job[:script])}",
+ script: "#{@before_script.join("\n")}\n#{normalize_script(job[:script])}",
tags: job[:tags] || [],
name: name,
only: job[:only],
@@ -40,7 +40,7 @@ class GitlabCiYamlProcessor
def deploy_builds
@deploy_jobs.map do |name, job|
{
- script: "#{@before_script.join("\n")}\n#{normilize_script(job[:script])}",
+ script: "#{@before_script.join("\n")}\n#{normalize_script(job[:script])}",
tags: job[:tags] || [],
name: name,
only: job[:only],
@@ -55,7 +55,11 @@ class GitlabCiYamlProcessor
@before_script = @config[:before_script] || []
@config.delete(:before_script)
- unless @config.is_a?(Hash) && !@config.values.any?{|job| !job.is_a?(Hash)}
+ @config.each do |name, param|
+ raise ValidationError, "Unknown parameter: #{name}" unless param.is_a?(Hash)
+ end
+
+ unless @config.values.any?{|job| job.is_a?(Hash)}
raise ValidationError, "Please define at least one job"
end
@@ -91,7 +95,7 @@ class GitlabCiYamlProcessor
end
end
- def normilize_script(script)
+ def normalize_script(script)
if script.is_a? Array
script.join("\n")
else
@@ -105,45 +109,33 @@ class GitlabCiYamlProcessor
end
@jobs.each do |name, job|
- job.keys.each do |key|
- unless [:tags, :script, :only, :except, :type].include? key
- raise ValidationError, "#{name} job: unknow parameter #{key}"
- end
- end
+ validate_job!("#{name} job", job)
+ end
- if job[:tags] && !job[:tags].is_a?(Array)
- raise ValidationError, "#{name} job: tags parameter should be an array"
- end
+ @deploy_jobs.each do |name, job|
+ validate_job!("#{name} deploy job", job)
+ end
- if job[:only] && !job[:only].is_a?(Array)
- raise ValidationError, "#{name} job: only parameter should be an array"
- end
+ true
+ end
- if job[:except] && !job[:except].is_a?(Array)
- raise ValidationError, "#{name} job: except parameter should be an array"
+ def validate_job!(name, job)
+ job.keys.each do |key|
+ unless [:tags, :script, :only, :except, :type].include? key
+ raise ValidationError, "#{name}: unknown parameter #{key}"
end
end
- @deploy_jobs.each do |name, job|
- job.keys.each do |key|
- unless [:tags, :script, :only, :except, :type].include? key
- raise ValidationError, "#{name} job: unknow parameter #{key}"
- end
- end
-
- if job[:tags] && !job[:tags].is_a?(Array)
- raise ValidationError, "#{name} deploy job: tags parameter should be an array"
- end
-
- if job[:only] && !job[:only].is_a?(Array)
- raise ValidationError, "#{name} deploy job: only parameter should be an array"
- end
+ if job[:tags] && !job[:tags].is_a?(Array)
+ raise ValidationError, "#{name}: tags parameter should be an array"
+ end
- if job[:except] && !job[:except].is_a?(Array)
- raise ValidationError, "#{name} deploy job: except parameter should be an array"
- end
+ if job[:only] && !job[:only].is_a?(Array)
+ raise ValidationError, "#{name}: only parameter should be an array"
end
- true
+ if job[:except] && !job[:except].is_a?(Array)
+ raise ValidationError, "#{name}: except parameter should be an array"
+ end
end
end
diff --git a/spec/lib/gitlab_ci_yaml_processor_spec.rb b/spec/lib/gitlab_ci_yaml_processor_spec.rb
index 34a71f9..465ee9e 100644
--- a/spec/lib/gitlab_ci_yaml_processor_spec.rb
+++ b/spec/lib/gitlab_ci_yaml_processor_spec.rb
@@ -143,14 +143,21 @@ describe GitlabCiYamlProcessor do
end
it "returns errors if before_script parameter is invalid" do
- config = YAML.dump({before_script: "bundle update"})
+ config = YAML.dump({before_script: "bundle update", rspec: {script: "test"}})
expect do
GitlabCiYamlProcessor.new(config)
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "before_script should be an array")
end
+ it "returns errors if there are unknown parameters" do
+ config = YAML.dump({extra: "bundle update"})
+ expect do
+ GitlabCiYamlProcessor.new(config)
+ end.to raise_error(GitlabCiYamlProcessor::ValidationError, "Unknown parameter: extra")
+ end
+
it "returns errors if there is no any jobs defined" do
- config = YAML.dump({test: "bundle update"})
+ config = YAML.dump({before_script: ["bundle update"]})
expect do
GitlabCiYamlProcessor.new(config)
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "Please define at least one job")