2018-12-05 23:21:45 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-06-22 15:30:34 +05:30
|
|
|
module API
|
2021-01-03 14:25:43 +05:30
|
|
|
class Templates < ::API::Base
|
2017-08-17 22:00:37 +05:30
|
|
|
include PaginationParams
|
|
|
|
|
2021-01-29 00:20:46 +05:30
|
|
|
feature_category :templates
|
|
|
|
|
2016-09-13 17:45:13 +05:30
|
|
|
GLOBAL_TEMPLATE_TYPES = {
|
2016-11-03 12:29:30 +05:30
|
|
|
gitignores: {
|
|
|
|
gitlab_version: 8.8
|
|
|
|
},
|
|
|
|
gitlab_ci_ymls: {
|
|
|
|
gitlab_version: 8.9
|
2017-08-17 22:00:37 +05:30
|
|
|
},
|
2021-03-08 18:12:59 +05:30
|
|
|
gitlab_ci_syntax_ymls: {
|
|
|
|
gitlab_version: 13.8
|
|
|
|
},
|
2017-08-17 22:00:37 +05:30
|
|
|
dockerfiles: {
|
|
|
|
gitlab_version: 8.15
|
2016-11-03 12:29:30 +05:30
|
|
|
}
|
2016-06-22 15:30:34 +05:30
|
|
|
}.freeze
|
|
|
|
|
2016-09-13 17:45:13 +05:30
|
|
|
helpers do
|
|
|
|
def render_response(template_type, template)
|
|
|
|
not_found!(template_type.to_s.singularize) unless template
|
|
|
|
present template, with: Entities::Template
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
desc 'Get the list of the available license template' do
|
|
|
|
detail 'This feature was introduced in GitLab 8.7.'
|
2018-03-17 18:26:18 +05:30
|
|
|
success ::API::Entities::License
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
|
|
|
params do
|
|
|
|
optional :popular, type: Boolean, desc: 'If passed, returns only popular licenses'
|
|
|
|
use :pagination
|
|
|
|
end
|
|
|
|
get "templates/licenses" do
|
2018-11-20 20:47:30 +05:30
|
|
|
popular = declared(params)[:popular]
|
|
|
|
popular = to_boolean(popular) if popular.present?
|
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
templates = TemplateFinder.build(:licenses, nil, popular: popular).execute
|
2018-11-20 20:47:30 +05:30
|
|
|
|
|
|
|
present paginate(::Kaminari.paginate_array(templates)), with: ::API::Entities::License
|
2016-11-03 12:29:30 +05:30
|
|
|
end
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
desc 'Get the text for a specific license' do
|
|
|
|
detail 'This feature was introduced in GitLab 8.7.'
|
2018-03-17 18:26:18 +05:30
|
|
|
success ::API::Entities::License
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
|
|
|
params do
|
|
|
|
requires :name, type: String, desc: 'The name of the template'
|
|
|
|
end
|
|
|
|
get "templates/licenses/:name", requirements: { name: /[\w\.-]+/ } do
|
2018-12-05 23:21:45 +05:30
|
|
|
template = TemplateFinder.build(:licenses, nil, name: params[:name]).execute
|
2018-11-20 20:47:30 +05:30
|
|
|
|
|
|
|
not_found!('License') unless template.present?
|
2016-11-03 12:29:30 +05:30
|
|
|
|
2018-11-20 20:47:30 +05:30
|
|
|
template.resolve!(
|
|
|
|
project_name: params[:project].presence,
|
|
|
|
fullname: params[:fullname].presence || current_user&.name
|
|
|
|
)
|
2016-11-03 12:29:30 +05:30
|
|
|
|
2018-03-17 18:26:18 +05:30
|
|
|
present template, with: ::API::Entities::License
|
2016-11-03 12:29:30 +05:30
|
|
|
end
|
2017-08-17 22:00:37 +05:30
|
|
|
|
2016-11-03 12:29:30 +05:30
|
|
|
GLOBAL_TEMPLATE_TYPES.each do |template_type, properties|
|
|
|
|
gitlab_version = properties[:gitlab_version]
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
desc 'Get the list of the available template' do
|
|
|
|
detail "This feature was introduced in GitLab #{gitlab_version}."
|
|
|
|
success Entities::TemplatesList
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
use :pagination
|
|
|
|
end
|
|
|
|
get "templates/#{template_type}" do
|
2018-12-05 23:21:45 +05:30
|
|
|
templates = ::Kaminari.paginate_array(TemplateFinder.build(template_type, nil).execute)
|
2017-08-17 22:00:37 +05:30
|
|
|
present paginate(templates), with: Entities::TemplatesList
|
2016-11-03 12:29:30 +05:30
|
|
|
end
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
desc 'Get the text for a specific template present in local filesystem' do
|
|
|
|
detail "This feature was introduced in GitLab #{gitlab_version}."
|
|
|
|
success Entities::Template
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
requires :name, type: String, desc: 'The name of the template'
|
|
|
|
end
|
2018-12-13 13:39:08 +05:30
|
|
|
get "templates/#{template_type}/:name", requirements: { name: /[\w\.-]+/ } do
|
2018-12-05 23:21:45 +05:30
|
|
|
finder = TemplateFinder.build(template_type, nil, name: declared(params)[:name])
|
2018-11-20 20:47:30 +05:30
|
|
|
new_template = finder.execute
|
2016-11-03 12:29:30 +05:30
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
render_response(template_type, new_template)
|
2016-06-22 15:30:34 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|