From 5b7f211cbba06f7c43b55b4a38704073564a099f Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon <grzesiek.bizon@gmail.com> Date: Tue, 5 Jul 2016 13:35:50 +0200 Subject: [PATCH] Add new CI config entry that holds jobs definition --- lib/gitlab/ci/config/node/global.rb | 14 +++----- lib/gitlab/ci/config/node/jobs.rb | 18 ++++++++++ spec/lib/gitlab/ci/config/node/global_spec.rb | 4 +-- spec/lib/gitlab/ci/config/node/jobs_spec.rb | 36 +++++++++++++++++++ 4 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 lib/gitlab/ci/config/node/jobs.rb create mode 100644 spec/lib/gitlab/ci/config/node/jobs_spec.rb diff --git a/lib/gitlab/ci/config/node/global.rb b/lib/gitlab/ci/config/node/global.rb index 0a4315db047..cb2db4e9757 100644 --- a/lib/gitlab/ci/config/node/global.rb +++ b/lib/gitlab/ci/config/node/global.rb @@ -33,11 +33,14 @@ module Gitlab node :cache, Node::Cache, description: 'Configure caching between build jobs.' + node :jobs, Node::Jobs, + description: 'Definition of jobs for this pipeline.' + helpers :before_script, :image, :services, :after_script, - :variables, :stages, :types, :cache + :variables, :stages, :types, :cache, :jobs def initialize(config) - return super(config) unless config.is_a?(Hash) + return super unless config.is_a?(Hash) jobs = config.except(*self.class.nodes.keys) global = config.slice(*self.class.nodes.keys) @@ -45,13 +48,6 @@ module Gitlab 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/lib/gitlab/ci/config/node/jobs.rb b/lib/gitlab/ci/config/node/jobs.rb new file mode 100644 index 00000000000..2df2d55aca2 --- /dev/null +++ b/lib/gitlab/ci/config/node/jobs.rb @@ -0,0 +1,18 @@ +module Gitlab + module Ci + class Config + module Node + ## + # Entry that represents a set of jobs. + # + class Jobs < Entry + include Validatable + + validations do + validates :config, type: Hash + end + end + end + end + end +end diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb index 88194bf9453..8f2f9e171d1 100644 --- a/spec/lib/gitlab/ci/config/node/global_spec.rb +++ b/spec/lib/gitlab/ci/config/node/global_spec.rb @@ -35,7 +35,7 @@ describe Gitlab::Ci::Config::Node::Global do end it 'creates node object for each entry' do - expect(global.nodes.count).to eq 8 + expect(global.nodes.count).to eq 9 end it 'creates node object using valid class' do @@ -139,7 +139,7 @@ describe Gitlab::Ci::Config::Node::Global do describe '#nodes' do it 'instantizes all nodes' do - expect(global.nodes.count).to eq 8 + expect(global.nodes.count).to eq 9 end it 'contains undefined nodes' do diff --git a/spec/lib/gitlab/ci/config/node/jobs_spec.rb b/spec/lib/gitlab/ci/config/node/jobs_spec.rb new file mode 100644 index 00000000000..3afa3de06c6 --- /dev/null +++ b/spec/lib/gitlab/ci/config/node/jobs_spec.rb @@ -0,0 +1,36 @@ +require 'spec_helper' + +describe Gitlab::Ci::Config::Node::Jobs do + let(:entry) { described_class.new(config) } + + describe 'validations' do + context 'when entry config value is correct' do + let(:config) { { rspec: { script: 'rspec' } } } + + describe '#value' do + it 'returns key value' do + expect(entry.value).to eq(rspec: { script: 'rspec' }) + end + end + + describe '#valid?' do + it 'is valid' do + expect(entry).to be_valid + end + end + end + + context 'when entry value is not correct' do + context 'incorrect config value type' do + let(:config) { ['incorrect'] } + + describe '#errors' do + it 'saves errors' do + expect(entry.errors) + .to include 'jobs config should be a hash' + end + end + end + end + end +end -- GitLab