140 lines
3.4 KiB
Python
Executable file
140 lines
3.4 KiB
Python
Executable file
#!/usr/bin/python
|
|
import os
|
|
import sys
|
|
import time
|
|
import datetime
|
|
import ccdash
|
|
|
|
INTERVAL = 300
|
|
DELAY = 0
|
|
ONCE = False
|
|
SUFFIX = ""
|
|
FORCE = False
|
|
|
|
def run_scenarios(scenarios, group):
|
|
# Run each scenario
|
|
rc = 0
|
|
for scenario in scenarios:
|
|
argv = []
|
|
argv.append("ccdash.py")
|
|
argv.append("scenario")
|
|
argv.append(scenario)
|
|
argv.append("--group")
|
|
argv.append(group)
|
|
thisrc = ccdash.main(argv)
|
|
if rc==0 and thisrc:
|
|
rc = thisrc
|
|
return rc
|
|
|
|
|
|
def usage():
|
|
print """Periodically monitor working directory for Continuous and Nightly builds
|
|
|
|
Usage:
|
|
run_continuous.py [options] scenario1.xml [scenario2.xml ...]
|
|
|
|
options:
|
|
These are options which will be processed by run_continuous.py:
|
|
|
|
--delay MIN Delay both Continuous and Nightly builds by MIN minutes.
|
|
This is useful to coordinate the build with other build
|
|
machines. By default, Continuous build will be done right
|
|
after changes are detected, and Nightly build will be done
|
|
at 00:00 GMT. MIN is a float number.
|
|
|
|
--once Just run one loop to see if anything needs to be done and
|
|
if so just do it once. Quit after that.
|
|
|
|
--suffix SFX Set group suffix to SFX. For example, if SFX is "-2.x", then
|
|
tests will be submitted to "Nightly-2.x", "Continuous-2.x",
|
|
and "Experimental-2.x"
|
|
|
|
--force Force running the test even when nothing has changed.
|
|
"""
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
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":
|
|
usage()
|
|
|
|
# Splice list
|
|
scenarios = []
|
|
i = 1
|
|
while i < len(sys.argv):
|
|
if sys.argv[i]=="--delay":
|
|
i = i + 1
|
|
if i >= len(sys.argv):
|
|
print "Error: missing argument"
|
|
sys.exit(1)
|
|
DELAY = float(sys.argv[i]) * 60
|
|
print "Delay is set to %f minute(s)" % (DELAY / 60)
|
|
elif sys.argv[i]=="--suffix":
|
|
i = i + 1
|
|
if i >= len(sys.argv):
|
|
print "Error: missing argument"
|
|
sys.exit(1)
|
|
SUFFIX = sys.argv[i]
|
|
print "Suffix is set to %s" % (SUFFIX)
|
|
elif sys.argv[i]=="--once":
|
|
ONCE = True
|
|
elif sys.argv[i]=="--force":
|
|
FORCE = True
|
|
else:
|
|
# Check if scenario exists
|
|
scenario = sys.argv[i]
|
|
if not os.path.exists(scenario):
|
|
print "Error: file " + scenario + " does not exist"
|
|
sys.exit(1)
|
|
scenarios.append(scenario)
|
|
print "Scenario %s added" % (scenario)
|
|
i = i + 1
|
|
|
|
if len(scenarios) < 1:
|
|
print "Error: scenario is required"
|
|
sys.exit(1)
|
|
|
|
# Current date
|
|
utc = time.gmtime(None)
|
|
day = utc.tm_mday
|
|
|
|
# Loop foreva
|
|
while True:
|
|
argv = []
|
|
|
|
# Anything changed recently?
|
|
argv.append("ccdash.py")
|
|
argv.append("status")
|
|
argv.append("-w")
|
|
argv.append("../..")
|
|
rc = ccdash.main(argv)
|
|
|
|
utc = time.gmtime(None)
|
|
|
|
if utc.tm_mday != day or rc != 0 or FORCE:
|
|
group = ""
|
|
if utc.tm_mday != day:
|
|
day = utc.tm_mday
|
|
group = "Nightly" + SUFFIX
|
|
elif rc != 0:
|
|
group = "Continuous" + SUFFIX
|
|
else:
|
|
group = "Experimental" + SUFFIX
|
|
if DELAY > 0:
|
|
print "Will run %s after %f s.." % (group, DELAY)
|
|
time.sleep(DELAY)
|
|
rc = run_scenarios(scenarios, group)
|
|
msg = str(datetime.datetime.now()) + \
|
|
": done running " + group + \
|
|
"tests, will check again in " + str(INTERVAL) + "s.."
|
|
if ONCE:
|
|
sys.exit(0)
|
|
else:
|
|
# Nothing changed
|
|
msg = str(datetime.datetime.now()) + \
|
|
": No update, will check again in " + str(INTERVAL) + "s.."
|
|
if ONCE:
|
|
sys.exit(1)
|
|
|
|
print msg
|
|
time.sleep(INTERVAL)
|
|
|