903946c78a
Colorize is a gem licensed under the GPLv2, so we can’t use it in GitLab without relicensing GitLab under the terms of the GPL. Rainbow is licensed under the MIT license and does the exact same thing as Colorize, so Rainbow was added in place of Colorize. The syntax is slightly different for Rainbow vs. Colorize, and was updated in accordance. The gem is still a dependency of Spinach, so it’s included in the development/test environments, but won’t be packaged with the actual product, and therefore doesn’t require we relicense the product. An attempt at relicensing Colorize was made, but didn’t succeed as the library owner never responded. Rainbow library: https://github.com/sickill/rainbow Relevant issue regarding licensing in GitLab's gems: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/3775
94 lines
2.7 KiB
Ruby
94 lines
2.7 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)
|
|
git_base_path = Gitlab.config.gitlab_shell.repos_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
|
|
|
|
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}"
|
|
repo_root = Gitlab.config.gitlab_shell.repos_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_with_namespace(repo_with_namespace)
|
|
new_path = path + move_suffix
|
|
puts path.inspect + ' -> ' + new_path.inspect
|
|
File.rename(path, new_path)
|
|
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
|
|
end
|
|
end
|