debian-mirror-gitlab/lib/gitlab/ci/project_config/external_project.rb
2023-05-27 22:25:52 +05:30

49 lines
1.2 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Ci
class ProjectConfig
class ExternalProject < Source
def content
strong_memoize(:content) do
next unless external_project_path?
path_file, path_project, ref = extract_location_tokens
config_location = { 'project' => path_project, 'file' => path_file }
config_location['ref'] = ref if ref.present?
YAML.dump('include' => [config_location])
end
end
def internal_include_prepended?
true
end
def source
:external_project_source
end
private
# Example: path/to/.gitlab-ci.yml@another-group/another-project
def external_project_path?
ci_config_path =~ /\A.+(yml|yaml)@.+\z/
end
# Example: path/to/.gitlab-ci.yml@another-group/another-project:refname
def extract_location_tokens
path_file, path_project = ci_config_path.split('@', 2)
if path_project.include? ":"
project, ref = path_project.split(':', 2)
[path_file, project, ref]
else
[path_file, path_project]
end
end
end
end
end
end