Welcome to mirror list, hosted at ThFree Co, Russian Federation.

test-boot « _support - gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 6678a89a88cdda0f18aed56d7af8d1515b6a3d99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/env ruby
# frozen_string_literal: true

require 'tempfile'
require 'socket'
require 'optparse'

ADDR = 'socket'

def main(params) # rubocop:disable Metrics/MethodLength
  gitaly_dir = File.realpath(params[:dir])
  build_dir = File.join(gitaly_dir, '_build')
  bin_dir = File.join(build_dir, 'bin')

  git_path, use_bundled_git =
    if params[:"bundled-git"]
      ['', true]
    else
      [File.join(build_dir, 'deps', 'git-distribution', 'bin-wrappers', 'git'), false]
    end

  version = IO.popen("#{File.join(bin_dir, 'gitaly')} -version").read.delete_prefix('Gitaly, version ').strip
  version_from_file = IO.read(File.join(gitaly_dir, 'VERSION')).strip

  # Use start_with? instead of == because the version output could use git describe, if it is a source install
  # eg: Gitaly, version 1.75.0-14-gd1ecb43f
  unless version.start_with?(version_from_file)
    abort "\nversion check failed: VERSION file contained '#{version_from_file}'"\
      " but 'gitaly -version' reported '#{version}'."\
      ' If you are working from a fork, please fetch the latest tags.'
  end

  Dir.mktmpdir do |dir|
    Dir.chdir(dir)

    gitlab_shell_dir = File.join(dir, 'gitlab-shell')
    Dir.mkdir(gitlab_shell_dir)
    File.write(File.join(gitlab_shell_dir, '.gitlab_shell_secret'), 'test_gitlab_shell_token')
    write_gitaly_config('config.toml',
                        bin_dir: bin_dir,
                        dir: dir,
                        use_bundled_git: use_bundled_git,
                        git_path: git_path,
                        gitaly_dir: gitaly_dir,
                        gitlab_shell_dir: gitlab_shell_dir)

    pid = nil

    begin
      start = Time.now
      pid = spawn(File.join(bin_dir, 'gitaly'), 'config.toml')
      wait_connect
      puts
      puts "\n\nconnection established after #{Time.now - start} seconds\n\n"
    ensure
      if pid
        Process.kill('KILL', pid)
        Process.wait(pid)
      end
    end
  end
end

def write_gitaly_config(config_path, bin_dir:, dir:, use_bundled_git:, git_path:, gitaly_dir:, gitlab_shell_dir:) # rubocop:disable Metrics/ParameterLists
  File.write(config_path, <<~CONFIG
    socket_path = "#{ADDR}"
    bin_dir = "#{bin_dir}"

    [[storage]]
    name = "default"
    path = "#{dir}"

    [git]
    use_bundled_binaries = #{use_bundled_git}
    bin_path = "#{git_path}"

    [gitaly-ruby]
    dir = "#{gitaly_dir}/ruby"

    [gitlab-shell]
    dir = "#{gitlab_shell_dir}"

    [gitlab]
    url = 'http://gitlab_url'

  CONFIG
  )
end

def wait_connect
  repeats = 100
  sleep_time = 0.1

  repeats.times do
    Socket.unix(ADDR)
    return
  rescue StandardError
    print '.'
    sleep(sleep_time)
  end

  puts "failed to connect to gitaly after #{repeats * sleep_time}s"

  abort
end

params = {}
OptionParser.new do |parser|
  parser.banner = "Usage: #{$0} [options] <GITALY_DIR>"
  parser.on('--[no-]bundled-git', 'Set up Gitaly with bundled Git binaries')
end.parse!(into: params)

params[:dir] = ARGV.pop
abort 'Gitaly source directory not provided' if params[:dir].nil?

abort 'Extra arguments' unless ARGV.count.zero?

main(params)