2019-07-04 13:33:05 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'yaml'
|
|
|
|
|
|
|
|
#
|
|
|
|
# 2 different formats are accepted:
|
|
|
|
#
|
2020-04-14 09:17:00 -05:00
|
|
|
# == JSON format
|
|
|
|
#
|
|
|
|
# bin/rake themes:install -- '--{"discourse-something": "https://github.com/discourse/discourse-something"}'
|
|
|
|
# OR
|
|
|
|
# bin/rake themes:install -- '--{"discourse-something": {"url": "https://github.com/discourse/discourse-something", default: true}}'
|
2019-07-04 13:33:05 -05:00
|
|
|
#
|
2020-04-14 09:17:00 -05:00
|
|
|
# == YAML file formats
|
|
|
|
#
|
|
|
|
# theme_name: https://github.com/example/theme.git
|
|
|
|
# OR
|
2019-07-04 13:33:05 -05:00
|
|
|
# theme_name:
|
2020-04-14 09:17:00 -05:00
|
|
|
# url: https://github.com/example/theme_name.git
|
|
|
|
# branch: "master"
|
|
|
|
# private_key: ""
|
|
|
|
# default: false
|
|
|
|
# add_to_all_themes: false # only for components - install on every theme
|
2019-07-04 13:33:05 -05:00
|
|
|
#
|
2020-04-14 09:17:00 -05:00
|
|
|
# In the first form, only the url is required.
|
2019-07-04 13:33:05 -05:00
|
|
|
#
|
|
|
|
desc "Install themes & theme components"
|
2020-04-14 09:17:00 -05:00
|
|
|
task "themes:install" => :environment do |task, args|
|
|
|
|
theme_args = (STDIN.tty?) ? '' : STDIN.read
|
|
|
|
use_json = theme_args == ''
|
|
|
|
|
|
|
|
theme_args = begin
|
|
|
|
use_json ? JSON.parse(ARGV.last.gsub('--', '')) : YAML::load(theme_args)
|
|
|
|
rescue
|
|
|
|
puts use_json ? "Invalid JSON input. \n#{ARGV.last}" : "Invalid YML: \n#{theme_args}"
|
|
|
|
exit 1
|
|
|
|
end
|
2019-07-04 13:33:05 -05:00
|
|
|
|
2020-04-14 09:17:00 -05:00
|
|
|
log, counts = ThemesInstallTask.install(theme_args)
|
2019-07-04 13:33:05 -05:00
|
|
|
|
|
|
|
puts log
|
|
|
|
|
|
|
|
puts
|
|
|
|
puts "Results:"
|
|
|
|
puts " Installed: #{counts[:installed]}"
|
|
|
|
puts " Updated: #{counts[:updated]}"
|
|
|
|
puts " Errors: #{counts[:errors]}"
|
|
|
|
|
|
|
|
if counts[:errors] > 0
|
|
|
|
exit 1
|
|
|
|
end
|
|
|
|
end
|
2020-06-02 22:19:42 -05:00
|
|
|
|
2020-11-16 06:44:09 -06:00
|
|
|
desc "Update themes & theme components"
|
|
|
|
task "themes:update" => :environment do |task, args|
|
2021-02-03 21:44:07 -06:00
|
|
|
Theme.where(auto_update: true, enabled: true).find_each do |theme|
|
2020-11-16 06:44:09 -06:00
|
|
|
begin
|
|
|
|
if theme.remote_theme.present?
|
|
|
|
puts "Updating #{theme.name}..."
|
|
|
|
theme.remote_theme.update_from_remote
|
2021-02-03 21:44:07 -06:00
|
|
|
theme.save!
|
2021-04-05 17:53:34 -05:00
|
|
|
unless theme.remote_theme.last_error_text.nil?
|
|
|
|
puts "Error updating #{theme.name}: #{theme.remote_theme.last_error_text}"
|
|
|
|
exit 1
|
|
|
|
end
|
2020-11-16 06:44:09 -06:00
|
|
|
end
|
|
|
|
rescue => e
|
|
|
|
STDERR.puts "Failed to update #{theme.name}"
|
|
|
|
STDERR.puts e
|
|
|
|
STDERR.puts e.backtrace
|
2021-04-05 17:53:34 -05:00
|
|
|
exit 1
|
2020-11-16 06:44:09 -06:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-06-02 22:19:42 -05:00
|
|
|
desc "List all the installed themes on the site"
|
|
|
|
task "themes:audit" => :environment do
|
|
|
|
components = Set.new
|
|
|
|
puts "Selectable themes"
|
|
|
|
puts "-----------------"
|
|
|
|
|
|
|
|
Theme.where("(enabled OR user_selectable) AND NOT component").each do |theme|
|
|
|
|
puts theme.remote_theme&.remote_url || theme.name
|
|
|
|
theme.child_themes.each do |child|
|
|
|
|
if child.enabled
|
|
|
|
repo = child.remote_theme&.remote_url || child.name
|
|
|
|
components << repo
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
puts
|
|
|
|
puts "Selectable components"
|
|
|
|
puts "---------------------"
|
|
|
|
components.each do |repo|
|
|
|
|
puts repo
|
|
|
|
end
|
|
|
|
end
|
2021-04-12 07:02:58 -05:00
|
|
|
|
|
|
|
desc "Run QUnit tests of a theme/component"
|
2021-04-26 15:05:58 -05:00
|
|
|
task "themes:qunit", :theme_name_or_url do |t, args|
|
|
|
|
name_or_url = args[:theme_name_or_url]
|
|
|
|
if name_or_url.blank?
|
|
|
|
raise "A theme name or URL must be provided."
|
|
|
|
end
|
|
|
|
if name_or_url =~ /^(url|name)=(.+)/
|
|
|
|
cmd = "THEME_#{Regexp.last_match(1).upcase}=#{Regexp.last_match(2)} "
|
|
|
|
cmd += `which rake`.strip + " qunit:test"
|
|
|
|
sh cmd
|
|
|
|
else
|
2021-04-12 07:02:58 -05:00
|
|
|
raise <<~MSG
|
2021-04-26 15:05:58 -05:00
|
|
|
Cannot parse passed argument #{name_or_url.inspect}.
|
2021-04-12 07:02:58 -05:00
|
|
|
Usage:
|
2021-04-26 15:05:58 -05:00
|
|
|
`bundle exec rake themes:unit[url=<theme_url>]`
|
2021-04-12 07:02:58 -05:00
|
|
|
OR
|
2021-04-26 15:05:58 -05:00
|
|
|
`bundle exec rake themes:unit[name=<theme_name>]`
|
2021-04-12 07:02:58 -05:00
|
|
|
MSG
|
|
|
|
end
|
|
|
|
end
|