diff --git a/lib/gitlab/ci/config/node/global.rb b/lib/gitlab/ci/config/node/global.rb index f92e1eccbcf4f0d2b32a3c03133d8f429acafab8..0a4315db047fa396621c3ed80122d07f71765c5d 100644 --- a/lib/gitlab/ci/config/node/global.rb +++ b/lib/gitlab/ci/config/node/global.rb @@ -36,6 +36,22 @@ module Gitlab helpers :before_script, :image, :services, :after_script, :variables, :stages, :types, :cache + def initialize(config) + return super(config) unless config.is_a?(Hash) + + jobs = config.except(*self.class.nodes.keys) + global = config.slice(*self.class.nodes.keys) + + super(global.merge(jobs: jobs)) + end + + ## + # Temporary refactoring stub + # + def jobs + @config[:jobs] + end + def stages stages_defined? ? stages_value : types_value end diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb index c87c9e97bc82b49b711e714a101b5422d1be18e0..88194bf94531055474c3eca2341557bc8af16462 100644 --- a/spec/lib/gitlab/ci/config/node/global_spec.rb +++ b/spec/lib/gitlab/ci/config/node/global_spec.rb @@ -22,7 +22,9 @@ describe Gitlab::Ci::Config::Node::Global do variables: { VAR: 'value' }, after_script: ['make clean'], stages: ['build', 'pages'], - cache: { key: 'k', untracked: true, paths: ['public/'] } } + cache: { key: 'k', untracked: true, paths: ['public/'] }, + rspec: { script: 'rspec' }, + spinach: { script: 'spinach' } } end describe '#process!' do @@ -120,6 +122,14 @@ describe Gitlab::Ci::Config::Node::Global do .to eq(key: 'k', untracked: true, paths: ['public/']) end end + + describe '#jobs' do + it 'returns jobs configuration' do + expect(global.jobs) + .to eq(rspec: { script: 'rspec' }, + spinach: { script: 'spinach' }) + end + end end end