def runTests(options, env, gitrev, log, debugSuffix=""): if not options.tests: return prefix = env["FILEPREFIX"] + debugSuffix env["SUMO_BATCH_RESULT"] = os.path.join( options.rootDir, prefix + "batch_result") env["SUMO_REPORT"] = os.path.join(options.remoteDir, prefix + "report") env["TEXTTEST_TMP"] = os.path.join( options.rootDir, prefix + "texttesttmp") env["TEXTTEST_HOME"] = os.path.join(options.rootDir, options.testsDir) shutil.rmtree(env["TEXTTEST_TMP"], True) if not os.path.exists(env["SUMO_REPORT"]): os.makedirs(env["SUMO_REPORT"]) status.killall(debugSuffix, BINARIES) for name in BINARIES: binary = os.path.join(options.rootDir, options.binDir, name + debugSuffix + ".exe") if name == "sumo-gui": if os.path.exists(binary): env["GUISIM_BINARY"] = binary elif os.path.exists(binary): env[name.upper() + "_BINARY"] = binary # provide more information than just the date: fullOpt = ["-b", prefix, "-name", "%sr%s" % (datetime.date.today().strftime("%d%b%y"), gitrev)] ttBin = "texttest" if options.suffix == "extra": runExtraTests.run(debugSuffix, fullOpt, log, True, True, debugSuffix == "") else: subprocess.call([ttBin] + fullOpt, env=env, stdout=log, stderr=subprocess.STDOUT, shell=True) subprocess.call([ttBin, "-a", "sumo.gui"] + fullOpt, env=env, stdout=log, stderr=subprocess.STDOUT, shell=True) subprocess.call([ttBin, "-b", env["FILEPREFIX"], "-coll"], env=env, stdout=log, stderr=subprocess.STDOUT, shell=True) status.killall(debugSuffix, BINARIES)
def runTests(options, env, gitrev, debugSuffix=""): prefix = env["FILEPREFIX"] + debugSuffix env["SUMO_BATCH_RESULT"] = os.path.join(options.rootDir, prefix + "batch_result") env["SUMO_REPORT"] = os.path.join(options.remoteDir, prefix + "report") env["TEXTTEST_TMP"] = os.path.join(options.rootDir, prefix + "texttesttmp") env["TEXTTEST_HOME"] = os.path.join(options.rootDir, options.testsDir) if not os.path.exists(env["SUMO_REPORT"]): os.makedirs(env["SUMO_REPORT"]) status.killall(debugSuffix, BINARIES) for name in BINARIES: binary = os.path.join(options.rootDir, options.binDir, name + debugSuffix + ".exe") if os.path.exists(binary): env[name.upper() + "_BINARY"] = binary ttBin = "texttest" today = datetime.date.today() tasks = sorted( glob.glob( os.path.join(env["TEXTTEST_HOME"], "netedit", "testsuite.netedit.daily.*"))) taskID = os.path.basename(tasks[today.toordinal() % len(tasks)])[10:] cmd = [ ttBin, "-b", prefix, "-a", taskID, "-name", "%sr%s" % (today.strftime("%d%b%y"), gitrev) ] for call in (cmd, [ttBin, "-b", env["FILEPREFIX"], "-coll"]): status.log_subprocess(call, env) status.killall((debugSuffix, ), BINARIES)
def main(options, platform="x64"): env["FILEPREFIX"] = options.msvc_version + options.suffix + platform prefix = os.path.join(options.remoteDir, env["FILEPREFIX"]) makeLog = prefix + "Release.log" makeAllLog = prefix + "Debug.log" testLog = prefix + "Test.log" testDebugLog = prefix + "DebugTest.log" statusLog = prefix + "status.log" log_handler = status.set_rotating_log(makeLog) status.killall(("", "D"), BINARIES) toClean = [] for ext in ("*.exe", "*.ilk", "*.pdb", "*.py", "*.pyd", "*.dll", "*.lib", "*.exp", "*.jar", "*.manifest", "*.fmu"): toClean += glob.glob(os.path.join(SUMO_HOME, "bin", ext)) toClean += glob.glob(os.path.join(SUMO_HOME, "tools", "lib*", "*lib*")) toClean += glob.glob(os.path.join(SUMO_HOME, "share", "*", "*")) for f in toClean: try: os.remove(f) except Exception: pass for d in (glob.glob(os.path.join(SUMO_HOME, "bin", "osgPlugins*")) + glob.glob(os.path.join(SUMO_HOME, "tools", "*.egg-info"))): shutil.rmtree(d, ignore_errors=True) for d in glob.glob(os.path.join(SUMO_HOME, "docs", "*")): if os.path.basename(d) in ('examples', 'javadoc', 'man', 'pydoc', 'tutorial', 'userdoc'): shutil.rmtree(d, ignore_errors=True) status.printLog("Running %s build using python %s." % (options.msvc_version, sys.version)) gitrev = repositoryUpdate(options) generator = "Visual Studio " + ("12 2013" if options.msvc_version == "msvc12" else "16 2019") buildDir = generateCMake(generator, platform, options.suffix == "extra", options.python) ret = status.log_subprocess(["cmake", "--build", ".", "--config", "Release"], cwd=buildDir) status.log_subprocess(["cmake", "--build", ".", "--config", "Release", "--target", "lisum"], cwd=buildDir) status.log_subprocess(["cmake", "--build", ".", "--config", "Release", "--target", "userdoc", "examples"], cwd=buildDir) status.log_subprocess(["cmake", "--install", "."], cwd=buildDir) plat = platform.lower().replace("x", "win") if options.msvc_version != "msvc16": plat += options.msvc_version for d in glob.glob(os.path.join(buildDir, "sumo-*")): if os.path.isdir(d): installDir = d installBase = os.path.basename(installDir) binaryZip = os.path.join(buildDir, "sumo-%s%s-%s" % (plat, options.suffix, installBase[5:])) if ret == 0: try: for f in (glob.glob(os.path.join(SUMO_HOME, "*.md")) + [os.path.join(SUMO_HOME, n) for n in ("AUTHORS", "ChangeLog", "LICENSE")]): shutil.copy(f, installDir) if options.suffix == "extra": shutil.copy(os.path.join(SUMO_HOME, "build", "wix", "gpl-2.0.txt"), os.path.join(installDir, "LICENSE")) for f in glob.glob(os.path.join(SUMO_HOME, "bin", "*.jar")): shutil.copy(f, os.path.join(installDir, "bin")) shutil.copytree(os.path.join(SUMO_HOME, "docs"), os.path.join(installDir, "docs"), ignore=shutil.ignore_patterns('web')) shutil.copy(os.path.join(buildDir, "src", "version.h"), os.path.join(installDir, "include")) status.printLog("Creating sumo.zip.") shutil.make_archive(binaryZip, 'zip', buildDir, installBase) shutil.copy(binaryZip + ".zip", options.remoteDir) status.printLog("Creating sumo.msi.") if options.suffix == "extra": wix.buildMSI(binaryZip + ".zip", binaryZip + ".msi", license=os.path.join(SUMO_HOME, "build", "wix", "gpl-2.0.rtf")) else: wix.buildMSI(binaryZip + ".zip", binaryZip + ".msi") shutil.copy(binaryZip + ".msi", options.remoteDir) except Exception as ziperr: status.printLog("Warning: Could not zip to %s.zip (%s)!" % (binaryZip, ziperr)) gameZip = os.path.join(buildDir, "sumo-game-%s%s-%s.zip" % (plat, options.suffix, installBase[5:])) status.printLog("Creating sumo-game.zip.") try: status.log_subprocess(["cmake", "--build", ".", "--target", "game"], cwd=buildDir) shutil.move(os.path.join(buildDir, "sumo-game.zip"), gameZip) shutil.copy(gameZip, options.remoteDir) except Exception as e: status.printLog("Warning: Could not create nightly sumo-game.zip! (%s)" % e) debug_handler = status.set_rotating_log(makeAllLog, log_handler) ret = status.log_subprocess(["cmake", "--build", ".", "--config", "Debug"], cwd=buildDir) if ret == 0: debugZip = os.path.join(buildDir, "sumo-%s%sDebug-%s.zip" % (plat, options.suffix, installBase[5:])) status.printLog("Creating sumoDebug.zip.") try: with zipfile.ZipFile(debugZip, 'w', zipfile.ZIP_DEFLATED) as zipf: for ext in ("*D.exe", "*.dll", "*D.pdb"): for f in glob.glob(os.path.join(SUMO_HOME, "bin", ext)): zipf.write(f, os.path.join(installBase, "bin", os.path.basename(f))) shutil.copy(debugZip, options.remoteDir) except IOError as ziperr: status.printLog("Warning: Could not zip to %s (%s)!" % (debugZip, ziperr)) log_handler = status.set_rotating_log(testLog, debug_handler) status.printLog("Running tests.") runTests(options, env, gitrev) with open(statusLog, 'w') as log: status.printStatus(makeLog, makeAllLog, env["SMTP_SERVER"], log, testLog=testLog) if not options.x64only: debug_handler = status.set_rotating_log(testDebugLog, log_handler) status.printLog("Running debug tests.") runTests(options, env, gitrev, "D") with open(prefix + "Dstatus.log", 'w') as log: status.printStatus(makeAllLog, testDebugLog, env["SMTP_SERVER"], log, testLog=testDebugLog)
maxTime = 0 sumoAllZip = None for fname in glob.glob(os.path.join(options.remoteDir, "sumo-all-*.zip")): if os.path.getmtime(fname) > maxTime: maxTime = os.path.getmtime(fname) sumoAllZip = fname for platform in ["x64"]: env["FILEPREFIX"] = options.msvc_version + options.suffix + platform prefix = os.path.join(options.remoteDir, env["FILEPREFIX"]) makeLog = prefix + "Release.log" makeAllLog = prefix + "Debug.log" statusLog = prefix + "status.log" binDir = "sumo-git/bin/" status.killall(("", "D"), BINARIES) toClean = [makeLog, makeAllLog] toolsDir = os.path.join(options.rootDir, options.binDir.replace("bin", "tools")) shareDir = os.path.join(options.rootDir, options.binDir.replace("bin", "share")) for ext in ("*.exe", "*.ilk", "*.pdb", "*.py", "*.pyd", "*.dll", "*.lib", "*.exp", "*.jar", "*.manifest"): toClean += glob.glob(os.path.join(options.rootDir, options.binDir, ext)) toClean += glob.glob(os.path.join(toolsDir, "lib*", "*lib*")) toClean += glob.glob(os.path.join(shareDir, "*", "*")) for f in toClean: try: os.remove(f) except Exception: