Commit 0749fdcf authored by Grzegorz Bizon's avatar Grzegorz Bizon

Merge branch 'pass-before-script-as-is' into 'master'

Pass before_script and script as-is preserving arrays

See merge request !12680
parents 28709a4d 6d272f8e
---
title: Pass before_script and script as-is preserving arrays
merge_request:
author:
...@@ -80,6 +80,8 @@ module Ci ...@@ -80,6 +80,8 @@ module Ci
artifacts: job[:artifacts], artifacts: job[:artifacts],
cache: job[:cache], cache: job[:cache],
dependencies: job[:dependencies], dependencies: job[:dependencies],
before_script: job[:before_script],
script: job[:script],
after_script: job[:after_script], after_script: job[:after_script],
environment: job[:environment] environment: job[:environment]
}.compact } }.compact }
......
...@@ -12,7 +12,8 @@ module Gitlab ...@@ -12,7 +12,8 @@ module Gitlab
class << self class << self
def from_commands(job) def from_commands(job)
self.new(:script).tap do |step| self.new(:script).tap do |step|
step.script = job.commands.split("\n") step.script = job.options[:before_script].to_a + job.options[:script].to_a
step.script = job.commands.split("\n") if step.script.empty?
step.timeout = job.timeout step.timeout = job.timeout
step.when = WHEN_ON_SUCCESS step.when = WHEN_ON_SUCCESS
end end
......
...@@ -163,7 +163,10 @@ module Ci ...@@ -163,7 +163,10 @@ module Ci
commands: "pwd\nrspec", commands: "pwd\nrspec",
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: {}, options: {
before_script: ["pwd"],
script: ["rspec"]
},
allow_failure: false, allow_failure: false,
when: "on_success", when: "on_success",
environment: nil, environment: nil,
...@@ -616,10 +619,12 @@ module Ci ...@@ -616,10 +619,12 @@ module Ci
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: { options: {
image: { name: "ruby:2.1", entrypoint: ["/usr/local/bin/init", "run"] }, before_script: ["pwd"],
services: [{ name: "mysql" }, script: ["rspec"],
{ name: "docker:dind", alias: "docker", entrypoint: ["/usr/local/bin/init", "run"], image: { name: "ruby:2.1", entrypoint: ["/usr/local/bin/init", "run"] },
command: ["/usr/local/bin/init", "run"] }] services: [{ name: "mysql" },
{ name: "docker:dind", alias: "docker", entrypoint: ["/usr/local/bin/init", "run"],
command: ["/usr/local/bin/init", "run"] }]
}, },
allow_failure: false, allow_failure: false,
when: "on_success", when: "on_success",
...@@ -649,10 +654,12 @@ module Ci ...@@ -649,10 +654,12 @@ module Ci
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: { options: {
image: { name: "ruby:2.5", entrypoint: ["/usr/local/bin/init", "run"] }, before_script: ["pwd"],
services: [{ name: "postgresql", alias: "db-pg", entrypoint: ["/usr/local/bin/init", "run"], script: ["rspec"],
command: ["/usr/local/bin/init", "run"] }, image: { name: "ruby:2.5", entrypoint: ["/usr/local/bin/init", "run"] },
{ name: "docker:dind" }] services: [{ name: "postgresql", alias: "db-pg", entrypoint: ["/usr/local/bin/init", "run"],
command: ["/usr/local/bin/init", "run"] },
{ name: "docker:dind" }]
}, },
allow_failure: false, allow_failure: false,
when: "on_success", when: "on_success",
...@@ -680,6 +687,8 @@ module Ci ...@@ -680,6 +687,8 @@ module Ci
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: { options: {
before_script: ["pwd"],
script: ["rspec"],
image: { name: "ruby:2.1" }, image: { name: "ruby:2.1" },
services: [{ name: "mysql" }, { name: "docker:dind" }] services: [{ name: "mysql" }, { name: "docker:dind" }]
}, },
...@@ -707,8 +716,10 @@ module Ci ...@@ -707,8 +716,10 @@ module Ci
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: { options: {
image: { name: "ruby:2.5" }, before_script: ["pwd"],
services: [{ name: "postgresql" }, { name: "docker:dind" }] script: ["rspec"],
image: { name: "ruby:2.5" },
services: [{ name: "postgresql" }, { name: "docker:dind" }]
}, },
allow_failure: false, allow_failure: false,
when: "on_success", when: "on_success",
...@@ -951,6 +962,8 @@ module Ci ...@@ -951,6 +962,8 @@ module Ci
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: { options: {
before_script: ["pwd"],
script: ["rspec"],
image: { name: "ruby:2.1" }, image: { name: "ruby:2.1" },
services: [{ name: "mysql" }], services: [{ name: "mysql" }],
artifacts: { artifacts: {
...@@ -1162,7 +1175,9 @@ module Ci ...@@ -1162,7 +1175,9 @@ module Ci
commands: "test", commands: "test",
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: {}, options: {
script: ["test"]
},
when: "on_success", when: "on_success",
allow_failure: false, allow_failure: false,
environment: nil, environment: nil,
...@@ -1208,7 +1223,9 @@ module Ci ...@@ -1208,7 +1223,9 @@ module Ci
commands: "execute-script-for-job", commands: "execute-script-for-job",
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: {}, options: {
script: ["execute-script-for-job"]
},
when: "on_success", when: "on_success",
allow_failure: false, allow_failure: false,
environment: nil, environment: nil,
...@@ -1221,7 +1238,9 @@ module Ci ...@@ -1221,7 +1238,9 @@ module Ci
commands: "execute-script-for-job", commands: "execute-script-for-job",
coverage_regex: nil, coverage_regex: nil,
tag_list: [], tag_list: [],
options: {}, options: {
script: ["execute-script-for-job"]
},
when: "on_success", when: "on_success",
allow_failure: false, allow_failure: false,
environment: nil, environment: nil,
......
require 'spec_helper' require 'spec_helper'
describe Gitlab::Ci::Build::Step do describe Gitlab::Ci::Build::Step do
let(:job) { create(:ci_build, :no_options, commands: "ls -la\ndate") }
describe '#from_commands' do describe '#from_commands' do
subject { described_class.from_commands(job) } shared_examples 'has correct script' do
subject { described_class.from_commands(job) }
it 'fabricates an object' do
expect(subject.name).to eq(:script) it 'fabricates an object' do
expect(subject.script).to eq(['ls -la', 'date']) expect(subject.name).to eq(:script)
expect(subject.timeout).to eq(job.timeout) expect(subject.script).to eq(script)
expect(subject.when).to eq('on_success') expect(subject.timeout).to eq(job.timeout)
expect(subject.allow_failure).to be_falsey expect(subject.when).to eq('on_success')
expect(subject.allow_failure).to be_falsey
end
end
context 'when commands are specified' do
it_behaves_like 'has correct script' do
let(:job) { create(:ci_build, :no_options, commands: "ls -la\ndate") }
let(:script) { ['ls -la', 'date'] }
end
end
context 'when script option is specified' do
it_behaves_like 'has correct script' do
let(:job) { create(:ci_build, :no_options, options: { script: ["ls -la\necho aaa", "date"] }) }
let(:script) { ["ls -la\necho aaa", 'date'] }
end
end
context 'when before and script option is specified' do
it_behaves_like 'has correct script' do
let(:job) do
create(:ci_build, options: {
before_script: ["ls -la\necho aaa"],
script: ["date"]
})
end
let(:script) { ["ls -la\necho aaa", 'date'] }
end
end end
end end
describe '#from_after_script' do describe '#from_after_script' do
let(:job) { create(:ci_build) }
subject { described_class.from_after_script(job) } subject { described_class.from_after_script(job) }
context 'when after_script is empty' do context 'when after_script is empty' 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