else:
logging.getLogger("paramiko").setLevel(logging.WARN)
- sshinfo = vmtools.get_clean_builder('builder')
+ sshinfo = vmtools.get_clean_builder('builder', options.reset_server)
try:
if not buildserverid:
ftp.chmod('config.py', 0o600)
# Copy over the ID (head commit hash) of the fdroidserver in use...
- subprocess.call('git rev-parse HEAD >' +
- os.path.join(os.getcwd(), 'tmp', 'fdroidserverid'),
- shell=True, cwd=serverpath)
+ with open(os.path.join(os.getcwd(), 'tmp', 'fdroidserverid'), 'wb') as fp:
+ fp.write(subprocess.check_output(['git', 'rev-parse', 'HEAD'],
+ cwd=serverpath))
ftp.put('tmp/fdroidserverid', 'fdroidserverid')
# Copy the metadata - just the file for this app...
return True
-def force_halt_build():
+def force_halt_build(timeout):
"""Halt the currently running Vagrant VM, to be called from a Timer"""
- logging.error(_('Force halting build after timeout!'))
+ logging.error(_('Force halting build after {0} sec timeout!').format(timeout))
timeout_event.set()
vm = vmtools.get_build_vm('builder')
vm.halt()
help=_("Test mode - put output in the tmp directory only, and always build, even if the output already exists."))
parser.add_argument("--server", action="store_true", default=False,
help=_("Use build server"))
- parser.add_argument("--resetserver", action="store_true", default=False,
+ parser.add_argument("--reset-server", action="store_true", default=False,
help=_("Reset and create a brand new build server, even if the existing one appears to be ok."))
parser.add_argument("--on-server", dest="onserver", action="store_true", default=False,
help=_("Specify that we're running on the build server"))
if config['build_server_always']:
options.server = True
- if options.resetserver and not options.server:
- parser.error("option %s: Using --resetserver without --server makes no sense" % "resetserver")
+ if options.reset_server and not options.server:
+ parser.error("option %s: Using --reset-server without --server makes no sense" % "reset-server")
log_dir = 'logs'
if not os.path.isdir(log_dir):
if time.time() > endtime:
max_build_time_reached = True
break
- if options.server: # enable watchdog timer
- timer = threading.Timer(7200, force_halt_build)
+
+ # Enable watchdog timer (2 hours by default).
+ if build.timeout is None:
+ timeout = 7200
+ else:
+ timeout = int(build.timeout)
+ if options.server and timeout > 0:
+ logging.debug(_('Setting {0} sec timeout for this build').format(timeout))
+ timer = threading.Timer(timeout, force_halt_build, [timeout])
+ timeout_event.clear()
timer.start()
else:
timer = None
for app in build_succeeded:
logging.info("Need to sign the app before we can install it.")
- subprocess.call("fdroid publish {0}".format(app.id), shell=True)
+ subprocess.call("fdroid publish {0}".format(app.id))
apk_path = None