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

# frozen_string_literal: true require 'fileutils' module GDK module Command class DebugInfo < BaseCommand NEW_ISSUE_LINK = 'https://gitlab.com/gitlab-org/gitlab-development-kit/-/issues/new' ENV_WILDCARDS = %w[GDK_.* BUNDLE_.* GEM_.*].freeze ENV_VARS = %w[ PATH LANG LANGUAGE LC_ALL LDFLAGS CPPFLAGS PKG_CONFIG_PATH LIBPCREDIR RUBY_CONFIGURE_OPTS ].freeze def run(_ = []) GDK::Output.puts separator GDK::Output.info review_prompt GDK::Output.puts separator GDK::Output.puts "Operating system: #{os_name}" GDK::Output.puts "Architecture: #{arch}" GDK::Output.puts "Ruby version: #{ruby_version}" GDK::Output.puts "GDK version: #{gdk_version}" GDK::Output.puts GDK::Output.puts 'Environment:' environment_hash = ENV.each_with_object({}) do |(variable, value), result| next unless matches_regex?(variable) result[variable] = value end ConfigRedactor.redact(environment_hash.merge(env_vars)).each do |var, content| GDK::Output.puts "#{var}=#{content}" end if gdk_yml_exists? GDK::Output.puts GDK::Output.puts 'GDK configuration:' GDK::Output.puts gdk_yml end GDK::Output.puts separator true end def os_name shellout('uname -moprsv') end def arch shellout('arch') end def ruby_version shellout('ruby --version') end def node_version shellout('node --version') end def gdk_version shellout('git rev-parse --short HEAD', chdir: GDK.root) end def shellout(cmd, **args) Shellout.new(cmd, **args).run rescue StandardError => e "Unknown (#{e.message})" end def env_vars ENV_VARS.each_with_object({}) do |variable, result| result[variable] = ENV.fetch(variable, nil)&.gsub(Dir.home, '$HOME') end end def matches_regex?(var) var.match?(combined_env_regex) end def combined_env_regex @combined_env_regex ||= /^#{ENV_WILDCARDS.join('|')}$/ end def gdk_yml ConfigRedactor.redact(GDK.config.dump!(user_only: true)).to_yaml end def gdk_yml_exists? File.exist?(GDK::Config::FILE) end def review_prompt <<~MESSAGE Please review the content below, ensuring any sensitive information such as API keys, passwords etc are removed before submitting. To create an issue in the GitLab Development Kit project, use the following link: #{NEW_ISSUE_LINK} MESSAGE end def separator @separator ||= '-' * 80 end end end end