Commit b340b597 authored by Kamil Trzcinski's avatar Kamil Trzcinski

Implement finally_script which allows to do cleanups as part of the build process

parent 8c9cc6d2
......@@ -4,12 +4,12 @@ module Ci
DEFAULT_STAGES = %w(build test deploy)
DEFAULT_STAGE = 'test'
ALLOWED_YAML_KEYS = [:before_script, :image, :services, :types, :stages, :variables, :cache]
ALLOWED_YAML_KEYS = [:before_script, :finally_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]
attr_reader :before_script, :image, :services, :variables, :path, :cache
attr_reader :before_script, :finally_script, :image, :services, :variables, :path, :cache
def initialize(config, path = nil)
@config = YAML.safe_load(config, [Symbol], [], true)
......@@ -44,6 +44,7 @@ module Ci
def initial_parsing
@before_script = @config[:before_script] || []
@finally_script = @config[:finally_script]
@image = @config[:image]
@services = @config[:services]
@stages = @config[:stages] || @config[:types]
......@@ -85,6 +86,7 @@ module Ci
artifacts: job[:artifacts],
cache: job[:cache] || @cache,
dependencies: job[:dependencies],
finally_script: @finally_script,
}.compact
}
end
......@@ -102,6 +104,10 @@ module Ci
raise ValidationError, "before_script should be an array of strings"
end
unless @finally_script.nil? || validate_array_of_strings(@finally_script)
raise ValidationError, "finally_script should be an array of strings"
end
unless @image.nil? || @image.is_a?(String)
raise ValidationError, "image should be a string"
end
......
......@@ -287,6 +287,28 @@ module Ci
end
describe "Scripts handling" do
let(:config_data) { YAML.dump(config) }
let(:config_processor) { GitlabCiYamlProcessor.new(config_data, path) }
subject { config_processor.builds_for_stage_and_ref("test", "master").first }
describe "finally_script" do
context "in global context" do
let(:config) {
{
finally_script: ["finally_script"],
test: { script: ["script"] }
}
}
it "return finally_script in options" do
expect(subject[:options][:finally_script]).to eq(["finally_script"])
end
end
end
end
describe "Image and service handling" do
it "returns image and service when defined" do
config = YAML.dump({
......@@ -607,6 +629,13 @@ EOT
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "before_script should be an array of strings")
end
it "returns errors if finally_script parameter is invalid" do
config = YAML.dump({ finally_script: "bundle update", rspec: { script: "test" } })
expect do
GitlabCiYamlProcessor.new(config, path)
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "finally_script should be an array of strings")
end
it "returns errors if image parameter is invalid" do
config = YAML.dump({ image: ["test"], rspec: { script: "test" } })
expect do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment