mirror of
https://github.com/discourse/discourse.git
synced 2024-12-13 11:03:43 +08:00
88 lines
2.2 KiB
Ruby
Executable File
88 lines
2.2 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")
|
|
|
|
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
|