summaryrefslogtreecommitdiff
path: root/tests/automated/run_continuous.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/automated/run_continuous.py')
-rwxr-xr-xtests/automated/run_continuous.py140
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)
+