summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-04-08 11:02:26 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-04-18 13:17:47 +0200
commita1363d39c6fe79d830dbce468c02880d2a5d7996 (patch)
tree62dff2b35c5032f896ab8414f21982e200fa49ca
parente32fc7567be2ff2cc995648e675de18133f8a066 (diff)
downloadgitlab-ce-a1363d39c6fe79d830dbce468c02880d2a5d7996.tar.gz
Add `variables` keyword to job in CI config YAML
-rw-r--r--app/models/ci/build.rb12
-rw-r--r--lib/ci/gitlab_ci_yaml_processor.rb3
-rw-r--r--spec/lib/ci/gitlab_ci_yaml_processor_spec.rb44
-rw-r--r--spec/models/build_spec.rb16
4 files changed, 60 insertions, 15 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 7d33838044b..89a9eb76331 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -365,9 +365,11 @@ module Ci
self.update(erased_by: user, erased_at: Time.now)
end
- private
-
def yaml_variables
+ global_yaml_variables + job_yaml_variables
+ end
+
+ def global_yaml_variables
if commit.config_processor
commit.config_processor.variables.map do |key, value|
{ key: key, value: value, public: true }
@@ -377,6 +379,12 @@ module Ci
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
project.variables.map do |variable|
{ key: variable.key, value: variable.value, public: false }
diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb
index b7209c14148..712dc4492c5 100644
--- a/lib/ci/gitlab_ci_yaml_processor.rb
+++ b/lib/ci/gitlab_ci_yaml_processor.rb
@@ -7,7 +7,7 @@ module Ci
ALLOWED_YAML_KEYS = [:before_script, :image, :services, :types, :stages, :variables, :cache]
ALLOWED_JOB_KEYS = [:tags, :script, :only, :except, :type, :image, :services,
:allow_failure, :type, :stage, :when, :artifacts, :cache,
- :dependencies]
+ :dependencies, :variables]
attr_reader :before_script, :image, :services, :variables, :path, :cache
@@ -85,6 +85,7 @@ module Ci
artifacts: job[:artifacts],
cache: job[:cache] || @cache,
dependencies: job[:dependencies],
+ variables: job[:variables],
}.compact
}
end
diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
index dcb8a3451bd..a3a0d06e149 100644
--- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
@@ -346,19 +346,39 @@ module Ci
end
describe "Variables" do
- it "returns variables when defined" do
- variables = {
- var1: "value1",
- var2: "value2",
- }
- config = YAML.dump({
- variables: variables,
- before_script: ["pwd"],
- rspec: { script: "rspec" }
- })
+ context 'when global variables are defined' do
+ it 'returns variables' do
+ variables = {
+ var1: "value1",
+ var2: "value2",
+ }
+ config = YAML.dump({
+ variables: variables,
+ before_script: ["pwd"],
+ rspec: { script: "rspec" }
+ })
- config_processor = GitlabCiYamlProcessor.new(config, path)
- expect(config_processor.variables).to eq(variables)
+ config_processor = GitlabCiYamlProcessor.new(config, path)
+ expect(config_processor.variables).to eq(variables)
+ 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
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index b7457808040..ee44a4c5f12 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -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) }
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