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