zcuric
(Zdravko)
21.Апрель.2020 09:30:03
1
Привет!
У вас есть предложения, как подойти к развертыванию тем в рамках CI/CD? Клиент ожидает новые выпуски тем каждые две недели, и мы хотели бы автоматизировать этот процесс. Мы используем Discourse в Docker.
Мы хотим избежать ручной установки при каждом выпуске.
Кстати, не уверен, что это баг, но кажется, что ветка не сохраняется при первой установке темы. (Нужно перепроверить, чтобы подтвердить).
Спасибо.
fzngagan
(Faizaan Gagan)
21.Апрель.2020 09:52:46
2
zcuric:
Есть ли у вас предложения, как подойти к развёртыванию тем в стиле CI/CD? Клиент ожидает новые выпуски тем каждые две недели, и мы хотели бы поставлять темы в автоматизированном процессе. Мы используем Discourse Docker.
Это уже реализовано. Если вы установите тему через репозиторий Git, вы сможете обновить её до последней версии одним кликом.
zcuric
(Zdravko)
21.Апрель.2020 10:09:32
3
Я знаю это, но мы не хотим делать это таким способом.
Мы хотим иметь динамический процесс без вмешательства в администрирование Discourse. Я думал использовать команду тем: discourse/lib/tasks/themes.rake at main · discourse/discourse · GitHub
docker exec -it app rails themes:install -- # данные темы
Не уверен, может ли эта команда читать файлы. Например, файл theme.yaml, который содержал бы информацию о теме для установки.
Этот файл можно было бы развернуть в общую папку, и команда docker могла бы читать его оттуда, устанавливая тему или внося обновления.
david
(David Taylor)
21.Апрель.2020 10:19:55
4
@markvanlan недавно выполнил работу, которая может быть вам полезна
committed 02:17PM - 14 Apr 20 UTC
Информация об использовании приведена в комментариях здесь:
#
# 2 different formats are accepted:
#
# == 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}}'
#
# == YAML file formats
#
# theme_name: https://github.com/example/theme.git
# OR
# theme_name:
# 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
#
This file has been truncated. show original
zcuric
(Zdravko)
21.Апрель.2020 10:24:49
5
@david спасибо, но мне не совсем понятно, можно ли указать путь к файлу как аргумент. Сработает ли это?
bin/rake themes:install -- theme.yaml
Может, стоит попробовать.
david
(David Taylor)
21.Апрель.2020 10:29:46
6
Я думаю, вам нужно передать это через STDIN, например:
cat theme_config.yml | bin/rake themes:install
Но я не проверял это. Дайте знать, если у вас получится
zcuric
(Zdravko)
21.Апрель.2020 11:21:49
7
Ваш подход работает отлично. Спасибо! У меня не работает.
Я немного поэкспериментировал, изменив themes.rake, добавив
rake themes:install themeFile="theme.yml"
И это:
task "themes:install" => :environment do |task, args|
if ENV['themeFile']
theme_args = YAML.load_file(ENV['themeFile'])
else
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 ? "Неверный ввод JSON. \n#{ARGV.last}" : "Неверный YML: \n#{theme_args}"
exit 1
end
end
log, counts = ThemesInstallTask.install(theme_args)
puts log
puts
puts "Результаты:"
puts " Установлено: #{counts[:installed]}"
puts " Обновлено: #{counts[:updated]}"
puts " Ошибки: #{counts[:errors]}"
if counts[:errors] > 0
exit 1
end
end
Работает отлично.
Как запустить тесты для этого файла?
Вы должны быть в состоянии сделать следующее:
bin/rake themes:install theme.yml
Я добавил поддержку передачи JSON, но этот код изначально был разработан для принятия файла yml в качестве аргумента.
zcuric
(Zdravko)
21.Апрель.2020 12:30:55
9
Сообщается, что это некорректный JSON
Неверный ввод JSON.
theme.yml
Мой theme.yml
test:
url: "https://github.com/discourse/discourse-faria-theme"
Я думаю, что это должно работать! Я разберусь, почему оно перестало работать.
Хорошо, правильный формат — bin/rake themes:install < theme.yml. Я лучше опишу это в коде
zcuric
(Zdravko)
21.Апрель.2020 13:14:16
12
Отлично! Спасибо! Рад, что смог хоть немного помочь