Pass before_script and script as-is preserving arrays
This commit is contained in:
parent
d6836a3bc6
commit
6d272f8e7d
5 changed files with 79 additions and 24 deletions
4
changelogs/unreleased/pass-before-script-as-is.yml
Normal file
4
changelogs/unreleased/pass-before-script-as-is.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Pass before_script and script as-is preserving arrays
|
||||
merge_request:
|
||||
author:
|
|
@ -80,6 +80,8 @@ module Ci
|
|||
artifacts: job[:artifacts],
|
||||
cache: job[:cache],
|
||||
dependencies: job[:dependencies],
|
||||
before_script: job[:before_script],
|
||||
script: job[:script],
|
||||
after_script: job[:after_script],
|
||||
environment: job[:environment]
|
||||
}.compact }
|
||||
|
|
|
@ -12,7 +12,8 @@ module Gitlab
|
|||
class << self
|
||||
def from_commands(job)
|
||||
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.when = WHEN_ON_SUCCESS
|
||||
end
|
||||
|
|
|
@ -163,7 +163,10 @@ module Ci
|
|||
commands: "pwd\nrspec",
|
||||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {},
|
||||
options: {
|
||||
before_script: ["pwd"],
|
||||
script: ["rspec"]
|
||||
},
|
||||
allow_failure: false,
|
||||
when: "on_success",
|
||||
environment: nil,
|
||||
|
@ -616,10 +619,12 @@ module Ci
|
|||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {
|
||||
image: { name: "ruby:2.1", entrypoint: ["/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"] }]
|
||||
before_script: ["pwd"],
|
||||
script: ["rspec"],
|
||||
image: { name: "ruby:2.1", entrypoint: ["/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,
|
||||
when: "on_success",
|
||||
|
@ -649,10 +654,12 @@ module Ci
|
|||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {
|
||||
image: { name: "ruby:2.5", entrypoint: ["/usr/local/bin/init", "run"] },
|
||||
services: [{ name: "postgresql", alias: "db-pg", entrypoint: ["/usr/local/bin/init", "run"],
|
||||
command: ["/usr/local/bin/init", "run"] },
|
||||
{ name: "docker:dind" }]
|
||||
before_script: ["pwd"],
|
||||
script: ["rspec"],
|
||||
image: { name: "ruby:2.5", entrypoint: ["/usr/local/bin/init", "run"] },
|
||||
services: [{ name: "postgresql", alias: "db-pg", entrypoint: ["/usr/local/bin/init", "run"],
|
||||
command: ["/usr/local/bin/init", "run"] },
|
||||
{ name: "docker:dind" }]
|
||||
},
|
||||
allow_failure: false,
|
||||
when: "on_success",
|
||||
|
@ -680,6 +687,8 @@ module Ci
|
|||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {
|
||||
before_script: ["pwd"],
|
||||
script: ["rspec"],
|
||||
image: { name: "ruby:2.1" },
|
||||
services: [{ name: "mysql" }, { name: "docker:dind" }]
|
||||
},
|
||||
|
@ -707,8 +716,10 @@ module Ci
|
|||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {
|
||||
image: { name: "ruby:2.5" },
|
||||
services: [{ name: "postgresql" }, { name: "docker:dind" }]
|
||||
before_script: ["pwd"],
|
||||
script: ["rspec"],
|
||||
image: { name: "ruby:2.5" },
|
||||
services: [{ name: "postgresql" }, { name: "docker:dind" }]
|
||||
},
|
||||
allow_failure: false,
|
||||
when: "on_success",
|
||||
|
@ -951,6 +962,8 @@ module Ci
|
|||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {
|
||||
before_script: ["pwd"],
|
||||
script: ["rspec"],
|
||||
image: { name: "ruby:2.1" },
|
||||
services: [{ name: "mysql" }],
|
||||
artifacts: {
|
||||
|
@ -1162,7 +1175,9 @@ module Ci
|
|||
commands: "test",
|
||||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {},
|
||||
options: {
|
||||
script: ["test"]
|
||||
},
|
||||
when: "on_success",
|
||||
allow_failure: false,
|
||||
environment: nil,
|
||||
|
@ -1208,7 +1223,9 @@ module Ci
|
|||
commands: "execute-script-for-job",
|
||||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {},
|
||||
options: {
|
||||
script: ["execute-script-for-job"]
|
||||
},
|
||||
when: "on_success",
|
||||
allow_failure: false,
|
||||
environment: nil,
|
||||
|
@ -1221,7 +1238,9 @@ module Ci
|
|||
commands: "execute-script-for-job",
|
||||
coverage_regex: nil,
|
||||
tag_list: [],
|
||||
options: {},
|
||||
options: {
|
||||
script: ["execute-script-for-job"]
|
||||
},
|
||||
when: "on_success",
|
||||
allow_failure: false,
|
||||
environment: nil,
|
||||
|
|
|
@ -1,21 +1,50 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::Ci::Build::Step do
|
||||
let(:job) { create(:ci_build, :no_options, commands: "ls -la\ndate") }
|
||||
|
||||
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)
|
||||
expect(subject.script).to eq(['ls -la', 'date'])
|
||||
expect(subject.timeout).to eq(job.timeout)
|
||||
expect(subject.when).to eq('on_success')
|
||||
expect(subject.allow_failure).to be_falsey
|
||||
it 'fabricates an object' do
|
||||
expect(subject.name).to eq(:script)
|
||||
expect(subject.script).to eq(script)
|
||||
expect(subject.timeout).to eq(job.timeout)
|
||||
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
|
||||
|
||||
describe '#from_after_script' do
|
||||
let(:job) { create(:ci_build) }
|
||||
|
||||
subject { described_class.from_after_script(job) }
|
||||
|
||||
context 'when after_script is empty' do
|
||||
|
|
Loading…
Reference in a new issue