lib/gdk/diagnostic/missing_binaries.rb (44 lines of code) (raw):
# frozen_string_literal: true
module GDK
module Diagnostic
class MissingBinaries < Base
TITLE = 'Missing Binaries'
def success?
missing_binaries.empty?
end
def detail
return if success?
setup_commands = {
gitaly: 'make gitaly-setup',
gitlab_shell: 'make gitlab-shell-setup',
workhorse: 'make gitlab-workhorse-setup'
}
instructions = missing_binaries.filter_map { |binary| setup_commands[binary] }
<<~MESSAGE
The following binaries are missing from their expected paths:
#{missing_binaries.join("\n ")}
Please ensure you download them by running:
#{instructions.join("\n ")}
MESSAGE
end
private
def required_binaries
GDK::PackageConfig::PROJECTS.keys
end
def missing_binaries
@missing_binaries ||= required_binaries.reject { |binary| binary_exists?(binary) }
end
def binary_exists?(binary)
binary_config = GDK::PackageConfig.project(binary)
binary_paths = binary_config[:download_paths]
return true if binary == :graphql_schema
if binary == :workhorse
# Check if any file starting with 'gitlab-' exists and is executable in any of the paths
binary_paths.any? do |path|
Dir.glob(File.join(path, 'gitlab-*')).any? do |file|
File.exist?(file) && File.executable?(file)
end
end
else
binary_paths.all? { |path| File.exist?(path) && File.executable?(path) }
end
end
end
end
end