Add variables keyword to job in CI config YAML

This commit is contained in:
Grzegorz Bizon 2016-04-08 11:02:26 +02:00
parent e32fc7567b
commit a1363d39c6
4 changed files with 60 additions and 15 deletions

View file

@ -365,9 +365,11 @@ module Ci
self.update(erased_by: user, erased_at: Time.now) self.update(erased_by: user, erased_at: Time.now)
end end
private
def yaml_variables def yaml_variables
global_yaml_variables + job_yaml_variables
end
def global_yaml_variables
if commit.config_processor if commit.config_processor
commit.config_processor.variables.map do |key, value| commit.config_processor.variables.map do |key, value|
{ key: key, value: value, public: true } { key: key, value: value, public: true }
@ -377,6 +379,12 @@ module Ci
end end
end end
def job_yaml_variables
options[:variables].to_h.map do |key, value|
{ key: key, value: value, public: true }
end
end
def project_variables def project_variables
project.variables.map do |variable| project.variables.map do |variable|
{ key: variable.key, value: variable.value, public: false } { key: variable.key, value: variable.value, public: false }

View file

@ -7,7 +7,7 @@ module Ci
ALLOWED_YAML_KEYS = [:before_script, :image, :services, :types, :stages, :variables, :cache] ALLOWED_YAML_KEYS = [:before_script, :image, :services, :types, :stages, :variables, :cache]
ALLOWED_JOB_KEYS = [:tags, :script, :only, :except, :type, :image, :services, ALLOWED_JOB_KEYS = [:tags, :script, :only, :except, :type, :image, :services,
:allow_failure, :type, :stage, :when, :artifacts, :cache, :allow_failure, :type, :stage, :when, :artifacts, :cache,
:dependencies] :dependencies, :variables]
attr_reader :before_script, :image, :services, :variables, :path, :cache attr_reader :before_script, :image, :services, :variables, :path, :cache
@ -85,6 +85,7 @@ module Ci
artifacts: job[:artifacts], artifacts: job[:artifacts],
cache: job[:cache] || @cache, cache: job[:cache] || @cache,
dependencies: job[:dependencies], dependencies: job[:dependencies],
variables: job[:variables],
}.compact }.compact
} }
end end

View file

@ -346,7 +346,8 @@ module Ci
end end
describe "Variables" do describe "Variables" do
it "returns variables when defined" do context 'when global variables are defined' do
it 'returns variables' do
variables = { variables = {
var1: "value1", var1: "value1",
var2: "value2", var2: "value2",
@ -362,6 +363,25 @@ module Ci
end end
end end
context 'when job variables are defined' do
let(:job_variables) { { KEY1: 'value1', SOME_KEY_2: 'value2'} }
let(:yaml_config) do
YAML.dump(
{ before_script: ['pwd'],
rspec: {
variables: job_variables,
script: 'rspec' }
})
end
it 'appends job variable to job attributes' do
config = GitlabCiYamlProcessor.new(yaml_config, path)
expect(config.builds.first[:options][:variables]).to eq job_variables
end
end
end
describe "When" do describe "When" do
%w(on_success on_failure always).each do |when_state| %w(on_success on_failure always).each do |when_state|
it "returns #{when_state} when defined" do it "returns #{when_state} when defined" do

View file

@ -238,6 +238,22 @@ describe Ci::Build, models: true do
it { is_expected.to eq(predefined_variables + predefined_trigger_variable + yaml_variables + secure_variables + trigger_variables) } it { is_expected.to eq(predefined_variables + predefined_trigger_variable + yaml_variables + secure_variables + trigger_variables) }
end end
context 'when job variables are defined' do
before { build.update_attribute(:options, variables: job_variables) }
context 'when job variables are unique' do
let(:job_variables) { { KEY1: 'value1', KEY2: 'value2' } }
let(:resulting_variables) do
[{ key: :KEY1, value: 'value1', public: true },
{ key: :KEY2, value: 'value2', public: true }]
end
it 'includes job variables' do
expect(subject).to include(*resulting_variables)
end
end
end
end end
end end
end end