diff options
Diffstat (limited to 'lib/tasks/gitlab/shell.rake')
-rw-r--r-- | lib/tasks/gitlab/shell.rake | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/lib/tasks/gitlab/shell.rake b/lib/tasks/gitlab/shell.rake deleted file mode 100644 index e835d6cb9b7..00000000000 --- a/lib/tasks/gitlab/shell.rake +++ /dev/null @@ -1,138 +0,0 @@ -namespace :gitlab do - namespace :shell do - desc "GITLAB | Install or upgrade gitlab-shell" - task :install, [:tag, :repo] => :environment do |t, args| - warn_user_is_not_gitlab - - default_version = Gitlab::Shell.version_required - args.with_defaults(tag: 'v' + default_version, repo: "https://gitlab.com/gitlab-org/gitlab-shell.git") - - user = Gitlab.config.gitlab.user - home_dir = Rails.env.test? ? Rails.root.join('tmp/tests') : Gitlab.config.gitlab.user_home - gitlab_url = Gitlab.config.gitlab.url - # gitlab-shell requires a / at the end of the url - gitlab_url += '/' unless gitlab_url.end_with?('/') - repos_path = Gitlab.config.gitlab_shell.repos_path - target_dir = Gitlab.config.gitlab_shell.path - - # Clone if needed - unless File.directory?(target_dir) - system(*%W(git clone -- #{args.repo} #{target_dir})) - end - - # Make sure we're on the right tag - Dir.chdir(target_dir) do - # First try to checkout without fetching - # to avoid stalling tests if the Internet is down. - reseted = reset_to_commit(args) - - unless reseted - system(*%W(git fetch origin)) - reset_to_commit(args) - end - - config = { - user: user, - gitlab_url: gitlab_url, - http_settings: {self_signed_cert: false}.stringify_keys, - repos_path: repos_path, - auth_file: File.join(home_dir, ".ssh", "authorized_keys"), - redis: { - bin: %x{which redis-cli}.chomp, - namespace: "resque:gitlab" - }.stringify_keys, - log_level: "INFO", - audit_usernames: false - }.stringify_keys - - redis_url = URI.parse(ENV['REDIS_URL'] || "redis://localhost:6379") - - if redis_url.scheme == 'unix' - config['redis']['socket'] = redis_url.path - else - config['redis']['host'] = redis_url.host - config['redis']['port'] = redis_url.port - end - - # Generate config.yml based on existing gitlab settings - File.open("config.yml", "w+") {|f| f.puts config.to_yaml} - - # Launch installation process - system(*%W(bin/install)) - end - - # Required for debian packaging with PKGR: Setup .ssh/environment with - # the current PATH, so that the correct ruby version gets loaded - # Requires to set "PermitUserEnvironment yes" in sshd config (should not - # be an issue since it is more than likely that there are no "normal" - # user accounts on a gitlab server). The alternative is for the admin to - # install a ruby (1.9.3+) in the global path. - File.open(File.join(home_dir, ".ssh", "environment"), "w+") do |f| - f.puts "PATH=#{ENV['PATH']}" - end - end - - desc "GITLAB | Setup gitlab-shell" - task setup: :environment do - setup - end - - desc "GITLAB | Build missing projects" - task build_missing_projects: :environment do - Project.find_each(batch_size: 1000) do |project| - path_to_repo = project.repository.path_to_repo - if File.exists?(path_to_repo) - print '-' - else - if Gitlab::Shell.new.add_repository(project.path_with_namespace) - print '.' - else - print 'F' - end - end - end - end - end - - def setup - warn_user_is_not_gitlab - - unless ENV['force'] == 'yes' - puts "This will rebuild an authorized_keys file." - puts "You will lose any data stored in authorized_keys file." - ask_to_continue - puts "" - end - - Gitlab::Shell.new.remove_all_keys - - Gitlab::Shell.new.batch_add_keys do |adder| - Key.find_each(batch_size: 1000) do |key| - adder.add_key(key.shell_id, key.key) - print '.' - end - end - puts "" - - unless $?.success? - puts "Failed to add keys...".red - exit 1 - end - - rescue Gitlab::TaskAbortedByUserError - puts "Quitting...".red - exit 1 - end - - def reset_to_commit(args) - tag, status = Gitlab::Popen.popen(%W(git describe -- #{args.tag})) - - unless status.zero? - tag, status = Gitlab::Popen.popen(%W(git describe -- origin/#{args.tag})) - end - - tag = tag.strip - system(*%W(git reset --hard #{tag})) - end -end - |