Add CI job script node in new config processor
This commit is contained in:
parent
3c5b1da2a1
commit
489e9be4e8
|
@ -15,13 +15,16 @@ module Gitlab
|
|||
node :before_script, Script,
|
||||
description: 'Global before script overridden in this job.'
|
||||
|
||||
node :script, JobScript,
|
||||
description: 'Commands that will be executed in this job.'
|
||||
|
||||
node :stage, Stage,
|
||||
description: 'Pipeline stage this job will be executed into.'
|
||||
|
||||
node :type, Stage,
|
||||
description: 'Deprecated: stage this job will be executed into.'
|
||||
|
||||
helpers :before_script, :stage, :type
|
||||
helpers :before_script, :script, :stage, :type
|
||||
|
||||
def value
|
||||
raise InvalidError unless valid?
|
||||
|
@ -36,8 +39,9 @@ module Gitlab
|
|||
private
|
||||
|
||||
def to_hash
|
||||
{ before_script: before_script,
|
||||
stage: stage }
|
||||
{ before_script: before_script_value,
|
||||
script: script_value,
|
||||
stage: stage_value }
|
||||
end
|
||||
|
||||
def compose!
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
module Gitlab
|
||||
module Ci
|
||||
class Config
|
||||
module Node
|
||||
##
|
||||
# Entry that represents a job script.
|
||||
#
|
||||
class JobScript < Entry
|
||||
include Validatable
|
||||
|
||||
validations do
|
||||
include LegacyValidationHelpers
|
||||
|
||||
validate :string_or_array_of_strings
|
||||
|
||||
def string_or_array_of_strings
|
||||
unless validate_string(config) || validate_array_of_strings(config)
|
||||
errors.add(:config,
|
||||
'should be a string or an array of strings')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def value
|
||||
[@config].flatten
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -129,8 +129,8 @@ describe Gitlab::Ci::Config::Node::Global do
|
|||
describe '#jobs' do
|
||||
it 'returns jobs configuration' do
|
||||
expect(global.jobs)
|
||||
.to eq(rspec: { script: 'rspec', stage: 'test' },
|
||||
spinach: { script: 'spinach', stage: 'test' })
|
||||
.to eq(rspec: { script: %w[rspec], stage: 'test' },
|
||||
spinach: { script: %w[spinach], stage: 'test' })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::Ci::Config::Node::JobScript do
|
||||
let(:entry) { described_class.new(config) }
|
||||
|
||||
context 'when entry config value is an array' do
|
||||
let(:config) { ['ls', 'pwd'] }
|
||||
|
||||
describe '#value' do
|
||||
it 'returns array of strings' do
|
||||
expect(entry.value).to eq config
|
||||
end
|
||||
end
|
||||
|
||||
describe '#errors' do
|
||||
it 'does not append errors' do
|
||||
expect(entry.errors).to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when entry config value is a string' do
|
||||
let(:config) { 'ls' }
|
||||
|
||||
describe '#value' do
|
||||
it 'returns array with single element' do
|
||||
expect(entry.value).to eq ['ls']
|
||||
end
|
||||
end
|
||||
|
||||
describe '#valid?' do
|
||||
it 'is valid' do
|
||||
expect(entry).to be_valid
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when entry value is not valid' do
|
||||
let(:config) { 1 }
|
||||
|
||||
describe '#errors' do
|
||||
it 'saves errors' do
|
||||
expect(entry.errors)
|
||||
.to include 'job script config should be a ' \
|
||||
'string or an array of strings'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -54,7 +54,7 @@ describe Gitlab::Ci::Config::Node::Job do
|
|||
it 'returns correct value' do
|
||||
expect(entry.value)
|
||||
.to eq(before_script: %w[ls pwd],
|
||||
script: 'rspec',
|
||||
script: %w[rspec],
|
||||
stage: 'test')
|
||||
end
|
||||
end
|
||||
|
|
|
@ -62,8 +62,8 @@ describe Gitlab::Ci::Config::Node::Jobs do
|
|||
describe '#value' do
|
||||
it 'returns key value' do
|
||||
expect(entry.value)
|
||||
.to eq(rspec: { script: 'rspec', stage: 'test' },
|
||||
spinach: { script: 'spinach', stage: 'test' })
|
||||
.to eq(rspec: { script: %w[rspec], stage: 'test' },
|
||||
spinach: { script: %w[spinach], stage: 'test' })
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue