forked from midou/invidious
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Crystal
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Crystal
		
	
	
	
	
	
require "option_parser"
 | 
						|
require "yaml"
 | 
						|
require "./sentry"
 | 
						|
 | 
						|
process_name = nil
 | 
						|
 | 
						|
begin
 | 
						|
  shard_yml = YAML.parse File.read("shard.yml")
 | 
						|
  name = shard_yml["name"]?
 | 
						|
  process_name = name.as_s if name
 | 
						|
rescue e
 | 
						|
end
 | 
						|
 | 
						|
build_args = [] of String
 | 
						|
build_command = "crystal build ./src/#{process_name}.cr"
 | 
						|
run_args = [] of String
 | 
						|
run_command = "./#{process_name}"
 | 
						|
files = ["./src/**/*.cr", "./src/**/*.ecr"]
 | 
						|
files_cleared = false
 | 
						|
show_help = false
 | 
						|
should_build = true
 | 
						|
 | 
						|
OptionParser.parse! do |parser|
 | 
						|
  parser.banner = "Usage: ./sentry [options]"
 | 
						|
  parser.on(
 | 
						|
    "-n NAME",
 | 
						|
    "--name=NAME",
 | 
						|
    "Sets the name of the app process (current name: #{process_name})") { |name| process_name = name }
 | 
						|
  parser.on(
 | 
						|
    "-b COMMAND",
 | 
						|
    "--build=COMMAND",
 | 
						|
    "Overrides the default build command") { |command| build_command = command }
 | 
						|
  parser.on(
 | 
						|
    "--build-args=ARGS",
 | 
						|
    "Specifies arguments for the build command") do |args|
 | 
						|
    args_arr = args.strip.split(" ")
 | 
						|
    build_args = args_arr if args_arr.size > 0
 | 
						|
  end
 | 
						|
  parser.on(
 | 
						|
    "--no-build",
 | 
						|
    "Skips the build step") { should_build = false }
 | 
						|
  parser.on(
 | 
						|
    "-r COMMAND",
 | 
						|
    "--run=COMMAND",
 | 
						|
    "Overrides the default run command") { |command| run_command = command }
 | 
						|
  parser.on(
 | 
						|
    "--run-args=ARGS",
 | 
						|
    "Specifies arguments for the run command") do |args|
 | 
						|
    args_arr = args.strip.split(" ")
 | 
						|
    run_args = args_arr if args_arr.size > 0
 | 
						|
  end
 | 
						|
  parser.on(
 | 
						|
    "-w FILE",
 | 
						|
    "--watch=FILE",
 | 
						|
    "Overrides default files and appends to list of watched files") do |file|
 | 
						|
    unless files_cleared
 | 
						|
      files.clear
 | 
						|
      files_cleared = true
 | 
						|
    end
 | 
						|
    files << file
 | 
						|
  end
 | 
						|
  parser.on(
 | 
						|
    "-i",
 | 
						|
    "--info",
 | 
						|
    "Shows the values for build/run commands, build/run args, and watched files") do
 | 
						|
    puts "
 | 
						|
      name:       #{process_name}
 | 
						|
      build:      #{build_command}
 | 
						|
      build args: #{build_args}
 | 
						|
      run:        #{run_command}
 | 
						|
      run args:   #{run_args}
 | 
						|
      files:      #{files}
 | 
						|
    "
 | 
						|
  end
 | 
						|
  parser.on(
 | 
						|
    "-h",
 | 
						|
    "--help",
 | 
						|
    "Show this help") do
 | 
						|
    puts parser
 | 
						|
    exit 0
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
if process_name
 | 
						|
  process_runner = Sentry::ProcessRunner.new(
 | 
						|
    process_name: process_name.as(String),
 | 
						|
    build_command: build_command,
 | 
						|
    run_command: run_command,
 | 
						|
    build_args: build_args,
 | 
						|
    run_args: run_args,
 | 
						|
    should_build: should_build,
 | 
						|
    files: files
 | 
						|
  )
 | 
						|
 | 
						|
  process_runner.run
 | 
						|
else
 | 
						|
  puts "🤖  Sentry error: 'name' not given and not found in shard.yml"
 | 
						|
  exit 1
 | 
						|
end
 |