discourse/bin/ember-cli
Jarek Radosz 16f22e3c36
DEV: Add --forward-host option to bin/ember-cli (#17244)
This allows to e.g. test multisite setup in a local dev environment. Also fixes some minor proxy issues.
2022-06-28 21:20:14 +02:00

85 lines
2.1 KiB
Ruby
Executable File

#!/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")
CUSTOM_ARGS = ["--try", "--test", "--unicorn", "-u", "--forward-host"]
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 - CUSTOM_ARGS)
if !args.include?("test") && !args.include?("--proxy")
args << "--proxy"
args << PROXY
end
exit 1 if !system "yarn -s install --cwd #{YARN_DIR}"
yarn_env = {}
if ARGV.include?("--forward-host")
yarn_env["FORWARD_HOST"] = "true"
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_env, "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_env, "yarn", *args.to_a.flatten)
end