discourse/lib/tasks/site_settings.rake
Blake Erickson 5d438f805c
DEV: Add rake command to help detect dead settings (#23300)
* DEV: Add rake command to help detect dead settings

Some Site Settings may still exist but are no longer being used in the
core discourse code or in related plugins. This rake task will help
identify any unused (aka: dead) settings by using the `rg` command to
search for them.

You can execute the rake task by using this command:

`LOAD_PLUGINS=1 bin/rails "site_settings:find_dead"`

* Add env variable, apply feedback
2023-08-29 09:42:52 -06:00

93 lines
2.2 KiB
Ruby

# frozen_string_literal: true
require "yaml"
desc "Exports site settings"
task "site_settings:export" => :environment do
h = SiteSettingsTask.export_to_hash
puts h.to_yaml
end
desc "Imports site settings"
task "site_settings:import" => :environment do
yml = (STDIN.tty?) ? "" : STDIN.read
if yml == ""
puts
puts "Please specify a settings yml file"
puts "Example: rake site_settings:import < settings.yml"
exit 1
end
puts
puts "starting import..."
puts
log, counts = SiteSettingsTask.import(yml)
puts log
puts
puts "Results:"
puts " Updated: #{counts[:updated]}"
puts " Not Found: #{counts[:not_found]}"
puts " Errors: #{counts[:errors]}"
exit 1 if counts[:not_found] + counts[:errors] > 0
end
# Outputs a list of Site Settings that may no longer be in use
desc "Find dead site settings"
task "site_settings:find_dead" => :environment do
setting_names = SiteSettingsTask.names
setting_names.each do |n|
if !SiteSetting.respond_to?(n)
# Likely won't hit here, but just in case
puts "Setting #{n} does not exist."
end
end
directories = SiteSettingsTask.directories
dead_settings = []
if !SiteSettingsTask.rg_installed?
puts "Please install ripgrep to use this command"
exit 1
end
if !ENV["ALL_THE_PARENT_DIR"]
puts "To specify a custom parent directory for all-the-themes & all-the-plugins"
puts "use the ALL_THE_PARENT_DIR ENV var."
end
puts "Checking #{setting_names.count} settings in these directories:"
puts directories
puts
setting_names.each do |setting_name|
count = SiteSettingsTask.rg_search_count("SiteSetting.#{setting_name}", directories.first)
count =
SiteSettingsTask.rg_search_count(
"siteSettings.#{setting_name}",
directories.first,
) if count.zero?
directories.each do |directory|
count = SiteSettingsTask.rg_search_count(setting_name, directory) if count.zero?
end
if count.zero?
print setting_name
dead_settings << setting_name
else
print "."
end
end
puts
if dead_settings.count > 0
puts "These settings may be unused:"
puts dead_settings
else
puts "No dead settings found."
end
end