lib/gdk/command/base_command.rb (79 lines of code) (raw):
# frozen_string_literal: true
module GDK
module Command
# Base interface for GDK commands
class BaseCommand
# Services order in which ready messages are printed.
# Messages for missing services are printed alphabetically.
READY_MESSAGE_ORDER = [
GDK::Services::RailsWeb # Rails goes on top
].freeze
# Ensure that gdk.yml is valid by default.
def self.validate_config?
true
end
def initialize(out: Output)
@out = out
end
def run(args = [])
raise NotImplementedError
end
def run_rake(name, *args)
Rake::Task[name].invoke(*args)
true
rescue RuntimeError => e
out.error(e.message, e)
false
end
def help
raise NotImplementedError
end
protected
def config
GDK.config
end
def print_help(args)
return false unless args.intersect?(['-h', '--help'])
out.puts(help)
true
end
def display_help_message
out.divider(length: 55)
out.puts <<~HELP_MESSAGE
You can try the following that may be of assistance:
- Run 'gdk doctor'.
- Visit the troubleshooting documentation:
https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/troubleshooting/index.md.
- Visit https://gitlab.com/gitlab-org/gitlab-development-kit/-/issues to
see if there are known issues.
- Run 'gdk reset-data' if appropriate.
- Run 'gdk pristine' to reinstall dependencies, remove temporary files, and clear caches.
HELP_MESSAGE
out.divider(length: 55)
end
def print_ready_message
notices = ready_messages
return if notices.empty?
out.puts
notices.each { |msg| out.notice(msg) }
end
def ready_messages
enabled_services
.filter_map(&:ready_message)
.flat_map { |message| message.split("\n") }
.then { |notices| notices + registry_notice }
.then { |notices| notices + outdated_notice }
.compact
end
private
attr_reader :out
def enabled_services
GDK::Services
.enabled
.sort_by { |service| READY_MESSAGE_ORDER.index(service.class) || READY_MESSAGE_ORDER.size }
end
def registry_notice
return [] unless config.registry?
["A container registry is available at #{config.registry.__listen}."]
end
def outdated_notice
[GDK::Diagnostic::Version.new.detail&.split("\n")].flatten
end
end
end
end