Développement de thème à la mode CI/CD

Bonjour,

Avez-vous des suggestions sur la manière d’aborder le déploiement de thèmes dans une démarche CI/CD ? Le client s’attend à de nouvelles versions de thèmes toutes les deux semaines, et nous souhaiterions les livrer via un processus automatisé. Nous utilisons Discourse Docker.

Nous aimerions éviter l’installation manuelle à chaque version.

Petite note : je ne sais pas s’il s’agit d’un bug, mais il semble que la branche ne soit pas enregistrée lors de la première installation du thème. (Je dois vérifier cela pour confirmer.)

Merci.

Cela existe déjà. Si vous installez un thème via un dépôt Git, vous pouvez mettre à jour le thème vers le dernier commit en un seul clic.

Je le sais, mais ce n’est pas la méthode que nous souhaitons adopter.

Nous voulons un processus dynamique sans toucher à l’administrateur Discourse. J’envisage d’utiliser la commande des thèmes discourse/lib/tasks/themes.rake at main · discourse/discourse · GitHub

docker exec -it app rails themes:install -- # données du thème

Je ne sais pas si cette commande peut lire des fichiers. Par exemple, un fichier theme.yaml contenant les informations du thème pour l’installation.
Ce fichier pourrait être déployé dans un dossier partagé, et la commande Docker pourrait le lire depuis cet emplacement pour installer le thème ou effectuer des mises à jour.

@markvanlan a récemment effectué un travail qui pourrait vous être utile

Vous trouverez des informations sur son utilisation dans les commentaires ici :

@david merci, mais ce n’est pas très clair pour moi de savoir si je peux passer le chemin d’un fichier comme argument. Est-ce que cela fonctionnerait ?

bin/rake themes:install -- theme.yaml 

Je pourrais peut-être essayer.

Je pense que vous devrez le rediriger vers STDIN, donc quelque chose comme

cat theme_config.yml | bin/rake themes:install

Mais je n’ai pas testé cela. Faites-nous savoir si cela fonctionne pour vous :slight_smile:

Votre approche fonctionne parfaitement. Merci ! La mienne, non. :smiley:

J’ai un peu expérimenté en modifiant themes.rake en ajoutant

rake themes:install themeFile="theme.yml"

Et ceci :

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 ? "Entrée JSON invalide. \n#{ARGV.last}" : "YML invalide : \n#{theme_args}"
        exit 1
      end
    end

  log, counts = ThemesInstallTask.install(theme_args)

  puts log

  puts
  puts "Résultats :"
  puts " Installés : #{counts[:installed]}"
  puts " Mis à jour :   #{counts[:updated]}"
  puts " Erreurs :    #{counts[:errors]}"

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

Ça fonctionne bien. :sweat_smile:

Comment lancer les tests pour ce fichier ?

Vous devriez pouvoir faire ceci :

bin/rake themes:install theme.yml

J’ai ajouté la prise en charge du passage de JSON, mais ce code a été conçu à l’origine pour accepter un fichier yml comme argument.

Il indique que ce n’est pas un JSON valide

Entrée JSON invalide.
theme.yml

Mon theme.yml

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

Je pense que cela devrait fonctionner ! Je vais vérifier pourquoi cela ne fonctionne plus.

D’accord, le bon format est bin/rake themes:install < theme.yml. Je vais mieux documenter cela dans le code :slight_smile:

Super ! Merci ! Ravi d’avoir pu aider un peu :sweat_smile: