summaryrefslogtreecommitdiff
path: root/lib/tasks
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2017-08-07 19:24:14 +0000
committerSean McGivern <sean@mcgivern.me.uk>2017-08-07 19:24:14 +0000
commit4c8b666893aa9f5ab94b800489fd9e3240ad4f5e (patch)
tree4c499f649a9b3461963d9c084333259aad8a57be /lib/tasks
parent4e2b630df716174ea9b07319a0fd5eda7b60cf8e (diff)
parentae5003a35ef47bbdafc51e3e9d0f27039f9d20a2 (diff)
downloadgitlab-ce-4c8b666893aa9f5ab94b800489fd9e3240ad4f5e.tar.gz
Merge branch 'zj-project-templates' into 'master'
Allow projects to be started from a template Closes #32420 See merge request !13108
Diffstat (limited to 'lib/tasks')
-rw-r--r--lib/tasks/gitlab/update_templates.rake49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/tasks/gitlab/update_templates.rake b/lib/tasks/gitlab/update_templates.rake
index 59c32bbe7a4..a7e30423c7a 100644
--- a/lib/tasks/gitlab/update_templates.rake
+++ b/lib/tasks/gitlab/update_templates.rake
@@ -4,6 +4,55 @@ namespace :gitlab do
TEMPLATE_DATA.each { |template| update(template) }
end
+ desc "GitLab | Update project templates"
+ task :update_project_templates do
+ if Rails.env.production?
+ puts "This rake task is not meant fo production instances".red
+ exit(1)
+ end
+ admin = User.find_by(admin: true)
+
+ unless admin
+ puts "No admin user could be found".red
+ exit(1)
+ end
+
+ Gitlab::ProjectTemplate.all.each do |template|
+ params = {
+ import_url: template.clone_url,
+ namespace_id: admin.namespace.id,
+ path: template.title,
+ skip_wiki: true
+ }
+
+ puts "Creating project for #{template.name}"
+ project = Projects::CreateService.new(admin, params).execute
+
+ loop do
+ if project.finished?
+ puts "Import finished for #{template.name}"
+ break
+ end
+
+ if project.failed?
+ puts "Failed to import from #{project_params[:import_url]}".red
+ exit(1)
+ end
+
+ puts "Waiting for the import to finish"
+
+ sleep(5)
+ project.reload
+ end
+
+ Projects::ImportExport::ExportService.new(project, admin).execute
+ FileUtils.cp(project.export_project_path, template.archive_path)
+ Projects::DestroyService.new(admin, project).execute
+ puts "Exported #{template.name}".green
+ end
+ puts "Done".green
+ end
+
def update(template)
sub_dir = template.repo_url.match(/([A-Za-z-]+)\.git\z/)[1]
dir = File.join(vendor_directory, sub_dir)