0b9d56f960
This will be necessary when adding gitaly settings. This version doesn't make any functional changes, but allows us to include this breaking change in 9.0 and add the needed extra settings in the future with backwards compatibility
119 lines
3.8 KiB
Ruby
119 lines
3.8 KiB
Ruby
namespace :gitlab do
|
|
namespace :cleanup do
|
|
desc "GitLab | Cleanup | Clean namespaces"
|
|
task dirs: :environment do
|
|
warn_user_is_not_gitlab
|
|
remove_flag = ENV['REMOVE']
|
|
|
|
namespaces = Namespace.pluck(:path)
|
|
Gitlab.config.repositories.storages.each do |name, repository_storage|
|
|
git_base_path = repository_storage['path']
|
|
all_dirs = Dir.glob(git_base_path + '/*')
|
|
|
|
puts git_base_path.color(:yellow)
|
|
puts "Looking for directories to remove... "
|
|
|
|
all_dirs.reject! do |dir|
|
|
# skip if git repo
|
|
dir =~ /.git$/
|
|
end
|
|
|
|
all_dirs.reject! do |dir|
|
|
dir_name = File.basename dir
|
|
|
|
# skip if namespace present
|
|
namespaces.include?(dir_name)
|
|
end
|
|
|
|
all_dirs.each do |dir_path|
|
|
if remove_flag
|
|
if FileUtils.rm_rf dir_path
|
|
puts "Removed...#{dir_path}".color(:red)
|
|
else
|
|
puts "Cannot remove #{dir_path}".color(:red)
|
|
end
|
|
else
|
|
puts "Can be removed: #{dir_path}".color(:red)
|
|
end
|
|
end
|
|
end
|
|
|
|
unless remove_flag
|
|
puts "To cleanup this directories run this command with REMOVE=true".color(:yellow)
|
|
end
|
|
end
|
|
|
|
desc "GitLab | Cleanup | Clean repositories"
|
|
task repos: :environment do
|
|
warn_user_is_not_gitlab
|
|
|
|
move_suffix = "+orphaned+#{Time.now.to_i}"
|
|
Gitlab.config.repositories.storages.each do |name, repository_storage|
|
|
repo_root = repository_storage['path']
|
|
# Look for global repos (legacy, depth 1) and normal repos (depth 2)
|
|
IO.popen(%W(find #{repo_root} -mindepth 1 -maxdepth 2 -name *.git)) do |find|
|
|
find.each_line do |path|
|
|
path.chomp!
|
|
repo_with_namespace = path
|
|
.sub(repo_root, '')
|
|
.sub(%r{^/*}, '')
|
|
.chomp('.git')
|
|
.chomp('.wiki')
|
|
next if Project.find_by_full_path(repo_with_namespace)
|
|
new_path = path + move_suffix
|
|
puts path.inspect + ' -> ' + new_path.inspect
|
|
File.rename(path, new_path)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
desc "GitLab | Cleanup | Block users that have been removed in LDAP"
|
|
task block_removed_ldap_users: :environment do
|
|
warn_user_is_not_gitlab
|
|
block_flag = ENV['BLOCK']
|
|
|
|
User.find_each do |user|
|
|
next unless user.ldap_user?
|
|
print "#{user.name} (#{user.ldap_identity.extern_uid}) ..."
|
|
if Gitlab::LDAP::Access.allowed?(user)
|
|
puts " [OK]".color(:green)
|
|
else
|
|
if block_flag
|
|
user.block! unless user.blocked?
|
|
puts " [BLOCKED]".color(:red)
|
|
else
|
|
puts " [NOT IN LDAP]".color(:yellow)
|
|
end
|
|
end
|
|
end
|
|
|
|
unless block_flag
|
|
puts "To block these users run this command with BLOCK=true".color(:yellow)
|
|
end
|
|
end
|
|
|
|
# This is a rake task which removes faulty refs. These refs where only
|
|
# created in the 8.13.RC cycle, and fixed in the stable builds which were
|
|
# released. So likely this should only be run once on gitlab.com
|
|
# Faulty refs are moved so they are kept around, else some features break.
|
|
desc 'GitLab | Cleanup | Remove faulty deployment refs'
|
|
task move_faulty_deployment_refs: :environment do
|
|
projects = Project.where(id: Deployment.select(:project_id).distinct)
|
|
|
|
projects.find_each do |project|
|
|
rugged = project.repository.rugged
|
|
|
|
max_iid = project.deployments.maximum(:iid)
|
|
|
|
rugged.references.each('refs/environments/**/*') do |ref|
|
|
id = ref.name.split('/').last.to_i
|
|
next unless id > max_iid
|
|
|
|
project.deployments.find(id).create_ref
|
|
rugged.references.delete(ref)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|