#!/usr/bin/env ruby
require "rspecq"

config = RSpecQ::Configuration.new(ARGV)

# Log the Redis connection resilience settings so they can be
# verified from the build console
redis_conn = config.redis_opts
puts "[rspecq] redis connection: " \
     "connect_timeout=#{redis_conn[:connect_timeout]} " \
     "read_timeout=#{redis_conn[:read_timeout]} " \
     "write_timeout=#{redis_conn[:write_timeout]} " \
     "reconnect_attempts=#{redis_conn[:reconnect_attempts].inspect}"

Sentry.init if ENV["SENTRY_DSN"]

if config.report?
  reporter = RSpecQ::Reporter.new(
    build_id: config.build,
    timeout: config.report_timeout,
    redis_opts: config.redis_opts,
    queue_wait_timeout: config.queue_wait_timeout,
    worker_liveness_sec: config.worker_liveness_sec,
    update_timings: config.timings,
    timings_key: config.timings_key
  )

  reporter.report
else
  worker = RSpecQ::Worker.new(
    build_id: config.build,
    worker_id: config.worker,
    redis_opts: config.redis_opts,
    worker_liveness_sec: config.worker_liveness_sec
  )

  worker.files_or_dirs_to_run = config.files_or_dirs_to_run if config.files_or_dirs_to_run
  worker.rspec_args = config.rspec_args
  worker.file_split_threshold = config.file_split_threshold
  worker.chunk_target_duration = config.chunk_target_duration
  worker.max_requeues = config.max_requeues
  worker.queue_wait_timeout = config.queue_wait_timeout
  worker.fail_fast = config.fail_fast
  worker.junit_output = config.junit_output
  worker.seed = Integer(config.seed, 10) if config.seed
  worker.reproduction = config.reproduction
  worker.tags = config.tags
  worker.work
end
