#!/usr/bin/python2
#
# Copyright 2010 Google Inc. All Rights Reserved.

import optparse
import pickle
import sys
import xmlrpclib

from automation.clients.helper import chromeos
from automation.common import job_group


def Main(argv):
  parser = optparse.OptionParser()
  parser.add_option('-c',
                    '--chromeos_version',
                    dest='chromeos_version',
                    default='quarterly',
                    help='ChromeOS version to use.')
  parser.add_option('-t',
                    '--toolchain',
                    dest='toolchain',
                    default='latest-toolchain',
                    help='Toolchain to use {latest-toolchain,gcc_46}.')
  parser.add_option('-b',
                    '--board',
                    dest='board',
                    default='x86-generic',
                    help='Board to use for the nightly job.')
  options = parser.parse_args(argv)[0]

  toolchain = options.toolchain
  board = options.board
  chromeos_version = options.chromeos_version

  # Build toolchain
  jobs_factory = chromeos.JobsFactory(chromeos_version=chromeos_version,
                                      board=board,
                                      toolchain=toolchain)
  benchmark_job = jobs_factory.BuildAndBenchmark()

  group_label = 'nightly_client_%s' % board
  group = job_group.JobGroup(group_label, [benchmark_job], True, False)

  server = xmlrpclib.Server('http://localhost:8000')
  server.ExecuteJobGroup(pickle.dumps(group))


if __name__ == '__main__':
  Main(sys.argv)
