Sviluppo di temi in stile CI/CD

Ciao,
avete qualche suggerimento su come gestire il deployment dei temi in modo CI/CD? Il cliente si aspetta nuove release del tema ogni due settimane e vorremmo distribuire il tema tramite un processo automatizzato. Stiamo utilizzando Discourse Docker.

Vorremmo evitare l’installazione manuale per ogni release.

Nota a margine: non so se si tratti di un bug, ma sembra che il branch non venga salvato durante la prima installazione del tema. (Devo verificare ulteriormente per confermarlo)

Grazie

È già previsto. Se installi un tema tramite un repository Git, puoi aggiornare il tema all’ultimo commit con un singolo clic.

Lo so, ma non è il modo in cui vogliamo procedere.

Vogliamo avere un processo dinamico senza toccare l’amministratore di Discourse. Stavo pensando di usare il comando dei temi discourse/lib/tasks/themes.rake at main · discourse/discourse · GitHub

docker exec -it app rails themes:install -- # dati del tema

Non so se questo comando possa leggere file. Ad esempio, un file theme.yaml che conterrebbe le informazioni sul tema per l’installazione.
Quel file potrebbe essere distribuito in una cartella condivisa e il comando docker potrebbe leggerlo da lì per installare il tema o apportare aggiornamenti.

@markvanlan ha recentemente svolto un lavoro che potrebbe esserti utile

Trovi alcune informazioni sull’utilizzo nei commenti qui:

@david grazie, ma non mi è chiaro se posso passare il percorso del file come argomento. Funzionerebbe questo?

bin/rake themes:install -- theme.yaml

Forse potrei provare.

Credo che dovresti inviarlo in STDIN, quindi qualcosa come

cat theme_config.yml | bin/rake themes:install

Ma non l’ho ancora provato. Fammi sapere se funziona per te :slight_smile:

Il tuo approccio funziona perfettamente. Grazie! Il mio no. :smiley:

Ho fatto qualche esperimento modificando themes.rake aggiungendo

rake themes:install themeFile="theme.yml"

E questo:

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 ? "Input JSON non valido. \n#{ARGV.last}" : "YML non valido: \n#{theme_args}"
        exit 1
      end
    end

  log, counts = ThemesInstallTask.install(theme_args)

  puts log

  puts
  puts "Risultati:"
  puts " Installati: #{counts[:installed]}"
  puts " Aggiornati:   #{counts[:updated]}"
  puts " Errori:    #{counts[:errors]}"

  if counts[:errors] > 0
    exit 1
  end
end

Funziona perfettamente. :sweat_smile:

Come si eseguono i test per questo file?

Dovresti essere in grado di fare questo:

bin/rake themes:install theme.yml

Ho aggiunto il supporto per l’inserimento di JSON, ma questo codice è stato originariamente progettato per accettare un file yml come argomento.

Segnala che non è un JSON valido

Input JSON non valido.
theme.yml

Il mio theme.yml

test:
  url: "https://github.com/discourse/discourse-faria-theme"

Credo che dovrebbe funzionare! Controllerò perché non funziona più.

Ok, il formato corretto è bin/rake themes:install < theme.yml. Lo documenterò meglio nel codice :slight_smile:

Bene! Grazie! Sono felice di aver potuto dare una mano :sweat_smile: