diff options
Diffstat (limited to 'tests/automated/run_continuous.py')
-rwxr-xr-x | tests/automated/run_continuous.py | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/tests/automated/run_continuous.py b/tests/automated/run_continuous.py new file mode 100755 index 0000000..07e45ab --- /dev/null +++ b/tests/automated/run_continuous.py @@ -0,0 +1,140 @@ +#!/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) + |