#!/usr/bin/expect
#
# $Id: autoBuild.sh 421 2007-04-05 15:46:55Z dhill $
#
# Remote command execution script to another server
# Argument 1 - OS type: RHEL5 , RHEL5-1 or FC6 (default to RHEL5)
# Argument 2 - release (optional) 
# Argument 3 - SVN branch or trunk
set USERNAME root
set PASSWORD Calpont1
set OS RHEL5
set RELEASE Latest
set SVN genii
set VERSION EE
log_user 0

spawn -noecho /bin/bash

for {set i 0} {$i<[llength $argv]} {incr i} {
	set arg($i) [lindex $argv $i]
}

set i 0
while true {
	if { $i == [llength $argv] } { break }
	if { $arg($i) == "-h" } {
		send_user "\n"
		send_user "'autoBuilder' generates a RHEL5 or FC6 rpm based on the Latest\n"
		send_user "files checked into svn genii branch. The build takes 20 to 30 minutes.\n"
		send_user "It will place the rpm in //calweb/shared/Iterations/Latest/\n"
		send_user "and in //calweb/shared/Iterations/'release'/ when specified\n"
		send_user "\n"
		send_user "Usage: autoBuild -o 'OS' -r 'release' -s 'svn-branch'\n"
		send_user "			OS - RHEL5 (srvperf1 4.x build) or RHEL5-1 (srvnightly 4.x build)\n"
		send_user "			release - Calpont release number (defaults to Latest)\n"
		send_user "			svn-branch - SVN Branch name (defaults to genii)\n"
		exit
	}
	if { $arg($i) == "-o" } {
		incr i
		set OS $arg($i)
	} else {
		if { $arg($i) == "-r" } {
			incr i
			set RELEASE $arg($i)
		} else {
			if { $arg($i) == "-s" } {
				incr i
				set SVN $arg($i)
			}
		}
	}
	incr i
}

if { $OS == "RHEL5-1" } {
	set SERVER srvnightly
	set COMMAND "'/root/calpont-build $RELEASE $SVN'"
} else {
	set SERVER srvperf1
	set COMMAND "'/root/infinidb-build $RELEASE $SVN'"
}

 
set timeout 4000
# 
# send command to build calpont rpms
#
#get current date
exec date >/tmp/datesync.tmp
exec cat /tmp/datesync.tmp
set newtime [exec cat /tmp/datesync.tmp]

send_user "\nStart Time:  $newtime\n"

log_user 1
send_user "\nRPM Package Build takes 60 minutes to complete, please wait...\n"
log_user 0

send "ssh $USERNAME@$SERVER $COMMAND\n"
expect {
	-re "authenticity" { send "yes\n" 
						expect {
							-re "word: " { send "$PASSWORD\n" } abort
							}
						}
	-re "service not known" { send_user "FAILED: Invalid Host\n" ; exit -1 }
	-re "word: " { send "$PASSWORD\n" } abort
    -re "TIMEOUT"  { send_user "Calpont RPM Build Failed, timeout\n" ; exit -1 }
    timeout  { send_user "Calpont RPM Build Failed, timeout\n" ; exit -1 }
    -re "no rpm" { send_user "Calpont RPM Build Failed, check build log files\n" ; exit -1 }
    -re "Build Successfully Completed" { log_user 1
                                            #get current date
                                            exec date >/tmp/datesync.tmp
                                            exec cat /tmp/datesync.tmp
                                            set newtime [exec cat /tmp/datesync.tmp]

                                            file delete -force $RELEASE
                                            send_user "\nCalpont RPM Build successfully completed    $newtime\n"; exit 0
                                        }  
}

expect {
	-re "TIMEOUT"  { send_user "Calpont RPM Build Failed, timeout\n" ; exit -1 }
	timeout  { send_user "Calpont RPM Build Failed, timeout\n" ; exit -1 }
	-re "no rpm" { send_user "Calpont RPM Build Failed, check build log files\n" ; exit -1 }
	-re "Build Successfully Completed" { } abort
}

log_user 1

#get current date
exec date >/tmp/datesync.tmp
exec cat /tmp/datesync.tmp
set newtime [exec cat /tmp/datesync.tmp]

file delete -force $RELEASE
send_user "\nCalpont RPM Build successfully completed    $newtime\n"
exit 0
