From 86f34ee70a658d3f03cfb1046084d40c0382c348 Mon Sep 17 00:00:00 2001 From: relan Date: Sun, 28 Jan 2018 09:56:19 +0300 Subject: [PATCH] build: make per-build hard time limit customizable Add "timeout=n" metadata field that overrides build timeout (in seconds). The default is 7200, i.e. 2 hours. --- fdroidserver/build.py | 15 +++-- fdroidserver/metadata.py | 5 ++ tests/metadata/dump/com.politedroid.yaml | 4 ++ tests/metadata/dump/org.adaway.yaml | 28 ++++++++ .../dump/org.smssecure.smssecure.yaml | 8 +++ tests/metadata/dump/org.videolan.vlc.yaml | 66 +++++++++++++++++++ 6 files changed, 122 insertions(+), 4 deletions(-) diff --git a/fdroidserver/build.py b/fdroidserver/build.py index ba0b0733..116da5bb 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -913,9 +913,9 @@ def trybuild(app, build, build_dir, output_dir, log_dir, also_check_dir, 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() @@ -1093,8 +1093,15 @@ def main(): 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]) timer.start() else: timer = None diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 41319a88..1c43fbae 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -206,6 +206,7 @@ def fieldtype(name): build_flags_order = [ 'disable', 'commit', + 'timeout', 'subdir', 'submodules', 'sudo', @@ -248,6 +249,7 @@ class Build(dict): super().__init__() self.disable = False self.commit = None + self.timeout = None self.subdir = None self.submodules = False self.sudo = '' @@ -347,6 +349,7 @@ flagtypes = { 'forcevercode': TYPE_BOOL, 'novcheck': TYPE_BOOL, 'antifeatures': TYPE_LIST, + 'timeout': TYPE_INT, } @@ -1208,6 +1211,8 @@ def parse_txt_metadata(mf, app): build[pk] = pv elif t == TYPE_BOOL: build[pk] = _decode_bool(pv) + elif t == TYPE_INT: + build[pk] = int(pv) def parse_buildline(lines): v = "".join(lines) diff --git a/tests/metadata/dump/com.politedroid.yaml b/tests/metadata/dump/com.politedroid.yaml index 9a0a9d7f..698f216d 100644 --- a/tests/metadata/dump/com.politedroid.yaml +++ b/tests/metadata/dump/com.politedroid.yaml @@ -71,6 +71,7 @@ builds: submodules: false sudo: '' target: android-10 + timeout: null versionCode: '3' versionName: '1.2' - androidupdate: [] @@ -104,6 +105,7 @@ builds: submodules: false sudo: '' target: android-15 + timeout: null versionCode: '4' versionName: '1.3' - androidupdate: [] @@ -137,6 +139,7 @@ builds: submodules: false sudo: '' target: android-10 + timeout: null versionCode: '5' versionName: '1.4' - androidupdate: [] @@ -171,6 +174,7 @@ builds: submodules: false sudo: echo 'this is just a test' target: null + timeout: null versionCode: '6' versionName: '1.5' comments: {} diff --git a/tests/metadata/dump/org.adaway.yaml b/tests/metadata/dump/org.adaway.yaml index 83c84877..8a599d29 100644 --- a/tests/metadata/dump/org.adaway.yaml +++ b/tests/metadata/dump/org.adaway.yaml @@ -92,6 +92,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '13' versionName: '1.12' - androidupdate: [] @@ -127,6 +128,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '16' versionName: '1.15' - androidupdate: [] @@ -162,6 +164,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '19' versionName: '1.18' - androidupdate: [] @@ -197,6 +200,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '20' versionName: '1.19' - androidupdate: [] @@ -232,6 +236,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '21' versionName: '1.20' - androidupdate: [] @@ -267,6 +272,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '22' versionName: '1.21' - androidupdate: [] @@ -300,6 +306,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '24' versionName: '1.23' - androidupdate: [] @@ -334,6 +341,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '25' versionName: '1.24' - androidupdate: [] @@ -368,6 +376,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '26' versionName: '1.25' - androidupdate: [] @@ -402,6 +411,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '27' versionName: '1.26' - androidupdate: [] @@ -436,6 +446,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '28' versionName: '1.27' - androidupdate: [] @@ -470,6 +481,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '30' versionName: '1.29' - androidupdate: [] @@ -504,6 +516,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '33' versionName: '1.32' - androidupdate: [] @@ -537,6 +550,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '34' versionName: '1.33' - androidupdate: [] @@ -571,6 +585,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '35' versionName: '1.34' - androidupdate: [] @@ -605,6 +620,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '36' versionName: '1.35' - androidupdate: [] @@ -639,6 +655,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '37' versionName: '1.36' - androidupdate: [] @@ -673,6 +690,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '38' versionName: '1.37' - androidupdate: @@ -719,6 +737,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '40' versionName: '2.1' - androidupdate: @@ -765,6 +784,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '42' versionName: '2.3' - androidupdate: [] @@ -801,6 +821,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '45' versionName: '2.6' - androidupdate: [] @@ -837,6 +858,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '46' versionName: '2.7' - androidupdate: [] @@ -873,6 +895,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '47' versionName: '2.8' - androidupdate: [] @@ -909,6 +932,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '48' versionName: 2.8.1 - androidupdate: [] @@ -945,6 +969,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '49' versionName: '2.9' - androidupdate: [] @@ -981,6 +1006,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '50' versionName: 2.9.1 - androidupdate: [] @@ -1017,6 +1043,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '51' versionName: 2.9.2 - androidupdate: [] @@ -1053,6 +1080,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '52' versionName: '3.0' comments: diff --git a/tests/metadata/dump/org.smssecure.smssecure.yaml b/tests/metadata/dump/org.smssecure.smssecure.yaml index 99458452..8935e1c4 100644 --- a/tests/metadata/dump/org.smssecure.smssecure.yaml +++ b/tests/metadata/dump/org.smssecure.smssecure.yaml @@ -100,6 +100,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '5' versionName: 0.3.3 - androidupdate: [] @@ -137,6 +138,7 @@ builds: submodules: true sudo: '' target: null + timeout: null versionCode: '6' versionName: 0.3.3 - androidupdate: [] @@ -173,6 +175,7 @@ builds: submodules: true sudo: '' target: null + timeout: null versionCode: '9' versionName: 0.4.2 - androidupdate: [] @@ -209,6 +212,7 @@ builds: submodules: true sudo: '' target: null + timeout: null versionCode: '11' versionName: 0.5.1 - androidupdate: [] @@ -244,6 +248,7 @@ builds: submodules: true sudo: '' target: null + timeout: null versionCode: '12' versionName: 0.5.2 - androidupdate: [] @@ -279,6 +284,7 @@ builds: submodules: true sudo: '' target: null + timeout: null versionCode: '100' versionName: 0.5.3 - androidupdate: [] @@ -314,6 +320,7 @@ builds: submodules: true sudo: '' target: null + timeout: null versionCode: '101' versionName: 0.5.4 - androidupdate: [] @@ -349,6 +356,7 @@ builds: submodules: true sudo: '' target: null + timeout: null versionCode: '102' versionName: 0.6.0 comments: {} diff --git a/tests/metadata/dump/org.videolan.vlc.yaml b/tests/metadata/dump/org.videolan.vlc.yaml index d57852dd..a6d309e2 100644 --- a/tests/metadata/dump/org.videolan.vlc.yaml +++ b/tests/metadata/dump/org.videolan.vlc.yaml @@ -93,6 +93,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '110' versionName: 0.0.11-ARMv7 - androidupdate: @@ -129,6 +130,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '111' versionName: 0.0.11-ARM - androidupdate: @@ -165,6 +167,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '112' versionName: 0.0.11-x86 - androidupdate: @@ -201,6 +204,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '113' versionName: 0.0.11-mips - androidupdate: [] @@ -236,6 +240,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1301' versionName: 0.1.3-MIPS - androidupdate: [] @@ -271,6 +276,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1302' versionName: 0.1.3-x86 - androidupdate: [] @@ -306,6 +312,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1303' versionName: 0.1.3-ARM - androidupdate: [] @@ -341,6 +348,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1304' versionName: 0.1.3-ARMv7 - androidupdate: [] @@ -375,6 +383,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9002' versionName: 0.9.0 - androidupdate: [] @@ -409,6 +418,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9004' versionName: 0.9.0 - androidupdate: [] @@ -443,6 +453,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9102' versionName: 0.9.1 - androidupdate: [] @@ -477,6 +488,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9104' versionName: 0.9.1 - androidupdate: [] @@ -511,6 +523,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9502' versionName: 0.9.5 - androidupdate: [] @@ -545,6 +558,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9504' versionName: 0.9.5 - androidupdate: [] @@ -579,6 +593,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9602' versionName: 0.9.6 - androidupdate: [] @@ -613,6 +628,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9604' versionName: 0.9.6 - androidupdate: [] @@ -647,6 +663,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9702' versionName: 0.9.7 - androidupdate: [] @@ -681,6 +698,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9704' versionName: 0.9.7 - androidupdate: [] @@ -715,6 +733,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9711' versionName: 0.9.7.1 - androidupdate: [] @@ -749,6 +768,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9712' versionName: 0.9.7.1 - androidupdate: [] @@ -783,6 +803,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9714' versionName: 0.9.7.1 - androidupdate: [] @@ -817,6 +838,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9802' versionName: 0.9.8 - androidupdate: [] @@ -851,6 +873,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9803' versionName: 0.9.8 - androidupdate: [] @@ -885,6 +908,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9804' versionName: 0.9.8 - androidupdate: [] @@ -919,6 +943,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9902' versionName: 0.9.9 - androidupdate: [] @@ -953,6 +978,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9903' versionName: 0.9.9 - androidupdate: [] @@ -987,6 +1013,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '9904' versionName: 0.9.9 - androidupdate: [] @@ -1021,6 +1048,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10002' versionName: 0.9.10 - androidupdate: [] @@ -1055,6 +1083,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10003' versionName: 0.9.10 - androidupdate: [] @@ -1089,6 +1118,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10004' versionName: 0.9.10 - androidupdate: [] @@ -1123,6 +1153,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10006' versionName: 1.0.0 - androidupdate: [] @@ -1157,6 +1188,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10007' versionName: 1.0.0 - androidupdate: [] @@ -1191,6 +1223,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10008' versionName: 1.0.0 - androidupdate: [] @@ -1225,6 +1258,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10102' versionName: 1.0.1 - androidupdate: [] @@ -1259,6 +1293,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10103' versionName: 1.0.1 - androidupdate: [] @@ -1293,6 +1328,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '10104' versionName: 1.0.1 - androidupdate: [] @@ -1329,6 +1365,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010303' versionName: 1.1.3 - androidupdate: [] @@ -1365,6 +1402,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010304' versionName: 1.1.3 - androidupdate: [] @@ -1401,6 +1439,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010305' versionName: 1.1.3 - androidupdate: [] @@ -1437,6 +1476,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010503' versionName: 1.1.5 - androidupdate: [] @@ -1473,6 +1513,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010504' versionName: 1.1.5 - androidupdate: [] @@ -1509,6 +1550,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010505' versionName: 1.1.5 - androidupdate: [] @@ -1545,6 +1587,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010603' versionName: 1.1.6 - androidupdate: [] @@ -1581,6 +1624,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010604' versionName: 1.1.6 - androidupdate: [] @@ -1617,6 +1661,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1010605' versionName: 1.1.6 - androidupdate: [] @@ -1653,6 +1698,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020003' versionName: 1.2.0 - androidupdate: [] @@ -1689,6 +1735,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020004' versionName: 1.2.0 - androidupdate: [] @@ -1725,6 +1772,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020005' versionName: 1.2.0 - androidupdate: [] @@ -1761,6 +1809,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020103' versionName: 1.2.1 - androidupdate: [] @@ -1797,6 +1846,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020104' versionName: 1.2.1 - androidupdate: [] @@ -1833,6 +1883,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020105' versionName: 1.2.1 - androidupdate: [] @@ -1869,6 +1920,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020203' versionName: 1.2.2 - androidupdate: [] @@ -1905,6 +1957,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020204' versionName: 1.2.2 - androidupdate: [] @@ -1941,6 +1994,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020205' versionName: 1.2.2 - androidupdate: [] @@ -1977,6 +2031,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020303' versionName: 1.2.3 - androidupdate: [] @@ -2013,6 +2068,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020304' versionName: 1.2.3 - androidupdate: [] @@ -2049,6 +2105,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020305' versionName: 1.2.3 - androidupdate: [] @@ -2085,6 +2142,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020403' versionName: 1.2.4 - androidupdate: [] @@ -2121,6 +2179,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020404' versionName: 1.2.4 - androidupdate: [] @@ -2157,6 +2216,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020405' versionName: 1.2.4 - androidupdate: [] @@ -2193,6 +2253,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020503' versionName: 1.2.5 - androidupdate: [] @@ -2229,6 +2290,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020504' versionName: 1.2.5 - androidupdate: [] @@ -2265,6 +2327,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1020505' versionName: 1.2.5 - androidupdate: [] @@ -2301,6 +2364,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1030003' versionName: 1.2.6 - androidupdate: [] @@ -2337,6 +2401,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1030004' versionName: 1.2.6 - androidupdate: [] @@ -2373,6 +2438,7 @@ builds: submodules: false sudo: '' target: null + timeout: null versionCode: '1030005' versionName: 1.2.6 comments: {} -- 2.30.2