Merge "Fix partial subunit stream logging"

This commit is contained in:
Zuul 2020-08-06 21:56:45 +00:00 committed by Gerrit Code Review
commit 155a880534
2 changed files with 53 additions and 33 deletions

View File

@ -28,17 +28,28 @@ zuul_work_dir=$1
cd $HOME
cd $zuul_work_dir
# A non zero exit code means we didn't find any stestr or testr database
# content. Additionally if the database content is parseable we emit on
# stdout the commands which can be used to retrieve that parsed content.
# This distiction is necessary as we want to take different actions based
# on whether or not the database content is parseable.
rc=1
commands=""
if [[ -d .testrepository ]] ; then
rc=0
commands="testr ${commands}"
fi
# NOTE(mordred) Check for the failing file in the .stestr directory
# nstead of just the directory. A stestr run that fails due to python
# parsing errors will leave a directory but with no test results, which
# will result in an error in the subunit generation phase.
if [[ -f .stestr/failing ]] ; then
commands="stestr ${commands}"
if [[ -d .stestr ]] ; then
rc=0
# NOTE(mordred) Check for the failing file in the .stestr directory
# instead of just the directory. A stestr run that fails due to python
# parsing errors will leave a directory but with no test results, which
# will result in an error in the subunit generation phase.
if [[ -f .stestr/failing ]] ; then
commands="stestr ${commands}"
fi
fi
# Add all the tox envs to the path so that type will work. Prefer tox
@ -57,3 +68,4 @@ for command in $commands; do
break
fi
done
exit $rc

View File

@ -4,15 +4,49 @@
- name: Find stestr or testr executable
script: "find-testr.sh {{ zuul_work_dir }}"
register: testr_command
failed_when: false
- when:
- testr_command.rc == 0
- testr_command.stdout_lines
# Here we run steps that should apply whether or not there is a valid
# subunit stream present.
block:
- name: Get the list of directories with subunit files
set_fact:
all_subunit_dirs: "{{ [ zuul_work_dir ] + fetch_subunit_output_additional_dirs }}"
# If (s)testr was stopped early (possibly due to a timeout) it will "leak"
# a tmp file of the inflight subunit stream. Collect this as it is useful
# for debugging in these situations. Because it isn't a complete file
# we don't process it further.
- name: Find any inflight partial subunit files
find:
paths:
- "{{ zj_item }}/.testrepository"
- "{{ zj_item }}/.stestr"
patterns:
- 'tmp*'
register: partial_subunit_files
loop: "{{ all_subunit_dirs }}"
loop_control:
loop_var: zj_item
- name: Copy any inflight subunit files
copy:
dest: "{{ zuul_output_dir }}/logs/"
src: "{{ zj_item.path }}"
remote_src: true
with_items: "{{ partial_subunit_files.files }}"
loop_control:
loop_var: zj_item
when: partial_subunit_files.files is defined
- when:
- testr_command.rc == 0
- testr_command.stdout_lines
# Here we run steps that only apply when there is a valid subunity stream.
# This is indicated through testr_command.stdout_lines content.
block:
# The usage an independent target file instead of sending the output
# to zuul_work_dir prevents issues related to zuul_work_dir being
# a relative path, which may happen despite what the documentation
@ -43,31 +77,5 @@
state: absent
failed_when: false
# If (s)testr was stopped early (possibly due to a timeout) it will "leak"
# a tmp file of the inflight subunit stream. Collect this as it is useful
# for debugging in these situations. Because it isn't a complete file
# we don't process it further.
- name: Find any inflight partial subunit files
find:
paths:
- "{{ zj_item }}/.testrepository"
- "{{ zj_item }}/.stestr"
patterns:
- 'tmp*'
register: partial_subunit_files
loop: "{{ all_subunit_dirs }}"
loop_control:
loop_var: zj_item
- name: Copy any inflight subunit files
copy:
dest: "{{ zuul_output_dir }}/logs/"
src: "{{ zj_item.path }}"
remote_src: true
with_items: "{{ partial_subunit_files.files }}"
loop_control:
loop_var: zj_item
when: partial_subunit_files.files is defined
- name: Process and fetch subunit results
include_tasks: process.yaml