CI/CD方式でのテーマ開発

こんにちは、
CI/CD の仕組みでテーマをデプロイする方法について、ご提案はありますか?お客様は 2 週間に 1 回のペースで新しいテーマのリリースを求めており、自動化されたプロセスでテーマをリリースしたいと考えています。Discourse Docker を使用しています。

各リリースごとに手動でのインストールは避けたいと考えています。

余談ですが、バグかどうかはわかりませんが、テーマを初めてインストールした際にブランチが保存されないようです。(確認のために再度チェックする必要があります)

ありがとうございます。

すでに機能しています。Git リポジトリ経由でテーマをインストールすれば、ワンクリックで最新コミットにテーマを更新できます。

それは承知していますが、私たちが目指す方法ではありません。

Discourse の管理画面に手を入れずに、動的なプロセスを実現したいと考えています。そこで、以下の themes コマンドを活用できないか考えています。

docker exec -it app rails themes:install -- # theme data

このコマンドがファイルを参照できるかどうかは不明です。例えば、インストール情報を記述した theme.yaml などのファイルがあれば、それを共有フォルダに配置し、docker コマンドがそこから読み取ってテーマをインストールまたは更新できるようにしたいと考えています。

@markvanlan が最近、あなたにとって役立つかもしれない作業を行いました

ここには、コメントに使用情報があります:

@david ありがとうございます。ただし、ファイルのパスを引数として指定できるかどうかは明確ではありません。これは機能するでしょうか?

bin/rake themes:install -- theme.yaml 

試してみてもよいかもしれません。

STDIN にパイプする必要があると思います。例えば、

cat theme_config.yml | bin/rake themes:install

ただし、これはまだテストしていません。動作するか確認してくださいね。

あなたのアプローチは問題なく動作します。ありがとうございます!私の場合は動作しません :smiley:

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

  log, counts = ThemesInstallTask.install(theme_args)

  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

問題なく動作します :sweat_smile:

このファイルの spec を実行するにはどうすればよいですか?

以下のように実行できるはずです:

bin/rake themes:install theme.yml

JSON の受け渡しにも対応させましたが、このコードは当初、引数として YAML ファイルを受け取るように設計されていました。

無効な JSON 入力であるとエラーが表示されます

Invalid JSON input.
theme.yml

私の theme.yml

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

それは機能するはずです!なぜもう機能しなくなったのか確認します。

はい、正しい形式は bin/rake themes:install < theme.yml です。コード内でこれをより詳しくドキュメント化します :slight_smile:

いいね!ありがとう!少しは力になれてよかった :sweat_smile: