Read about our upcoming Code of Conduct on this issue

Commit 185ce32c authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Use variables collection as build predefined variables

parent 31ddfe16ee50
......@@ -252,23 +252,25 @@ def simple_variables
# All variables, including those dependent on environment, which could
# contain unexpanded variables.
def variables(environment: persisted_environment)
variables = predefined_variables
variables += project.predefined_variables
variables += pipeline.predefined_variables
variables += runner.predefined_variables if runner
variables += project.container_registry_variables
variables += project.deployment_variables if has_environment?
variables += project.auto_devops_variables
variables += yaml_variables
variables += user_variables
variables += project.group.secret_variables_for(ref, project).map(&:to_runner_variable) if project.group
variables += secret_variables(environment: environment)
variables += trigger_request.user_variables if trigger_request
variables += pipeline.variables.map(&:to_runner_variable)
variables += pipeline.pipeline_schedule.job_variables if pipeline.pipeline_schedule
variables += persisted_environment_variables if environment
collection = Gitlab::Ci::Variables::Collection.new.tap do |variables|
variables.concat(predefined_variables)
variables.concat(project.predefined_variables)
variables.concat(pipeline.predefined_variables)
variables.concat(runner.predefined_variables) if runner
variables.concat(project.container_registry_variables)
variables.concat(project.deployment_variables) if has_environment?
variables.concat(project.auto_devops_variables)
variables.concat(yaml_variables)
variables.concat(user_variables)
variables.concat(project.group.secret_variables_for(ref, project).map(&:to_runner_variable)) if project.group
variables.concat(secret_variables(environment: environment))
variables.concat(trigger_request.user_variables) if trigger_request
variables.concat(pipeline.variables)
variables.concat(pipeline.pipeline_schedule.job_variables) if pipeline.pipeline_schedule
variables.concat(persisted_environment_variables) if environment
end
variables
collection.to_runner_variables
end
def features
......
......@@ -20,8 +20,12 @@ def key=(new_key)
super(new_key.to_s.strip)
end
def to_runner_variable
def to_hash
{ key: key, value: value, public: false }
end
def to_runner_variable
to_hash
end
end
end
......@@ -1571,15 +1571,17 @@ def has_ci?
end
def predefined_variables
[
{ key: 'CI_PROJECT_ID', value: id.to_s, public: true },
{ key: 'CI_PROJECT_NAME', value: path, public: true },
{ key: 'CI_PROJECT_PATH', value: full_path, public: true },
{ key: 'CI_PROJECT_PATH_SLUG', value: full_path_slug, public: true },
{ key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path, public: true },
{ key: 'CI_PROJECT_URL', value: web_url, public: true },
{ key: 'CI_PROJECT_VISIBILITY', value: Gitlab::VisibilityLevel.string_level(visibility_level), public: true }
]
visibility = Gitlab::VisibilityLevel.string_level(visibility_level)
Gitlab::Ci::Variables::Collection.new.tap do |variables|
variables.append(key: 'CI_PROJECT_ID', value: id.to_s, public: true)
variables.append(key: 'CI_PROJECT_NAME', value: path, public: true)
variables.append(key: 'CI_PROJECT_PATH', value: full_path, public: true)
variables.append(key: 'CI_PROJECT_PATH_SLUG', value: full_path_slug, public: true)
variables.append(key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path, public: true)
variables.append(key: 'CI_PROJECT_URL', value: web_url, public: true)
variables.append(key: 'CI_PROJECT_VISIBILITY', value: visibility, public: true)
end
end
def container_registry_variables
......
......@@ -7,13 +7,17 @@ class Collection
def initialize(variables = [])
@variables = []
variables.each { |variable| append(variable) }
variables.each { |variable| self.append(variable) }
end
def append(resource)
@variables.append(Collection::Item.fabricate(resource))
end
def concat(resources)
resources.each { |variable| self.append(variable) }
end
def each
@variables.each { |variable| yield variable }
end
......
......@@ -33,10 +33,12 @@ def self.fabricate(resource)
self.new(resource)
when ::Ci::Variable
self.new(resource.to_hash)
when ::Ci::PipelineVariable
self.new(resource.to_hash)
when self
resource.dup
else
raise ArgumentError, 'Unknown CI/CD variable resource!'
raise ArgumentError, "Unknown `#{resource.class}` variable resource!"
end
end
end
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment