info.rake 3.92 KB
Newer Older
1
namespace :gitlab do
2 3
  namespace :env do
    desc "GITLAB | Show information about GitLab and its environment"
4
    task info: :environment  do
5

6
      # check which OS is running
7 8 9 10 11 12 13 14 15
      os_name = run("lsb_release -irs")
      os_name ||= if File.readable?('/etc/system-release')
                    File.read('/etc/system-release')
                  end
      os_name ||= if File.readable?('/etc/debian_version')
                    debian_version = File.read('/etc/debian_version')
                    "Debian #{debian_version}"
                  end
      os_name.squish!
16

17
      # check if there is an RVM environment
18
      rvm_version = run_and_match("rvm --version", /[\d\.]+/).try(:to_s)
19 20
      # check Ruby version
      ruby_version = run_and_match("ruby --version", /[\d\.p]+/).try(:to_s)
21 22
      # check Gem version
      gem_version = run("gem --version")
23
      # check Bundler version
24
      bunder_version = run_and_match("bundle --version", /[\d\.]+/).try(:to_s)
25
      # check Bundler version
26
      rake_version = run_and_match("rake --version", /[\d\.]+/).try(:to_s)
27 28 29

      puts ""
      puts "System information".yellow
30
      puts "System:\t\t#{os_name || "unknown".red}"
31 32 33
      puts "Current User:\t#{`whoami`}"
      puts "Using RVM:\t#{rvm_version.present? ? "yes".green : "no"}"
      puts "RVM Version:\t#{rvm_version}" if rvm_version.present?
34
      puts "Ruby Version:\t#{ruby_version || "unknown".red}"
35 36 37
      puts "Gem Version:\t#{gem_version || "unknown".red}"
      puts "Bundler Version:#{bunder_version || "unknown".red}"
      puts "Rake Version:\t#{rake_version || "unknown".red}"
38 39 40 41 42 43 44 45 46 47 48


      # check database adapter
      database_adapter = ActiveRecord::Base.connection.adapter_name.downcase

      project = Project.new(path: "some-project")
      project.path = "some-project"
      # construct clone URLs
      http_clone_url = project.http_url_to_repo
      ssh_clone_url  = project.ssh_url_to_repo

49
      omniauth_providers = Gitlab.config.omniauth.providers
50 51
      omniauth_providers.map! { |provider| provider['name'] }

52 53 54 55 56 57
      puts ""
      puts "GitLab information".yellow
      puts "Version:\t#{Gitlab::Version}"
      puts "Revision:\t#{Gitlab::Revision}"
      puts "Directory:\t#{Rails.root}"
      puts "DB Adapter:\t#{database_adapter}"
58
      puts "URL:\t\t#{Gitlab.config.gitlab.url}"
59 60
      puts "HTTP Clone URL:\t#{http_clone_url}"
      puts "SSH Clone URL:\t#{ssh_clone_url}"
61 62 63
      puts "Using LDAP:\t#{Gitlab.config.ldap.enabled ? "yes".green : "no"}"
      puts "Using Omniauth:\t#{Gitlab.config.omniauth.enabled ? "yes".green : "no"}"
      puts "Omniauth Providers: #{omniauth_providers.map(&:magenta).join(', ')}" if Gitlab.config.omniauth.enabled
64 65 66 67



      # check Gitolite version
68
      gitolite_version_file = "#{Gitlab.config.gitolite.repos_path}/../gitolite/src/VERSION"
69 70 71 72 73 74
      if File.exists?(gitolite_version_file) && File.readable?(gitolite_version_file)
        gitolite_version = File.read(gitolite_version_file)
      end

      puts ""
      puts "Gitolite information".yellow
75
      puts "Version:\t#{gitolite_version || "unknown".red}"
76 77 78 79 80
      puts "Admin URI:\t#{Gitlab.config.gitolite.admin_uri}"
      puts "Admin Key:\t#{Gitlab.config.gitolite.admin_key}"
      puts "Repositories:\t#{Gitlab.config.gitolite.repos_path}"
      puts "Hooks:\t\t#{Gitlab.config.gitolite.hooks_path}"
      puts "Git:\t\t#{Gitlab.config.git.bin_path}"
81 82

    end
83 84 85 86


    # Helper methods

Riyad Preukschas's avatar
Riyad Preukschas committed
87 88 89 90 91 92 93
    # Runs the given command and matches the output agains the given pattern
    #
    # Returns nil if nothing matched
    # Retunrs the MatchData if the pattern matched
    #
    # see also #run
    # see also String#match
94 95 96 97 98 99 100 101
    def run_and_match(command, regexp)
      run(command).try(:match, regexp)
    end

    # Runs the given command
    #
    # Returns nil if the command was not found
    # Returns the output of the command otherwise
Riyad Preukschas's avatar
Riyad Preukschas committed
102 103
    #
    # see also #run_and_match
104 105 106 107 108
    def run(command)
      unless `#{command} 2>/dev/null`.blank?
        `#{command}`
      end
    end
109 110
  end
end