diff --git a/common_factories.py b/common_factories.py index 47407024..b542d075 100644 --- a/common_factories.py +++ b/common_factories.py @@ -35,7 +35,7 @@ mtrJobsMultiplier, printEnv, saveLogs, - savePackage, + savePackageIfBranchMatch, ) diff --git a/utils.py b/utils.py index 6332961c..08ff01ec 100644 --- a/utils.py +++ b/utils.py @@ -281,15 +281,19 @@ def fnmatch_any(branch: str, patterns: list[str]) -> bool: # Priority filter based on saved package branches -def nextBuild(builder: Builder, - requests: list[BuildRequest]) -> str: - for r in requests: - if fnmatch_any(r.sources[""].branch, releaseBranches): - return r - for r in requests: - if fnmatch_any(r.sources[""].branch, savedPackageBranches): - return r - return requests[0] +def nextBuild(builder: Builder, requests: list[BuildRequest]) -> str: + def build_request_sort_key(request: BuildRequest): + branch = request.sources[""].branch + # Booleans are sorted False first. + # Priority is given to releaseBranches, savePackageBranches + # then it's first come, first serve. + return ( + not fnmatch_any(branch, releaseBranches), + not fnmatch_any(branch, savedPackageBranches), + request.getSubmitTime(), + ) + + return sorted(requests, build_request_sort_key)[0] def canStartBuild(