Make CI job script a required configuration entry
This commit is contained in:
parent
ec3b1c6d6e
commit
65724301e6
|
@ -13,12 +13,10 @@ module Gitlab
|
||||||
type stage when artifacts cache dependencies before_script
|
type stage when artifacts cache dependencies before_script
|
||||||
after_script variables environment]
|
after_script variables environment]
|
||||||
|
|
||||||
attributes :tags, :allow_failure, :when, :dependencies
|
|
||||||
|
|
||||||
validations do
|
validations do
|
||||||
validates :config, allowed_keys: ALLOWED_KEYS
|
validates :config, allowed_keys: ALLOWED_KEYS
|
||||||
|
|
||||||
validates :config, presence: true
|
validates :config, presence: true
|
||||||
|
validates :script, presence: true
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :name, type: Symbol
|
validates :name, type: Symbol
|
||||||
|
|
||||||
|
@ -77,6 +75,8 @@ module Gitlab
|
||||||
:cache, :image, :services, :only, :except, :variables,
|
:cache, :image, :services, :only, :except, :variables,
|
||||||
:artifacts, :commands, :environment
|
:artifacts, :commands, :environment
|
||||||
|
|
||||||
|
attributes :script, :tags, :allow_failure, :when, :dependencies
|
||||||
|
|
||||||
def compose!(deps = nil)
|
def compose!(deps = nil)
|
||||||
super do
|
super do
|
||||||
if type_defined? && !stage_defined?
|
if type_defined? && !stage_defined?
|
||||||
|
@ -118,20 +118,20 @@ module Gitlab
|
||||||
|
|
||||||
def to_hash
|
def to_hash
|
||||||
{ name: name,
|
{ name: name,
|
||||||
before_script: before_script,
|
before_script: before_script_value,
|
||||||
script: script,
|
script: script_value,
|
||||||
commands: commands,
|
commands: commands,
|
||||||
image: image,
|
image: image_value,
|
||||||
services: services,
|
services: services_value,
|
||||||
stage: stage,
|
stage: stage_value,
|
||||||
cache: cache,
|
cache: cache_value,
|
||||||
only: only,
|
only: only_value,
|
||||||
except: except,
|
except: except_value,
|
||||||
variables: variables_defined? ? variables : nil,
|
variables: variables_defined? ? variables_value : nil,
|
||||||
environment: environment_defined? ? environment : nil,
|
environment: environment_defined? ? environment_value : nil,
|
||||||
environment_name: environment_defined? ? environment[:name] : nil,
|
environment_name: environment_defined? ? environment_value[:name] : nil,
|
||||||
artifacts: artifacts,
|
artifacts: artifacts_value,
|
||||||
after_script: after_script }
|
after_script: after_script_value }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1124,8 +1124,8 @@ EOT
|
||||||
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:extra config should be a hash")
|
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:extra config should be a hash")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns errors if there are unknown parameters that are hashes, but doesn't have a script" do
|
it "returns errors if services configuration is not correct" do
|
||||||
config = YAML.dump({ extra: { services: "test" } })
|
config = YAML.dump({ extra: { script: 'rspec', services: "test" } })
|
||||||
expect do
|
expect do
|
||||||
GitlabCiYamlProcessor.new(config, path)
|
GitlabCiYamlProcessor.new(config, path)
|
||||||
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:extra:services config should be an array of strings")
|
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:extra:services config should be an array of strings")
|
||||||
|
|
|
@ -19,8 +19,7 @@ describe Gitlab::Ci::Config::Entry::Job do
|
||||||
let(:entry) { described_class.new(config, name: ''.to_sym) }
|
let(:entry) { described_class.new(config, name: ''.to_sym) }
|
||||||
|
|
||||||
it 'reports error' do
|
it 'reports error' do
|
||||||
expect(entry.errors)
|
expect(entry.errors).to include "job name can't be blank"
|
||||||
.to include "job name can't be blank"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -56,6 +55,15 @@ describe Gitlab::Ci::Config::Entry::Job do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when script is not provided' do
|
||||||
|
let(:config) { { stage: 'test' } }
|
||||||
|
|
||||||
|
it 'returns error about missing script entry' do
|
||||||
|
expect(entry).not_to be_valid
|
||||||
|
expect(entry.errors).to include "job script can't be blank"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -78,7 +86,7 @@ describe Gitlab::Ci::Config::Entry::Job do
|
||||||
before { entry.compose!(deps) }
|
before { entry.compose!(deps) }
|
||||||
|
|
||||||
let(:config) do
|
let(:config) do
|
||||||
{ image: 'some_image', cache: { key: 'test' } }
|
{ script: 'rspec', image: 'some_image', cache: { key: 'test' } }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'overrides global config' do
|
it 'overrides global config' do
|
||||||
|
|
Loading…
Reference in New Issue