Route delivered HQ tracks to temporary road interception and refresh playtest packages
This commit is contained in:
+29
-2
@@ -461,6 +461,18 @@ def run_project(steam, compat, session, project, timeout, authored, silent_workb
|
||||
return report
|
||||
|
||||
|
||||
|
||||
def cleaned_native_completion(report):
|
||||
"""Permit another diagnostic job, never upgrade this job's failed verdict."""
|
||||
cleanup = report.get('cleanup_report')
|
||||
return (report.get('completion_observed') == 'native-or-launcher-exited-prefix-active'
|
||||
and type(report.get('native_exit_code')) is int and report['native_exit_code'] == 0
|
||||
and report.get('launcher_exit_code') in (None, 0)
|
||||
and report.get('candidate_created') is False
|
||||
and isinstance(cleanup, dict) and cleanup.get('cleanup_confirmed') is True
|
||||
and cleanup.get('idle_verified') is True and cleanup.get('errors') == [])
|
||||
|
||||
|
||||
def run(a, root=ROOT):
|
||||
root, steam, compat = root.resolve(), a.steam.resolve(), a.compat.resolve()
|
||||
session = a.session.absolute() # refuse existing symlinks before resolve
|
||||
@@ -489,6 +501,7 @@ def run(a, root=ROOT):
|
||||
if external is not None:
|
||||
capture_external(external, session)
|
||||
reports = []
|
||||
diagnostic_continuations = []
|
||||
order = project_order(a.project)
|
||||
continue_on_failure = getattr(a, 'continue_on_failure', False)
|
||||
stopped_reason = None
|
||||
@@ -516,7 +529,21 @@ def run(a, root=ROOT):
|
||||
elif not report.get('copied_authored_unchanged'):
|
||||
stopped_reason = 'copied authored source changed or unverifiable'
|
||||
elif report.get('completion_observed') not in {'process-exited', 'native-child-exited'}:
|
||||
stopped_reason = 'native completion not safely observed'
|
||||
if not (continue_on_failure and cleaned_native_completion(report)):
|
||||
stopped_reason = 'native completion not safely observed'
|
||||
else:
|
||||
# Native exited by itself, then owned cleanup removed helpers.
|
||||
# Recheck idle and both authored copies before any later job.
|
||||
try:
|
||||
assert_no_game()
|
||||
assert_prefix_idle(compat)
|
||||
if inventory(root) != authored or copied_authored_snapshot(session/'source', authored) != authored:
|
||||
raise ValueError('authored inputs changed after cleanup')
|
||||
diagnostic_continuations.append({'after_project': project,
|
||||
'native_exit_code': 0, 'idle_rechecked': True,
|
||||
'authored_inputs_rechecked': True, 'failed_verdict_retained': True})
|
||||
except (OSError, ValueError, subprocess.SubprocessError) as error:
|
||||
stopped_reason = 'diagnostic continuation refused: '+str(error)
|
||||
elif not report['candidate_created'] and not continue_on_failure:
|
||||
stopped_reason = 'candidate failed; continuation not requested'
|
||||
if stopped_reason:
|
||||
@@ -544,7 +571,7 @@ def run(a, root=ROOT):
|
||||
save(session/'external-addons-after.json', {'records': external['last_records'], 'unchanged': external_unchanged})
|
||||
summary = {'kind': 'UNQUALIFIED NATIVE PACKAGE ATTEMPT', 'session': str(session),
|
||||
'project_order': order, 'projects': reports,
|
||||
'continue_on_failure': continue_on_failure, 'stopped_reason': stopped_reason,
|
||||
'continue_on_failure': continue_on_failure, 'diagnostic_continuations': diagnostic_continuations, 'stopped_reason': stopped_reason,
|
||||
'skipped_projects': order[len(reports):],
|
||||
'source_repository_unchanged': original_unchanged,
|
||||
'external_addons_unchanged_after_run': external_unchanged,
|
||||
|
||||
Reference in New Issue
Block a user