Merge pull request #2323 from riyad/rename-tasks

Rename tasks
This commit is contained in:
Dmitriy Zaporozhets 2012-12-20 13:06:14 -08:00
commit 9b07ed0690
11 changed files with 135 additions and 112 deletions

View file

@ -4,7 +4,7 @@ Creates a backup archive of the database and all repositories. This archive will
The filename will be `[TIMESTAMP]_gitlab_backup.tar`. This timestamp can be used to restore an specific backup. The filename will be `[TIMESTAMP]_gitlab_backup.tar`. This timestamp can be used to restore an specific backup.
``` ```
bundle exec rake gitlab:app:backup_create bundle exec rake gitlab:backup:create
``` ```
Example output: Example output:
@ -40,7 +40,7 @@ Deleting old backups... [SKIPPING]
### Restore a previously created backup ### Restore a previously created backup
``` ```
bundle exec rake gitlab:app:backup_restore bundle exec rake gitlab:backup:restore
``` ```
Options: Options:

View file

@ -1,6 +1,6 @@
### Enable usernames and namespaces for user projects ### Enable usernames and namespaces for user projects
This command will enable the namespace feature introduced in v4.0. It will move every project in its namespace folder. This command will enable the namespaces feature introduced in v4.0. It will move every project in its namespace folder.
Note: Note:
@ -13,7 +13,7 @@ Old path: `git@example.org:myrepo.git`
New path: `git@example.org:username/myrepo.git` or `git@example.org:groupname/myrepo.git` New path: `git@example.org:username/myrepo.git` or `git@example.org:groupname/myrepo.git`
``` ```
bundle exec rake gitlab:activate_namespaces bundle exec rake gitlab:enable_namespaces
``` ```
@ -22,7 +22,7 @@ bundle exec rake gitlab:activate_namespaces
This command will enable the auto merge feature. After this you will be able to **merge a merge request** via GitLab and use the **online editor**. This command will enable the auto merge feature. After this you will be able to **merge a merge request** via GitLab and use the **online editor**.
``` ```
bundle exec rake gitlab:app:enable_automerge bundle exec rake gitlab:enable_automerge
``` ```
Example output: Example output:

View file

@ -139,6 +139,16 @@ Checking GitLab ... Finished
``` ```
### (Re-)Create satellite repos
This will create satellite repos for all your projects.
If necessary, remove the `tmp/repo_satellites` directory and rerun the command below.
```
bundle exec rake gitlab:satellites:create
```
### Rebuild each key at gitolite config ### Rebuild each key at gitolite config
This will send all users ssh public keys to gitolite and grant them access (based on their permission) to their projects. This will send all users ssh public keys to gitolite and grant them access (based on their permission) to their projects.

View file

@ -1,7 +1,7 @@
### Add user to as a developer to all projects ### Add user to as a developer to all projects
``` ```
bundle exec rake add_user_to_project_teams[username@domain.tld] bundle exec rake gitlab:import:user_to_projects[username@domain.tld]
``` ```
@ -12,5 +12,5 @@ Notes:
* admin users are added as masters * admin users are added as masters
``` ```
bundle exec rake add_users_to_project_teams bundle exec rake gitlab:import:all_users_to_all_projects
``` ```

View file

@ -1,20 +0,0 @@
desc "Add all users to all projects (admin users are added as masters)"
task :add_users_to_project_teams => :environment do |t, args|
user_ids = User.where(:admin => false).pluck(:id)
admin_ids = User.where(:admin => true).pluck(:id)
Project.find_each do |project|
puts "Importing #{user_ids.size} users into #{project.code}"
UsersProject.bulk_import(project, user_ids, UsersProject::DEVELOPER)
puts "Importing #{admin_ids.size} admins into #{project.code}"
UsersProject.bulk_import(project, admin_ids, UsersProject::MASTER)
end
end
desc "Add user to as a developer to all projects"
task :add_user_to_project_teams, [:email] => :environment do |t, args|
user = User.find_by_email args.email
project_ids = Project.pluck(:id)
UsersProject.user_bulk_import(user, project_ids, UsersProject::DEVELOPER)
end

View file

@ -1,12 +1,12 @@
require 'active_record/fixtures' require 'active_record/fixtures'
namespace :gitlab do namespace :gitlab do
namespace :app do namespace :backup do
# Create backup of GitLab system # Create backup of GitLab system
desc "GITLAB | Create a backup of the GitLab system" desc "GITLAB | Create a backup of the GitLab system"
task :backup_create => :environment do task :create => :environment do
Rake::Task["gitlab:app:db_dump"].invoke Rake::Task["gitlab:backup:db:create"].invoke
Rake::Task["gitlab:app:repo_dump"].invoke Rake::Task["gitlab:backup:repo:create"].invoke
Dir.chdir(Gitlab.config.backup.path) Dir.chdir(Gitlab.config.backup.path)
@ -54,7 +54,7 @@ namespace :gitlab do
# Restore backup of GitLab system # Restore backup of GitLab system
desc "GITLAB | Restore a previously created backup" desc "GITLAB | Restore a previously created backup"
task :backup_restore => :environment do task :restore => :environment do
Dir.chdir(Gitlab.config.backup.path) Dir.chdir(Gitlab.config.backup.path)
# check for existing backups in the backup dir # check for existing backups in the backup dir
@ -62,7 +62,7 @@ namespace :gitlab do
puts "no backups found" if file_list.count == 0 puts "no backups found" if file_list.count == 0
if file_list.count > 1 && ENV["BACKUP"].nil? if file_list.count > 1 && ENV["BACKUP"].nil?
puts "Found more than one backup, please specify which one you want to restore:" puts "Found more than one backup, please specify which one you want to restore:"
puts "rake gitlab:app:backup_restore BACKUP=timestamp_of_backup" puts "rake gitlab:backup:restore BACKUP=timestamp_of_backup"
exit 1; exit 1;
end end
@ -93,8 +93,8 @@ namespace :gitlab do
exit 1 exit 1
end end
Rake::Task["gitlab:app:db_restore"].invoke Rake::Task["gitlab:backup:db:restore"].invoke
Rake::Task["gitlab:app:repo_restore"].invoke Rake::Task["gitlab:backup:repo:restore"].invoke
# cleanup: remove tmp files # cleanup: remove tmp files
print "Deleting tmp directories..." print "Deleting tmp directories..."
@ -110,82 +110,86 @@ namespace :gitlab do
################################# REPOSITORIES ################################# ################################# REPOSITORIES #################################
task :repo_dump => :environment do namespace :repo do
backup_path_repo = File.join(Gitlab.config.backup.path, "repositories") task :create => :environment do
FileUtils.mkdir_p(backup_path_repo) until Dir.exists?(backup_path_repo) backup_path_repo = File.join(Gitlab.config.backup.path, "repositories")
puts "Dumping repositories:" FileUtils.mkdir_p(backup_path_repo) until Dir.exists?(backup_path_repo)
project = Project.all.map { |n| [n.path, n.path_to_repo] } puts "Dumping repositories:"
project << ["gitolite-admin.git", File.join(File.dirname(project.first.second), "gitolite-admin.git")] project = Project.all.map { |n| [n.path, n.path_to_repo] }
project.each do |project| project << ["gitolite-admin.git", File.join(File.dirname(project.first.second), "gitolite-admin.git")]
print "- Dumping repository #{project.first}... " project.each do |project|
if Kernel.system("cd #{project.second} > /dev/null 2>&1 && git bundle create #{backup_path_repo}/#{project.first}.bundle --all > /dev/null 2>&1") print "- Dumping repository #{project.first}... "
puts "[DONE]".green if Kernel.system("cd #{project.second} > /dev/null 2>&1 && git bundle create #{backup_path_repo}/#{project.first}.bundle --all > /dev/null 2>&1")
else puts "[DONE]".green
puts "[FAILED]".red else
puts "[FAILED]".red
end
end end
end end
end
task :repo_restore => :environment do task :restore => :environment do
backup_path_repo = File.join(Gitlab.config.backup.path, "repositories") backup_path_repo = File.join(Gitlab.config.backup.path, "repositories")
puts "Restoring repositories:" puts "Restoring repositories:"
project = Project.all.map { |n| [n.path, n.path_to_repo] } project = Project.all.map { |n| [n.path, n.path_to_repo] }
project << ["gitolite-admin.git", File.join(File.dirname(project.first.second), "gitolite-admin.git")] project << ["gitolite-admin.git", File.join(File.dirname(project.first.second), "gitolite-admin.git")]
project.each do |project| project.each do |project|
print "- Restoring repository #{project.first}... " print "- Restoring repository #{project.first}... "
FileUtils.rm_rf(project.second) if File.dirname(project.second) # delete old stuff FileUtils.rm_rf(project.second) if File.dirname(project.second) # delete old stuff
if Kernel.system("cd #{File.dirname(project.second)} > /dev/null 2>&1 && git clone --bare #{backup_path_repo}/#{project.first}.bundle #{project.first}.git > /dev/null 2>&1") if Kernel.system("cd #{File.dirname(project.second)} > /dev/null 2>&1 && git clone --bare #{backup_path_repo}/#{project.first}.bundle #{project.first}.git > /dev/null 2>&1")
permission_commands = [ permission_commands = [
"sudo chmod -R g+rwX #{Gitlab.config.gitolite.repos_path}", "sudo chmod -R g+rwX #{Gitlab.config.git_base_path}",
"sudo chown -R #{Gitlab.config.gitolite.ssh_user}:#{Gitlab.config.gitolite.ssh_user} #{Gitlab.config.gitolite.repos_path}" "sudo chown -R #{Gitlab.config.ssh_user}:#{Gitlab.config.ssh_user} #{Gitlab.config.git_base_path}"
] ]
permission_commands.each { |command| Kernel.system(command) } permission_commands.each { |command| Kernel.system(command) }
puts "[DONE]".green puts "[DONE]".green
else else
puts "[FAILED]".red puts "[FAILED]".red
end
end end
end end
end end
###################################### DB ###################################### ###################################### DB ######################################
task :db_dump => :environment do namespace :db do
backup_path_db = File.join(Gitlab.config.backup.path, "db") task :create => :environment do
FileUtils.mkdir_p(backup_path_db) unless Dir.exists?(backup_path_db) backup_path_db = File.join(Gitlab.config.backup.path, "db")
FileUtils.mkdir_p(backup_path_db) unless Dir.exists?(backup_path_db)
puts "Dumping database tables:" puts "Dumping database tables:"
ActiveRecord::Base.connection.tables.each do |tbl| ActiveRecord::Base.connection.tables.each do |tbl|
print "- Dumping table #{tbl}... " print "- Dumping table #{tbl}... "
count = 1 count = 1
File.open(File.join(backup_path_db, tbl + ".yml"), "w+") do |file| File.open(File.join(backup_path_db, tbl + ".yml"), "w+") do |file|
ActiveRecord::Base.connection.select_all("SELECT * FROM `#{tbl}`").each do |line| ActiveRecord::Base.connection.select_all("SELECT * FROM `#{tbl}`").each do |line|
line.delete_if{|k,v| v.blank?} line.delete_if{|k,v| v.blank?}
output = {tbl + '_' + count.to_s => line} output = {tbl + '_' + count.to_s => line}
file << output.to_yaml.gsub(/^---\n/,'') + "\n" file << output.to_yaml.gsub(/^---\n/,'') + "\n"
count += 1 count += 1
end
puts "[DONE]".green
end
end
end
task :restore=> :environment do
backup_path_db = File.join(Gitlab.config.backup.path, "db")
puts "Restoring database tables:"
Rake::Task["db:reset"].invoke
Dir.glob(File.join(backup_path_db, "*.yml") ).each do |dir|
fixture_file = File.basename(dir, ".*" )
print "- Loading fixture #{fixture_file}..."
if File.size(dir) > 0
ActiveRecord::Fixtures.create_fixtures(backup_path_db, fixture_file)
puts "[DONE]".green
else
puts "[SKIPPING]".yellow
end end
puts "[DONE]".green
end end
end end
end end
task :db_restore=> :environment do end # namespace end: backup
backup_path_db = File.join(Gitlab.config.backup.path, "db")
puts "Restoring database tables:"
Rake::Task["db:reset"].invoke
Dir.glob(File.join(backup_path_db, "*.yml") ).each do |dir|
fixture_file = File.basename(dir, ".*" )
print "- Loading fixture #{fixture_file}..."
if File.size(dir) > 0
ActiveRecord::Fixtures.create_fixtures(backup_path_db, fixture_file)
puts "[DONE]".green
else
puts "[SKIPPING]".yellow
end
end
end
end # namespace end: app
end # namespace end: gitlab end # namespace end: gitlab

View file

@ -0,0 +1,24 @@
namespace :gitlab do
namespace :import do
desc "GITLAB | Add all users to all projects (admin users are added as masters)"
task :all_users_to_all_projects => :environment do |t, args|
user_ids = User.where(:admin => false).pluck(:id)
admin_ids = User.where(:admin => true).pluck(:id)
Project.find_each do |project|
puts "Importing #{user_ids.size} users into #{project.code}"
UsersProject.bulk_import(project, user_ids, UsersProject::DEVELOPER)
puts "Importing #{admin_ids.size} admins into #{project.code}"
UsersProject.bulk_import(project, admin_ids, UsersProject::MASTER)
end
end
desc "GITLAB | Add a specific user to all projects (as a developer)"
task :user_to_projects, [:email] => :environment do |t, args|
user = User.find_by_email args.email
project_ids = Project.pluck(:id)
UsersProject.user_bulk_import(user, project_ids, UsersProject::DEVELOPER)
end
end
end

View file

@ -192,7 +192,9 @@ namespace :gitlab do
else else
puts "no".red puts "no".red
try_fixing_it( try_fixing_it(
"sudo -u gitlab -H bundle exec rake gitlab:app:enable_automerge" "sudo -u gitlab -H bundle exec rake gitlab:satellites:create",
"If necessary, remove the tmp/repo_satellites directory ...",
"... and rerun the above command"
) )
for_more_information( for_more_information(
"doc/raketasks/maintenance.md " "doc/raketasks/maintenance.md "

View file

@ -1,17 +1,20 @@
namespace :gitlab do namespace :gitlab do
namespace :app do desc "GITLAB | Enable auto merge"
desc "GITLAB | Enable auto merge" task :enable_automerge => :environment do
task :enable_automerge => :environment do Gitlab::Gitolite.new.enable_automerge
Gitlab::Gitolite.new.enable_automerge
Project.find_each do |project| Project.find_each do |project|
if project.repo_exists? && !project.satellite.exists? if project.repo_exists? && !project.satellite.exists?
puts "Creating satellite for #{project.name}...".green puts "Creating satellite for #{project.name}...".green
project.satellite.create project.satellite.create
end
end end
puts "Done!".green
end end
puts "Done!".green
end
namespace :satellites do
desc "GITLAB | Create satellite repos"
task create: 'gitlab:enable_automerge'
end end
end end

View file

@ -1,6 +1,6 @@
namespace :gitlab do namespace :gitlab do
desc "GITLAB | Enable usernames and namespaces for user projects" desc "GITLAB | Enable usernames and namespaces for user projects"
task activate_namespaces: :environment do task enable_namespaces: :environment do
print "\nUsernames for users:".yellow print "\nUsernames for users:".yellow
User.find_each(batch_size: 500) do |user| User.find_each(batch_size: 500) do |user|

View file

@ -4,7 +4,7 @@ namespace :gitlab do
task :setup => [ task :setup => [
'db:setup', 'db:setup',
'db:seed_fu', 'db:seed_fu',
'gitlab:app:enable_automerge' 'gitlab:enable_automerge'
] ]
end end
end end