Module: Gitlab::SetupHelper::Gitaly

Extended by:
Gitlab::SetupHelper
Defined in:
lib/gitlab/setup_helper.rb

Class Method Summary collapse

Methods included from Gitlab::SetupHelper

create_configuration, generate_configuration

Class Method Details

.configuration_toml(gitaly_dir, storage_paths, gitaly_ruby: true) ⇒ Object

We cannot create config.toml files for all possible Gitaly configuations. For instance, if Gitaly is running on another machine then it makes no sense to write a config.toml file on the current machine. This method will only generate a configuration for the most common and simplest case: when we have exactly one Gitaly process and we are sure it is running locally because it uses a Unix socket. For development and testing purposes, an extra storage is added to gitaly, which is not known to Rails, but must be explicitly stubbed.


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/gitlab/setup_helper.rb', line 61

def configuration_toml(gitaly_dir, storage_paths, gitaly_ruby: true)
  storages = []
  address = nil

  Gitlab.config.repositories.storages.each do |key, val|
    if address
      if address != val['gitaly_address']
        raise ArgumentError, "Your gitlab.yml contains more than one gitaly_address."
      end
    elsif URI(val['gitaly_address']).scheme != 'unix'
      raise ArgumentError, "Automatic config.toml generation only supports 'unix:' addresses."
    else
      address = val['gitaly_address']
    end

    storages << { name: key, path: storage_paths[key] }
  end

  config = { socket_path: address.sub(/\Aunix:/, '') }

  if Rails.env.test?
    storage_path = Rails.root.join('tmp', 'tests', 'second_storage').to_s
    storages << { name: 'test_second_storage', path: storage_path }

    config[:auth] = { token: 'secret' }
    # Compared to production, tests run in constrained environments. This
    # number is meant to grow with the number of concurrent rails requests /
    # sidekiq jobs, and concurrency will be low anyway in test.
    config[:git] = { catfile_cache_size: 5 }
  end

  config[:storage] = storages

  internal_socket_dir = File.join(gitaly_dir, 'internal_sockets')
  FileUtils.mkdir(internal_socket_dir) unless File.exist?(internal_socket_dir)
  config[:internal_socket_dir] = internal_socket_dir

  config[:'gitaly-ruby'] = { dir: File.join(gitaly_dir, 'ruby') } if gitaly_ruby
  config[:'gitlab-shell'] = { dir: Gitlab.config.gitlab_shell.path }
  config[:bin_dir] = Gitlab.config.gitaly.client_path
  config[:gitlab] = { url: Gitlab.config.gitlab.url }

  TomlRB.dump(config)
end