From 70bda3e89bc3828fc8771496ec6d61e41ac3d3ed Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Tue, 7 Jun 2016 14:23:47 +0200 Subject: [PATCH] Implement script in Ci config and use in legacy one --- lib/ci/gitlab_ci_yaml_processor.rb | 2 +- lib/gitlab/ci/config.rb | 5 ++++ lib/gitlab/ci/config/node/before_script.rb | 10 ++++++++ lib/gitlab/ci/config/node/entry.rb | 4 +++ lib/gitlab/ci/config/node/global.rb | 4 +++ .../ci/config/node/before_script_spec.rb | 25 ++++++++++++++----- spec/lib/gitlab/ci/config/node/global_spec.rb | 14 ++++++----- 7 files changed, 51 insertions(+), 13 deletions(-) diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index c2b941a270..0483e13b09 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -82,7 +82,7 @@ module Ci { stage_idx: stages.index(job[:stage]), stage: job[:stage], - commands: [job[:before_script] || @before_script, job[:script]].flatten.join("\n"), + commands: [job[:before_script] || [@ci_config.before_script], job[:script]].flatten.compact.join("\n"), tag_list: job[:tags] || [], name: name, only: job[:only], diff --git a/lib/gitlab/ci/config.rb b/lib/gitlab/ci/config.rb index 62cd514a72..6e3fd2aa60 100644 --- a/lib/gitlab/ci/config.rb +++ b/lib/gitlab/ci/config.rb @@ -5,6 +5,11 @@ module Gitlab delegate :valid?, :errors, to: :@global + ## + # Temporary delegations that should be removed after refactoring + # + delegate :before_script, to: :@global + def initialize(config) loader = Loader.new(config) diff --git a/lib/gitlab/ci/config/node/before_script.rb b/lib/gitlab/ci/config/node/before_script.rb index a8c350f3c7..271cb7b5da 100644 --- a/lib/gitlab/ci/config/node/before_script.rb +++ b/lib/gitlab/ci/config/node/before_script.rb @@ -5,6 +5,16 @@ module Gitlab class BeforeScript < Entry include ValidationHelpers + def description + 'Script that is executed before the one defined in a job.' + end + + def script + raise unless valid? + + @value.join("\n") + end + def validate! unless validate_array_of_strings(@value) @errors << 'before_script should be an array of strings' diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb index 3043dc4c61..f8f2d0be23 100644 --- a/lib/gitlab/ci/config/node/entry.rb +++ b/lib/gitlab/ci/config/node/entry.rb @@ -55,6 +55,10 @@ module Gitlab raise NotImplementedError end + def description + raise NotImplementedError + end + class << self attr_reader :nodes diff --git a/lib/gitlab/ci/config/node/global.rb b/lib/gitlab/ci/config/node/global.rb index cfa506c28b..5912ead21c 100644 --- a/lib/gitlab/ci/config/node/global.rb +++ b/lib/gitlab/ci/config/node/global.rb @@ -4,6 +4,10 @@ module Gitlab module Node class Global < Entry add_node :before_script, BeforeScript + + def before_script + @before_script.script + end end end end diff --git a/spec/lib/gitlab/ci/config/node/before_script_spec.rb b/spec/lib/gitlab/ci/config/node/before_script_spec.rb index 80c05f3de2..8ccefb9b9b 100644 --- a/spec/lib/gitlab/ci/config/node/before_script_spec.rb +++ b/spec/lib/gitlab/ci/config/node/before_script_spec.rb @@ -2,25 +2,38 @@ require 'spec_helper' describe Gitlab::Ci::Config::Node::BeforeScript do let(:entry) { described_class.new(value, double)} + before { entry.validate! } - describe '#validate!' do - before { entry.validate! } + context 'when entry value is correct' do + let(:value) { ['ls', 'pwd'] } - context 'when entry value is correct' do - let(:value) { ['ls', 'pwd'] } + describe '#script' do + it 'returns concatenated command' do + expect(entry.script).to eq "ls\npwd" + end + end + describe '#errors' do it 'does not append errors' do expect(entry.errors).to be_empty end end + end - context 'when entry value is not correct' do - let(:value) { 'ls' } + context 'when entry value is not correct' do + let(:value) { 'ls' } + describe '#errors' do it 'saves errors' do expect(entry.errors) .to include /should be an array of strings/ end end + + describe '#script' do + it 'raises error' do + expect { entry.script }.to raise_error + 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 05e035ada3..7f49b89f6d 100644 --- a/spec/lib/gitlab/ci/config/node/global_spec.rb +++ b/spec/lib/gitlab/ci/config/node/global_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' describe Gitlab::Ci::Config::Node::Global do let(:global) { described_class.new(hash) } + before { global.process! } + describe '#keys' do it 'can contain global config keys' do expect(global.keys).to include :before_script @@ -19,8 +21,6 @@ describe Gitlab::Ci::Config::Node::Global do end describe '#process!' do - before { global.process! } - it 'creates nodes hash' do expect(global.nodes).to be_an Array end @@ -40,6 +40,12 @@ describe Gitlab::Ci::Config::Node::Global do expect(global).not_to be_leaf end end + + describe '#before_script' do + it 'returns correct script' do + expect(global.before_script).to eq "ls\npwd" + end + end end context 'when hash is not valid' do @@ -47,8 +53,6 @@ describe Gitlab::Ci::Config::Node::Global do { before_script: 'ls' } end - before { global.process! } - describe '#valid?' do it 'is not valid' do expect(global).not_to be_valid @@ -66,8 +70,6 @@ describe Gitlab::Ci::Config::Node::Global do context 'when value is not a hash' do let(:hash) { [] } - before { global.process! } - describe '#valid?' do it 'is not valid' do expect(global).not_to be_valid