Commit a3b74f1a authored by Robert Speicher's avatar Robert Speicher

Merge branch '37872-fix-nasty-gdk-nuke' into 'master'

Resolve "`bin/rspec`/`bin/karma` can nuke the GDK entirely"

Closes #37872

See merge request gitlab-org/gitlab-ce!14276
parents 7a24a9d4 895ec1a1
require './spec/simplecov_env' require './spec/simplecov_env'
SimpleCovEnv.start! SimpleCovEnv.start!
ENV["RAILS_ENV"] ||= 'test' ENV["RAILS_ENV"] = 'test'
ENV["IN_MEMORY_APPLICATION_SETTINGS"] = 'true' ENV["IN_MEMORY_APPLICATION_SETTINGS"] = 'true'
require File.expand_path("../../config/environment", __FILE__) require File.expand_path("../../config/environment", __FILE__)
......
...@@ -3,6 +3,8 @@ require 'rspec/mocks' ...@@ -3,6 +3,8 @@ require 'rspec/mocks'
module TestEnv module TestEnv
extend self extend self
ComponentFailedToInstallError = Class.new(StandardError)
# When developing the seed repository, comment out the branch you will modify. # When developing the seed repository, comment out the branch you will modify.
BRANCH_SHA = { BRANCH_SHA = {
'signed-commits' => '2d1096e', 'signed-commits' => '2d1096e',
...@@ -63,6 +65,11 @@ module TestEnv ...@@ -63,6 +65,11 @@ module TestEnv
# See gitlab.yml.example test section for paths # See gitlab.yml.example test section for paths
# #
def init(opts = {}) def init(opts = {})
unless Rails.env.test?
puts "\nTestEnv.init can only be run if `RAILS_ENV` is set to 'test' not '#{Rails.env}'!\n"
exit 1
end
# Disable mailer for spinach tests # Disable mailer for spinach tests
disable_mailer if opts[:mailer] == false disable_mailer if opts[:mailer] == false
...@@ -122,50 +129,23 @@ module TestEnv ...@@ -122,50 +129,23 @@ module TestEnv
end end
def setup_gitlab_shell def setup_gitlab_shell
puts "\n==> Setting up Gitlab Shell..." component_timed_setup('GitLab Shell',
start = Time.now install_dir: Gitlab.config.gitlab_shell.path,
gitlab_shell_dir = Gitlab.config.gitlab_shell.path version: Gitlab::Shell.version_required,
shell_needs_update = component_needs_update?(gitlab_shell_dir, task: 'gitlab:shell:install')
Gitlab::Shell.version_required)
unless !shell_needs_update || system('rake', 'gitlab:shell:install')
puts "\nGitLab Shell failed to install, cleaning up #{gitlab_shell_dir}!\n"
FileUtils.rm_rf(gitlab_shell_dir)
exit 1
end
puts " GitLab Shell setup in #{Time.now - start} seconds...\n"
end end
def setup_gitaly def setup_gitaly
puts "\n==> Setting up Gitaly..."
start = Time.now
socket_path = Gitlab::GitalyClient.address('default').sub(/\Aunix:/, '') socket_path = Gitlab::GitalyClient.address('default').sub(/\Aunix:/, '')
gitaly_dir = File.dirname(socket_path) gitaly_dir = File.dirname(socket_path)
if gitaly_dir_stale?(gitaly_dir) component_timed_setup('Gitaly',
puts " Gitaly is outdated, cleaning up #{gitaly_dir}!" install_dir: gitaly_dir,
FileUtils.rm_rf(gitaly_dir) version: Gitlab::GitalyClient.expected_server_version,
end task: "gitlab:gitaly:install[#{gitaly_dir}]") do
gitaly_needs_update = component_needs_update?(gitaly_dir,
Gitlab::GitalyClient.expected_server_version)
unless !gitaly_needs_update || system('rake', "gitlab:gitaly:install[#{gitaly_dir}]") start_gitaly(gitaly_dir)
puts "\nGitaly failed to install, cleaning up #{gitaly_dir}!\n"
FileUtils.rm_rf(gitaly_dir)
exit 1
end end
start_gitaly(gitaly_dir)
puts " Gitaly setup in #{Time.now - start} seconds...\n"
end
def gitaly_dir_stale?(dir)
gitaly_executable = File.join(dir, 'gitaly')
return false unless File.exist?(gitaly_executable)
File.mtime(gitaly_executable) < File.mtime(Rails.root.join('GITALY_SERVER_VERSION'))
end end
def start_gitaly(gitaly_dir) def start_gitaly(gitaly_dir)
...@@ -320,6 +300,40 @@ module TestEnv ...@@ -320,6 +300,40 @@ module TestEnv
end end
end end
def component_timed_setup(component, install_dir:, version:, task:)
puts "\n==> Setting up #{component}..."
start = Time.now
ensure_component_dir_name_is_correct!(component, install_dir)
if component_needs_update?(install_dir, version)
# Cleanup the component entirely to ensure we start fresh
FileUtils.rm_rf(install_dir)
unless system('rake', task)
raise ComponentFailedToInstallError
end
end
yield if block_given?
rescue ComponentFailedToInstallError
puts "\n#{component} failed to install, cleaning up #{install_dir}!\n"
FileUtils.rm_rf(install_dir)
exit 1
ensure
puts " #{component} setup in #{Time.now - start} seconds...\n"
end
def ensure_component_dir_name_is_correct!(component, path)
actual_component_dir_name = File.basename(path)
expected_component_dir_name = component.parameterize
unless actual_component_dir_name == expected_component_dir_name
puts " #{component} install dir should be named '#{expected_component_dir_name}', not '#{actual_component_dir_name}' (full install path given was '#{path}')!\n"
exit 1
end
end
def component_needs_update?(component_folder, expected_version) def component_needs_update?(component_folder, expected_version)
version = File.read(File.join(component_folder, 'VERSION')).strip version = File.read(File.join(component_folder, 'VERSION')).strip
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment