Skip to content

Instantly share code, notes, and snippets.

@bjelline
Created October 3, 2013 12:11
Show Gist options
  • Save bjelline/6808844 to your computer and use it in GitHub Desktop.
Save bjelline/6808844 to your computer and use it in GitHub Desktop.
Rake Task for creating a bunch of repositories in gitlab
# Inspired by https://bitbucket.org/paulopatto/gitlab/src/cdd8b38d0117/lib/tasks/bulk_import.rake
# but updated for gitlab 6
desc "Bulk Create Repositories"
task :bulk_create => :environment do |t, args|
gitlab_group = "mmt-b2012"
project_name = "patterns"
teacher = User.find_by_name("Some Person")
gl = Gitlab.config
puts "=== Bulk Create Repositories for students in #{gitlab_group} ==="
gr = Group.find_by_name(gitlab_group)
gr.users.each do |u|
puts " #{project_name} for #{u.name} and #{teacher.name}"
project = create_repo_project(project_name, u)
next if project.nil?
if project.users.include?( teacher)
else
puts "#{project_name} adding #{teacher.name}"
project.users_projects.create!(
:project_access => UsersProject::MASTER,
:user => teacher
)
end
end
end
def create_repo_project(project_name, user)
ns = user.namespace
project = user.projects.find_by_name(project_name)
if project then
puts " INFO: Project #{project_name} already exists in Gitlab for user #{user.name}, skipping."
else
params = {"name"=>project_name, "namespace_id"=>ns.id}
puts " INFO: Creating Project #{project_name} in namespace #{ns.id}"
params["description"] = "Automatically created from Rake, #{Time.now.to_s}."
project = ::Projects::CreateContext.new( user, params).execute
end
unless project.valid?
puts " ERROR: Failed to create project #{project} because #{project.errors.first}"
return nil
end
# Add user as admin for project
if project.users.include?( user )
else
puts "#{project_name} adding #{user.name}"
project.users_projects.create!(
:project_access => UsersProject::MASTER,
:user => user
)
end
if project.valid?
project
else
puts " ERROR: Failed to create project #{project} because #{project.errors.first}"
nil
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment