blob: c26d8687b95bd1b46c84884d2d1a4251fe6dea19 [file] [log] [blame]
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +00001#!/usr/bin/python
2import os
3import sys
4import time
Benny Prijono4adead22010-08-16 12:33:52 +00005import datetime
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +00006import ccdash
7
Benny Prijonoa72cdca2010-08-17 14:53:09 +00008INTERVAL = 300
Benny Prijonoa10b3dd2010-08-23 09:16:03 +00009DELAY = 0
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000010
Benny Prijono6efbf412010-08-25 12:57:53 +000011def run_scenarios(scenarios, group):
12 # Run each scenario
13 rc = 0
14 for scenario in scenarios:
15 argv = []
16 argv.append("ccdash.py")
17 argv.append("scenario")
18 argv.append(scenario)
19 argv.append("--group")
20 argv.append(group)
21 thisrc = ccdash.main(argv)
22 if rc==0 and thisrc:
23 rc = thisrc
24 return rc
Benny Prijono20c26f02010-08-18 03:18:24 +000025
26
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000027def usage():
28 print """Periodically monitor working directory for Continuous and Nightly builds
29
30Usage:
Benny Prijono6efbf412010-08-25 12:57:53 +000031 run_continuous.py [options] scenario1.xml [scenario2.xml ...]
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000032
33options:
34 These are options which will be processed by run_continuous.py:
35
36 --delay MIN Delay both Continuous and Nightly builds by MIN minutes.
37 This is useful to coordinate the build with other build
38 machines. By default, Continuous build will be done right
39 after changes are detected, and Nightly build will be done
40 at 00:00 GMT. MIN is a float number.
41
42"""
43 sys.exit(1)
44
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000045if __name__ == "__main__":
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000046 if len(sys.argv)<=1 or sys.argv[1]=="-h" or sys.argv[1]=="--h" or sys.argv[1]=="--help" or sys.argv[1]=="/h":
47 usage()
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000048
Benny Prijono6efbf412010-08-25 12:57:53 +000049 # Splice list
50 scenarios = []
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000051 i = 1
52 while i < len(sys.argv):
53 if sys.argv[i]=="--delay":
54 i = i + 1
55 if i >= len(sys.argv):
56 print "Error: missing argument"
57 sys.exit(1)
58 DELAY = float(sys.argv[i]) * 60
59 print "Delay is set to %f minute(s)" % (DELAY / 60)
60 else:
Benny Prijono6efbf412010-08-25 12:57:53 +000061 # Check if scenario exists
62 scenario = sys.argv[i]
63 if not os.path.exists(scenario):
64 print "Error: file " + scenario + " does not exist"
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000065 sys.exit(1)
Benny Prijono6efbf412010-08-25 12:57:53 +000066 scenarios.append(scenario)
67 print "Scenario %s added" % (scenario)
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000068 i = i + 1
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000069
Benny Prijono6efbf412010-08-25 12:57:53 +000070 if len(scenarios) < 1:
71 print "Error: scenario is required"
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000072 sys.exit(1)
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000073
Benny Prijono20c26f02010-08-18 03:18:24 +000074 # Current date
75 utc = time.gmtime(None)
76 day = utc.tm_mday
77
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000078 # Loop foreva
79 while True:
80 argv = []
81
82 # Anything changed recently?
83 argv.append("ccdash.py")
84 argv.append("status")
85 argv.append("-w")
86 argv.append("../..")
87 rc = ccdash.main(argv)
88
Benny Prijono20c26f02010-08-18 03:18:24 +000089 utc = time.gmtime(None)
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000090
Benny Prijono20c26f02010-08-18 03:18:24 +000091 if utc.tm_mday != day or rc != 0:
92 group = ""
93 if utc.tm_mday != day:
94 day = utc.tm_mday
95 group = "Nightly"
96 elif rc != 0:
97 group = "Continuous"
98 else:
99 group = "Experimental"
Benny Prijono457e18e2010-08-23 15:34:19 +0000100 print "Will run %s after %f s.." % (group, DELAY)
101 time.sleep(DELAY)
Benny Prijono6efbf412010-08-25 12:57:53 +0000102 rc = run_scenarios(scenarios, group)
Benny Prijono20c26f02010-08-18 03:18:24 +0000103 # Sleep even if something does change
104 print str(datetime.datetime.now()) + \
105 ": done running " + group + \
106 "tests, will check again in " + str(INTERVAL) + "s.."
107 time.sleep(INTERVAL)
108 else:
109 # Nothing changed
110 print str(datetime.datetime.now()) + \
111 ": No update, will check again in " + str(INTERVAL) + "s.."
112 time.sleep(INTERVAL)
113
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +0000114