Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 32 additions & 8 deletions common/CI/package_checks.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import re
import subprocess
import sys
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
from dataclasses import dataclass
from datetime import datetime, timezone
from enum import Enum
Expand Down Expand Up @@ -440,13 +441,26 @@ class PackageBumped(PullRequestCheck):
def run(self) -> List[Result]:
commits = self.commits or ['HEAD']
files = set(self.files) & set(self.git.untracked_files() + self.git.modified_files())
results = [self._check_commit(commit, file)
for commit in commits
for file in self.git.files_in_commit(commit)]
results += [self._check_commit(None, file)
for file in files]

return [result for result in results if result is not None]
results = []
with ThreadPoolExecutor() as executor:
futures = []

# commit-based checks
for commit in commits:
for file in self.git.files_in_commit(commit):
futures.append(executor.submit(self._check_commit, commit, file))

# file-based checks
for file in files:
futures.append(executor.submit(self._check_commit, None, file))

for future in as_completed(futures):
result = future.result()
if result is not None:
results.append(result)

return results

def _check_commit(self, ref: Optional[str], file: str) -> Optional[Result]:
match os.path.basename(file):
Expand Down Expand Up @@ -849,8 +863,18 @@ def run(self) -> bool:
if self.commits:
print(f'Checking commits: {", ".join(self.commits)}')

results = [result for check in self.checks
for result in check(self.git, self.files, self.commits, self.base).run()]
with ProcessPoolExecutor() as executor:
futures = [
executor.submit(
check(self.git, self.files, self.commits, self.base).run
)
for check in self.checks
]

results = []
for future in as_completed(futures):
results.extend(future.result())

errors = [r for r in results if r.level == Level.ERROR]
warnings = [r for r in results if r.level == Level.WARNING]

Expand Down