1111from pathlib import Path
1212import platform
1313import traceback
14+ from functools import partial
15+ import dataclasses
1416
1517import pyalpm
1618
1719from .vendor .nicelogger import enable_pretty_logging
1820from .vendor .myutils import file_lock
1921
2022from . import pkgbuild
21- from .typing import LilacMod , Cmd , OnBuildVers
23+ from .typing import LilacMod , Cmd , OnBuildVers , Report
2224from .cmd import run_cmd , UNTRUSTED_PREFIX
2325from .api import (
2426 vcs_update , get_pkgver_and_pkgrel , update_pkgrel ,
@@ -219,6 +221,8 @@ def main() -> None:
219221
220222 _G .commit_msg_template = input ['commit_msg_template' ]
221223 _G .reponame = input ['reponame' ]
224+ reports : list [Report ] = []
225+ _G .add_report = partial (add_report , reports )
222226
223227 r : dict [str , Any ]
224228 try :
@@ -245,7 +249,8 @@ def main() -> None:
245249 'msg' : repr (e ),
246250 }
247251 sys .stdout .flush ()
248- r ['report' ] = gen_failure_report (e )
252+ logger .error ('build failed' , exc_info = e )
253+ reports .append (gen_failure_report (e ))
249254 except KeyboardInterrupt :
250255 logger .info ('KeyboardInterrupt received' )
251256 r = {
@@ -257,33 +262,31 @@ def main() -> None:
257262 kill_child_processes ()
258263
259264 r ['version' ] = getattr (_G , 'built_version' , None )
265+ r ['reports' ] = [dataclasses .asdict (r ) for r in reports ]
260266
261267 with open (input ['result' ], 'w' ) as f :
262268 json .dump (r , f )
263269
264- def gen_failure_report (e : Exception ) -> dict [str , str ]:
265- logger .error ('build failed' , exc_info = e )
270+ def gen_failure_report (e : Exception ) -> Report :
266271 l10n = intl .get_l10n ('mail' )
267272
268- report = {}
269-
270273 if isinstance (e , pkgbuild .ConflictWithOfficialError ):
271274 reason = ''
272275 if e .groups :
273276 reason += l10n .format_value ('package-in-official-group' , {'groups' : repr (e .groups )}) + '\n '
274277 if e .packages :
275278 reason += l10n .format_value ('package-replacing-official-package' , {'packages' : repr (e .packages )}) + '\n '
276279 subj = l10n .format_value ('package-conflicts-with-official-repos' )
277- report ['subject' ] = subj
278- report ['msg' ] = reason ,
280+ report = Report (subject = subj , msg = reason )
279281
280282 elif isinstance (e , pkgbuild .DowngradingError ):
281- report [ 'subject' ] = l10n .format_value ('package-older-subject' )
282- report [ ' msg' ] = l10n .format_value ('package-older-body' , {
283+ subj = l10n .format_value ('package-older-subject' )
284+ msg = l10n .format_value ('package-older-body' , {
283285 'pkg' : e .pkgname ,
284286 'built_version' : e .built_version ,
285287 'repo_version' : e .repo_version ,
286288 }) + '\n '
289+ report = Report (subject = subj , msg = msg )
287290
288291 else :
289292 msgs = []
@@ -310,10 +313,19 @@ def gen_failure_report(e: Exception) -> dict[str, str]:
310313 subject = l10n .format_value ('packaging-error-unknown-subject' )
311314 msg1 = l10n .format_value ('packaging-error-unknown' )
312315 msgs .append (msg1 + '\n \n ' + tb )
313- report ['subject' ] = subject
314- report ['msg' ] = '\n ' .join (msgs )
316+ report = Report (subject = subject , msg = '\n ' .join (msgs ))
315317
316318 return report
317319
320+ def add_report (
321+ reports : list [Report ],
322+ exc : Exception ,
323+ subject : str ,
324+ ) -> None :
325+ report = gen_failure_report (exc )
326+ report .subject = subject
327+ report .sendlog = False
328+ reports .append (report )
329+
318330if __name__ == '__main__' :
319331 main ()
0 commit comments