diff options
| author | Sean McGivern <sean@mcgivern.me.uk> | 2017-08-07 19:24:14 +0000 |
|---|---|---|
| committer | Sean McGivern <sean@mcgivern.me.uk> | 2017-08-07 19:24:14 +0000 |
| commit | 4c8b666893aa9f5ab94b800489fd9e3240ad4f5e (patch) | |
| tree | 4c499f649a9b3461963d9c084333259aad8a57be /lib/tasks | |
| parent | 4e2b630df716174ea9b07319a0fd5eda7b60cf8e (diff) | |
| parent | ae5003a35ef47bbdafc51e3e9d0f27039f9d20a2 (diff) | |
| download | gitlab-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.rake | 49 |
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) |
