#!/usr/bin/env ruby # frozen_string_literal: true require 'pathname' RAILS_ROOT = File.expand_path("../../", Pathname.new(__FILE__).realpath) PORT = ENV["UNICORN_PORT"] ||= "3000" HOSTNAME = ENV["DISCOURSE_HOSTNAME"] ||= "127.0.0.1" yarn_dir = File.join(RAILS_ROOT, "app/assets/javascripts/discourse") PROXY = if ARGV.include?("--try") "https://try.discourse.org" else "http://#{HOSTNAME}:#{PORT}" end command = if ARGV.include?("--test") "test" else "server" end class String def cyan "\e[36m#{self}\e[0m" end def red "\033[31m#{self}\e[0m" end end if ARGV.include?("-h") || ARGV.include?("--help") puts "ember-cli OPTIONS" puts "#{"--try".cyan} To proxy try.discourse.org" puts "#{"--test".cyan} To run the test suite" puts "#{"--unicorn, -u".cyan} To run a unicorn server as well" puts "The rest of the arguments are passed to ember server per:", "" exec "yarn -s --cwd #{yarn_dir} run ember #{command} --help" end args = ["-s", "--cwd", yarn_dir, "run", "ember", command] + ARGV.reject do |a| ["--try", "--test", "--unicorn", "-u"].include?(a) end if !args.include?("test") && !args.include?("--proxy") args << "--proxy" args << PROXY end exit 1 if !system "yarn -s install --cwd #{yarn_dir}" if !system("node -p 'require(\"crypto\").createHash(\"md4\")'", out: "/dev/null", err: "/dev/null") $stderr << "#{"ERROR".red}: Node 17 with OpenSSL 3 is currently unsupported\n" $stderr << "Please use node LTS (16.x) instead\n" exit 1 end if ARGV.include?("-u") || ARGV.include?("--unicorn") unicorn_env = { "DISCOURSE_PORT" => ENV["DISCOURSE_PORT"] || "4200" } unicorn_pid = spawn(unicorn_env, __dir__ + "/unicorn") Thread.new do require 'open3' Open3.popen2e("yarn", *args.to_a.flatten) do |i, oe, t| puts "Ember CLI running on PID: #{t.pid}" oe.each do |line| if line.include?("\e[32m200\e") || line.include?("\e[36m304\e[0m") || line.include?("POST /message-bus") # skip 200s and 304s and message bus else puts line end end end end trap("SIGINT") do # we got to swallow sigint to give time for # children to handle it end Process.wait(unicorn_pid) else exec "yarn", *args.to_a.flatten end