1
0
Fork 0
mirror of https://github.com/VSadov/Satori.git synced 2025-06-08 03:27:04 +09:00
Satori/eng/testing/gen-debug-dump-docs.py
Carlos Sánchez López 35b866ce6a
Add XUnitLogChecker to log libraries dumps, do not enable for NativeAOT tests (#94868)
* Add XUnitLogChecker to log libraries dumps (#93906)

Libraries CI failures that generate dumps will now show the dump output in the console log itself.

* Change NativeAOT condition

* Pass the global property set to false in the post build step.

* Address suggestion:
- Avoid using yml extraHelixArguments.
- Add the new embedded SetCommands optional section in runner scripts.
- Set __IsXUnitLogCheckerSupported in tests.targets as SetScriptCommand items instead of directly in sendtohelixhelp.proj.

* Only add XUnitLogChecker as HelixPayload if its directory is found. Whether it was built or not has already been decided before, and the runner scripts know when to execute it.
2023-11-29 09:59:14 -08:00

141 lines
4.3 KiB
Python

import os
import sys
import platform
scriptname = os.path.basename(__file__)
def print_detail(str):
print(f"{scriptname}: {str}")
build_id = ''
job_id = ''
workitem = ''
dump_dir = ''
template_dir = os.getcwd()
out_dir = template_dir
idx = 0
args_len = len(sys.argv)
product_ver = ''
while idx < args_len:
arg = sys.argv[idx]
idx += 1
if arg == '-buildid':
if idx >= args_len or sys.argv[idx].startswith('-'):
print_detail("Must specify a value for -buildid")
exit(1)
build_id = sys.argv[idx]
idx += 1
if arg == '-jobid':
if idx >= args_len or sys.argv[idx].startswith('-'):
print_detail("Must specify a value for -jobid")
exit(1)
job_id = sys.argv[idx]
idx += 1
if arg == '-workitem':
if idx >= args_len or sys.argv[idx].startswith('-'):
print_detail("Must specify a value for -workitem")
exit(1)
workitem = sys.argv[idx]
idx += 1
if arg == '-templatedir':
if idx >= args_len or sys.argv[idx].startswith('-'):
print_detail("Must specify a value for -templatedir")
exit(1)
template_dir = sys.argv[idx]
idx += 1
if arg == '-outdir':
if idx >= args_len or sys.argv[idx].startswith('-'):
print_detail("Must specify a value for -outdir")
exit(1)
out_dir = sys.argv[idx]
idx += 1
if arg == '-dumpdir':
if idx >= args_len or sys.argv[idx].startswith('-'):
print_detail("Must specify a value for -dumpdir")
exit(1)
dump_dir = sys.argv[idx]
idx += 1
if arg == '-productver':
if idx >= args_len or sys.argv[idx].startswith('-'):
print_detail("Must specify a value for -productver")
exit(1)
product_ver = sys.argv[idx]
idx += 1
dump_names = []
if dump_dir != '':
for filename in os.listdir(dump_dir):
if filename.endswith('.dmp') or 'core.' in filename:
dump_names.append(filename)
if len(dump_names) == 0:
print_detail("Did not find dumps, skipping dump docs generation.")
exit(0)
if build_id == '':
print_detail("ERROR: unespecified required argument -buildid")
exit(1)
if workitem == '':
print_detail("ERROR: unespecified required argument -workitem")
exit(1)
if job_id == '':
print_detail("ERROR: unespecified required argument -jobid")
exit(1)
if product_ver == '':
print_detail("ERROR: unespecified required argument -productver")
exit(1)
replace_string = ''
dir_separator = '/' if platform.system() != 'Windows' else '\\'
unix_user_folder = '$HOME/helix_payload/'
windows_user_folder = 'c:\\helix_payload\\'
source_file = template_dir + dir_separator + 'debug-dump-template.md'
with open(source_file, 'r') as f:
file_text = f.read()
print_detail('read file: ' + source_file)
replace_string = file_text.replace('%JOBID%', job_id)
replace_string = replace_string.replace('%WORKITEM%', workitem)
replace_string = replace_string.replace('%BUILDID%', build_id)
replace_string = replace_string.replace('%PRODUCTVERSION%', product_ver)
replace_string = replace_string.replace('%LOUTDIR%', unix_user_folder + workitem)
replace_string = replace_string.replace('%WOUTDIR%', windows_user_folder + workitem)
output_file = out_dir + dir_separator + 'how-to-debug-dump.md'
with open(output_file, 'w+') as output:
print_detail('writing output file: ' + output_file)
lines = replace_string.split(os.linesep)
lin_dump_dir= workitem + "/workitems/" + workitem + "/"
win_dump_dir= workitem + "\\workitems\\" + workitem + "\\"
for line in lines:
# write dump debugging commands for each dump found.
if "<lin-path-to-dump>" in line:
for dump_name in dump_names:
output.write(line.replace("<lin-path-to-dump>", unix_user_folder + lin_dump_dir + dump_name))
output.write(os.linesep)
elif "<win-path-to-dump>" in line:
for dump_name in dump_names:
output.write(line.replace("<win-path-to-dump>", windows_user_folder + win_dump_dir + dump_name))
output.write(os.linesep)
else:
output.write(line + os.linesep)
print_detail('done writing debug dump information')