2020-10-16 09:09:06 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Ci
|
|
|
|
class ListConfigVariablesService < ::BaseService
|
2020-12-01 15:09:28 +00:00
|
|
|
include ReactiveCaching
|
|
|
|
|
|
|
|
self.reactive_cache_key = ->(service) { [service.class.name, service.id] }
|
|
|
|
self.reactive_cache_work_type = :external_dependency
|
|
|
|
self.reactive_cache_worker_finder = ->(id, *_args) { from_cache(id) }
|
|
|
|
|
|
|
|
def self.from_cache(id)
|
|
|
|
project_id, user_id = id.split('-')
|
|
|
|
|
|
|
|
project = Project.find(project_id)
|
|
|
|
user = User.find(user_id)
|
|
|
|
|
|
|
|
new(project, user)
|
|
|
|
end
|
|
|
|
|
2020-10-16 09:09:06 +00:00
|
|
|
def execute(sha)
|
2020-12-01 15:09:28 +00:00
|
|
|
with_reactive_cache(sha) { |result| result }
|
|
|
|
end
|
|
|
|
|
|
|
|
def calculate_reactive_cache(sha)
|
2020-10-16 09:09:06 +00:00
|
|
|
config = project.ci_config_for(sha)
|
|
|
|
return {} unless config
|
|
|
|
|
2020-11-13 06:09:02 +00:00
|
|
|
result = Gitlab::Ci::YamlProcessor.new(config, project: project,
|
|
|
|
user: current_user,
|
|
|
|
sha: sha).execute
|
|
|
|
|
2020-10-16 09:09:06 +00:00
|
|
|
result.valid? ? result.variables_with_data : {}
|
|
|
|
end
|
2020-12-01 15:09:28 +00:00
|
|
|
|
|
|
|
# Required for ReactiveCaching, it is also used in `reactive_cache_worker_finder`
|
|
|
|
def id
|
|
|
|
"#{project.id}-#{current_user.id}"
|
|
|
|
end
|
2020-10-16 09:09:06 +00:00
|
|
|
end
|
|
|
|
end
|