#!/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)