@@ -14,7 +14,7 @@ import os
14
14
import subprocess
15
15
import sys
16
16
17
- from datetime import timedelta , datetime
17
+ from datetime import datetime , timedelta
18
18
from functools import partial
19
19
20
20
from buildbot .plugins import reporters , schedulers , util
@@ -182,6 +182,24 @@ def is_important_change(change):
182
182
return any (is_important_file (filename ) for filename in change .files )
183
183
184
184
185
+ # Avoid a build to be started between start and end time and delay such build
186
+ # at end time
187
+ def no_builds_between (start , end ):
188
+ def f (builder , requests ):
189
+ now = datetime .now ()
190
+ if start <= now .hour < end :
191
+ # Calculate the delay until end time
192
+ delay = ((end - now .hour ) % 24 ) * 3600 - now .minute * 60 - now .second
193
+ builder .master .reactor .callLater (
194
+ delay ,
195
+ builder .buildset_manager .submitBuildSet ,
196
+ requests [0 ],
197
+ )
198
+ return None # Do not start the build immediately
199
+ return requests [0 ] # Start the next build request
200
+ return f
201
+
202
+
185
203
github_status_builders = []
186
204
release_status_builders = []
187
205
mail_status_builders = []
@@ -247,17 +265,24 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches):
247
265
mail_status_builders .append (buildername )
248
266
github_status_builders .append (buildername )
249
267
release_status_builders .append (buildername )
250
- c ["builders" ].append (
251
- util .BuilderConfig (
252
- name = buildername ,
253
- workernames = [worker_name ],
254
- builddir = "%s.%s%s"
255
- % (branchname , worker_name , getattr (f , "buildersuffix" , "" )),
256
- factory = f ,
257
- tags = tags ,
258
- locks = [cpulock .access ("counting" )],
259
- )
268
+
269
+ builder = util .BuilderConfig (
270
+ name = buildername ,
271
+ workernames = [worker_name ],
272
+ builddir = "%s.%s%s"
273
+ % (branchname , worker_name , getattr (f , "buildersuffix" , "" )),
274
+ factory = f ,
275
+ tags = tags ,
276
+ locks = [cpulock .access ("counting" )],
260
277
)
278
+
279
+ # This worker runs pyperformance at 12am. If a build is scheduled between
280
+ # 10pm and 2am, it will be delayed at 2am.
281
+ if worker_name == "diegorusso-aarch64-bigmem" :
282
+ builder .nextBuild = no_builds_between (22 , 2 )
283
+
284
+ c ["builders" ].append (builder )
285
+
261
286
c ["schedulers" ].append (
262
287
schedulers .SingleBranchScheduler (
263
288
name = branchname ,
@@ -288,24 +313,6 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches):
288
313
stable_pull_request_builders = []
289
314
all_pull_request_builders = []
290
315
291
- # Avoid a build to be started between start and end time and delay such build
292
- # at end time
293
- def no_builds_between (start , end ):
294
- def f (builder , requests ):
295
- now = datetime .now ()
296
- if start <= now .hour < end :
297
- # Calculate the delay until end time
298
- delay = ((end - now .hour ) % 24 ) * 3600 - now .minute * 60 - now .second
299
- builder .master .reactor .callLater (
300
- delay ,
301
- builder .buildset_manager .submitBuildSet ,
302
- requests [0 ]
303
- )
304
- return None # Do not start the build immediately
305
- return requests [0 ] # Start the next build request
306
- return f
307
-
308
-
309
316
for name , worker_name , buildfactory , stability , tier in BUILDERS :
310
317
if "Windows XP" in name or "VS9.0" in name :
311
318
continue
0 commit comments