lib/gdk/command.rb (90 lines of code) (raw):

# frozen_string_literal: true module GDK # GDK Commands module Command # This is a list of existing supported commands and their associated # implementation class COMMANDS = { 'cells' => -> { GDK::Command::Cells }, 'cleanup' => -> { GDK::Command::Cleanup }, 'clickhouse' => -> { GDK::Command::Clickhouse }, 'config' => -> { GDK::Command::Config }, 'console' => -> { GDK::Command::Console }, 'bao' => -> { GDK::Command::Bao }, 'debug-info' => -> { GDK::Command::DebugInfo }, 'diff-config' => -> { GDK::Command::DiffConfig }, 'doctor' => -> { GDK::Command::Doctor }, 'env' => -> { GDK::Command::Env }, 'install' => -> { GDK::Command::Install }, 'kill' => -> { GDK::Command::Kill }, 'help' => -> { GDK::Command::Help }, '-help' => -> { GDK::Command::Help }, '--help' => -> { GDK::Command::Help }, '-h' => -> { GDK::Command::Help }, nil => -> { GDK::Command::Help }, 'measure' => -> { GDK::Command::MeasureUrl }, 'measure-workflow' => -> { GDK::Command::MeasureWorkflow }, 'open' => -> { GDK::Command::Open }, 'telemetry' => -> { GDK::Command::Telemetry }, 'psql' => -> { GDK::Command::Psql }, 'psql-geo' => -> { GDK::Command::PsqlGeo }, 'pristine' => -> { GDK::Command::Pristine }, 'rails' => -> { GDK::Command::Rails }, 'reconfigure' => -> { GDK::Command::Reconfigure }, 'redis-cli' => -> { GDK::Command::RedisCli }, 'report' => -> { GDK::Command::Report }, 'reset-data' => -> { GDK::Command::ResetData }, 'reset-praefect-data' => -> { GDK::Command::ResetPraefectData }, 'reset-registry-data' => -> { GDK::Command::ResetRegistryData }, 'import-registry-data' => -> { GDK::Command::ImportRegistryData }, 'restart' => -> { GDK::Command::Restart }, 'start' => -> { GDK::Command::Start }, 'status' => -> { GDK::Command::Status }, 'stop' => -> { GDK::Command::Stop }, 'switch' => -> { GDK::Command::Switch }, 'tail' => -> { GDK::Command::Tail }, 'truncate-legacy-tables' => -> { GDK::Command::TruncateLegacyTables }, 'update' => -> { GDK::Command::Update }, 'version' => -> { GDK::Command::Version }, '-version' => -> { GDK::Command::Version }, '--version' => -> { GDK::Command::Version } }.freeze # Entry point for gem/bin/gdk. # # It must return true/false or an exit code. def self.run(argv) name = argv.shift command = ::GDK::Command::COMMANDS[name] if command klass = command.call check_gem_version! validate_config! if klass.validate_config? result = GDK::Telemetry.with_telemetry(name) { klass.new.run(argv) } exit result else suggestions = DidYouMean::SpellChecker.new(dictionary: ::GDK::Command::COMMANDS.keys).correct(name) message = ["#{name} is not a GDK command"] if suggestions.any? message << ', did you mean - ' message << suggestions.map { |suggestion| "'gdk #{suggestion}'" }.join(' or ') message << '?' else message << '.' end GDK::Output.warn message.join GDK::Output.puts GDK::Output.info "See 'gdk help' for more detail." false end end def self.validate_config! GDK.config.validate! GDK::Services.enabled.each(&:validate!) nil rescue StandardError => e GDK::Output.error("Your GDK configuration is invalid.\n\n", e) GDK::Output.puts(e.message, stderr: true) abort('') end def self.check_gem_version! return if Gem::Version.new(GDK::GEM_VERSION) >= Gem::Version.new(GDK::REQUIRED_GEM_VERSION) GDK::Output.warn("You are running an old version of the `gitlab-development-kit` gem (#{GDK::GEM_VERSION})") GDK::Output.info("Please update your `gitlab-development-kit` to version #{GDK::REQUIRED_GEM_VERSION}:") GDK::Output.info("gem install gitlab-development-kit -v #{GDK::REQUIRED_GEM_VERSION}") GDK::Output.puts end end end