zcuric
(Zdravko)
Abril 21, 2020, 9:30am
1
Oi,
Vocês têm alguma sugestão sobre como abordar a implantação de temas no estilo CI/CD? O cliente espera novas versões do tema a cada duas semanas, e gostaríamos de fazer o deploy do tema em um processo automatizado. Estamos usando o Discourse Docker.
Gostaríamos de evitar a instalação manual para cada versão.
Observação lateral: não sei se isso é um bug, mas parece que a branch não é salva na primeira instalação do tema. (Preciso verificar isso para confirmar)
Obrigado.
fzngagan
(Faizaan Gagan)
Abril 21, 2020, 9:52am
2
Já está disponível. Se você instalar um tema via repositório Git, pode atualizá-lo para o último commit com um único clique.
zcuric
(Zdravko)
Abril 21, 2020, 10:09am
3
Eu sei disso, mas não é assim que queremos fazer.
Queremos ter um processo dinâmico sem precisar acessar o admin do Discourse. Estava pensando em usar o comando de temas discourse/lib/tasks/themes.rake at main · discourse/discourse · GitHub
docker exec -it app rails themes:install -- # dados do tema
Não sei se esse comando consegue ler arquivos. Por exemplo, um arquivo theme.yaml que contería as informações do tema para instalação.
Esse arquivo poderia ser implantado em uma pasta compartilhada e o comando docker poderia lê-lo de lá e instalar o tema ou fazer atualizações.
david
(David Taylor)
Abril 21, 2020, 10:19am
4
@markvanlan recentemente fez algum trabalho que pode ser útil para você
committed 02:17PM - 14 Apr 20 UTC
Há algumas informações de uso nos comentários aqui:
#
# 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)
Abril 21, 2020, 10:24am
5
@david obrigado, mas não parece claro para mim se posso colocar o caminho do arquivo como um argumento. Isso funcionaria?
bin/rake themes:install -- theme.yaml
Talvez eu possa tentar.
david
(David Taylor)
Abril 21, 2020, 10:29am
6
Acho que você deve redirecionar para o STDIN, algo como
cat theme_config.yml | bin/rake themes:install
Mas eu não testei isso. Nos avise se funcionar para você
zcuric
(Zdravko)
Abril 21, 2020, 11:21am
7
Sua abordagem funciona perfeitamente. Obrigado! A minha não.
Fiz algumas experimentações modificando themes.rake ao adicionar
rake themes:install themeFile="theme.yml"
E isto:
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 ? "Entrada JSON inválida. \n#{ARGV.last}" : "YML inválido: \n#{theme_args}"
exit 1
end
end
log, counts = ThemesInstallTask.install(theme_args)
puts log
puts
puts "Resultados:"
puts " Instalados: #{counts[:installed]}"
puts " Atualizados: #{counts[:updated]}"
puts " Erros: #{counts[:errors]}"
if counts[:errors] > 0
exit 1
end
end
Funciona bem.
Como executar o spec para este arquivo?
Você deve ser capaz de fazer o seguinte:
bin/rake themes:install theme.yml
Adicionei suporte para passar JSON, mas este código foi originalmente projetado para receber um arquivo yml como argumento.
zcuric
(Zdravko)
Abril 21, 2020, 12:30pm
9
Ele informa que não é um JSON válido
Entrada JSON inválida.
theme.yml
Meu theme.yml
test:
url: "https://github.com/discourse/discourse-faria-theme"
Acredito que deveria funcionar! Vou investigar por que não está mais funcionando.
Certo, o formato correto é bin/rake themes:install < theme.yml. Vou documentar isso melhor no código
zcuric
(Zdravko)
Abril 21, 2020, 1:14pm
12
Legal! Obrigado! Feliz por ter podido ajudar um pouco