Launchable: Send stdout and stderr (#12785)

Currently, the Launchable team is developing a new feature to attach any logs. Attached log can be anything, such as system logs or stdout. Users can find these logs using any text search. Please note that this feature is a work in progress, so we can't use it yet.

I'm going to attach stdout and stderr as attached logs because they will be useful for finding interpreter bugs. When running tests, we sometimes see interpreter itself crash, and the stack is output to stderr. When debugging the cause of the issue, this feature is useful.
This commit is contained in:
Naoto Ono 2025-03-06 12:39:39 +09:00 committed by GitHub
parent 309076ff91
commit c939d0c85d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
Notes: git 2025-03-06 03:39:58 +00:00
Merged-By: ono-max <onoto1998@gmail.com>
6 changed files with 74 additions and 21 deletions

View File

@ -247,6 +247,10 @@ runs:
mkdir "${test_spec_report_path}" mkdir "${test_spec_report_path}"
echo test_spec_report_path="${test_spec_report_path}" >> $GITHUB_OUTPUT echo test_spec_report_path="${test_spec_report_path}" >> $GITHUB_OUTPUT
fi fi
stdout_report_path="${dir}${builddir:+${builddir}/}launchable_stdout.log"
stderr_report_path="${dir}${builddir:+${builddir}/}launchable_stderr.log"
echo stdout_report_path="${stdout_report_path}" >> $GITHUB_OUTPUT
echo stderr_report_path="${stderr_report_path}" >> $GITHUB_OUTPUT
if: steps.enable-launchable.outputs.enable-launchable if: steps.enable-launchable.outputs.enable-launchable
env: env:
srcdir: ${{ inputs.srcdir }} srcdir: ${{ inputs.srcdir }}
@ -264,20 +268,35 @@ runs:
shell: bash shell: bash
working-directory: ${{ inputs.srcdir }} working-directory: ${{ inputs.srcdir }}
post: | post: |
[[ "${test_all_enabled}" = "true" ]] && \ if [[ "${test_all_enabled}" = "true" ]]; then \
launchable record attachment \
--session "$(cat "${test_all_session_file}")" \
"${stdout_report_path}" \
"${stderr_report_path}"; \
launchable record tests \ launchable record tests \
--session "$(cat "${test_all_session_file}")" \ --session "$(cat "${test_all_session_file}")" \
raw "${test_report_path}" || true raw "${test_report_path}" || true; \
fi
[[ "${btest_enabled}" = "true" ]] && \ if [[ "${btest_enabled}" = "true" ]]; then \
launchable record attachment \
--session "$(cat "${btest_session_file}")" \
"${stdout_report_path}" \
"${stderr_report_path}"; \
launchable record tests \ launchable record tests \
--session "$(cat "${btest_session_file}")" \ --session "$(cat "${btest_session_file}")" \
raw "${btest_report_path}" || true raw "${btest_report_path}" || true; \
fi
[[ "${test_spec_enabled}" = "true" ]] && \ if [[ "${test_spec_enabled}" = "true" ]]; then \
launchable record attachment \
--session "$(cat "${test_spec_session_file}")" \
"${stdout_report_path}" \
"${stderr_report_path}"; \
launchable record tests \ launchable record tests \
--session "$(cat "${test_spec_session_file}")" \ --session "$(cat "${test_spec_session_file}")" \
raw ${test_spec_report_path}/* || true raw ${test_spec_report_path}/* || true; \
fi
rm -f "${test_all_session_file}" rm -f "${test_all_session_file}"
rm -f "${btest_session_file}" rm -f "${btest_session_file}"
@ -285,6 +304,8 @@ runs:
rm -f "${test_report_path}" rm -f "${test_report_path}"
rm -f "${btest_report_path}" rm -f "${btest_report_path}"
rm -fr "${test_spec_report_path}" rm -fr "${test_spec_report_path}"
rm -f "${stdout_report_path}"
rm -f "${stderr_report_path}"
if: ${{ always() && steps.enable-launchable.outputs.enable-launchable }} if: ${{ always() && steps.enable-launchable.outputs.enable-launchable }}
env: env:
test_report_path: ${{ steps.variables.outputs.test_report_path }} test_report_path: ${{ steps.variables.outputs.test_report_path }}
@ -296,3 +317,5 @@ runs:
test_all_session_file: ${{ steps.global.outputs.test_all_session_file }} test_all_session_file: ${{ steps.global.outputs.test_all_session_file }}
btest_session_file: ${{ steps.global.outputs.btest_session_file }} btest_session_file: ${{ steps.global.outputs.btest_session_file }}
test_spec_session_file: ${{ steps.global.outputs.test_spec_session_file }} test_spec_session_file: ${{ steps.global.outputs.test_spec_session_file }}
stdout_report_path: ${{ steps.variables.outputs.stdout_report_path }}
stderr_report_path: ${{ steps.variables.outputs.stderr_report_path }}

View File

@ -132,6 +132,12 @@ jobs:
- name: make ${{ matrix.test_task }} - name: make ${{ matrix.test_task }}
run: | run: |
if [ -n "${LAUNCHABLE_ORGANIZATION}" ]; then
exec
> >(tee launchable_stdout.log) \
2> >(tee launchable_stderr.log)
fi
ulimit -c unlimited ulimit -c unlimited
make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"}
timeout-minutes: 60 timeout-minutes: 60

View File

@ -141,10 +141,16 @@ jobs:
continue-on-error: true continue-on-error: true
- name: make ${{ matrix.test_task }} - name: make ${{ matrix.test_task }}
run: >- run: |
$SETARCH make -s ${{ matrix.test_task }} if [ -n "${LAUNCHABLE_ORGANIZATION}" ]; then
${TESTS:+TESTS="$TESTS"} exec
${{ !contains(matrix.test_task, 'bundle') && 'RUBYOPT=-w' || '' }} > >(tee launchable_stdout.log) \
2> >(tee launchable_stderr.log)
fi
$SETARCH make -s ${{ matrix.test_task }} \
${TESTS:+TESTS="$TESTS"} \
${{ !contains(matrix.test_task, 'bundle') && 'RUBYOPT=-w' || '' }}
timeout-minutes: ${{ matrix.gc.timeout || 40 }} timeout-minutes: ${{ matrix.gc.timeout || 40 }}
env: env:
RUBY_TESTOPTS: '-q --tty=no' RUBY_TESTOPTS: '-q --tty=no'

View File

@ -117,9 +117,15 @@ jobs:
continue-on-error: true continue-on-error: true
- name: make ${{ matrix.test_task }} - name: make ${{ matrix.test_task }}
run: >- run: |
$SETARCH make -s ${{ matrix.test_task }} if [ -n "${LAUNCHABLE_ORGANIZATION}" ]; then
${TESTS:+TESTS="$TESTS"} exec
> >(tee launchable_stdout.log) \
2> >(tee launchable_stderr.log)
fi
$SETARCH make -s ${{ matrix.test_task }} \
${TESTS:+TESTS="$TESTS"} \
${{ !contains(matrix.test_task, 'bundle') && 'RUBYOPT=-w' || '' }} ${{ !contains(matrix.test_task, 'bundle') && 'RUBYOPT=-w' || '' }}
timeout-minutes: ${{ matrix.timeout || 40 }} timeout-minutes: ${{ matrix.timeout || 40 }}
env: env:

View File

@ -128,10 +128,16 @@ jobs:
continue-on-error: true continue-on-error: true
- name: make ${{ matrix.test_task }} - name: make ${{ matrix.test_task }}
run: >- run: |
make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} if [ -n "${LAUNCHABLE_ORGANIZATION}" ]; then
RUN_OPTS="$RUN_OPTS" exec
SPECOPTS="$SPECOPTS" > >(tee launchable_stdout.log) \
2> >(tee launchable_stderr.log)
fi
make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} \
RUN_OPTS="$RUN_OPTS" \
SPECOPTS="$SPECOPTS"
timeout-minutes: 60 timeout-minutes: 60
env: env:
RUBY_TESTOPTS: '-q --tty=no' RUBY_TESTOPTS: '-q --tty=no'

View File

@ -182,10 +182,16 @@ jobs:
continue-on-error: true continue-on-error: true
- name: make ${{ matrix.test_task }} - name: make ${{ matrix.test_task }}
run: >- run: |
make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} if [ -n "${LAUNCHABLE_ORGANIZATION}" ]; then
RUN_OPTS="$RUN_OPTS" MSPECOPT=--debug SPECOPTS="$SPECOPTS" exec
YJIT_BENCH_OPTS="$YJIT_BENCH_OPTS" YJIT_BINDGEN_DIFF_OPTS="$YJIT_BINDGEN_DIFF_OPTS" > >(tee launchable_stdout.log) \
2> >(tee launchable_stderr.log)
fi
make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} \
RUN_OPTS="$RUN_OPTS" MSPECOPT=--debug SPECOPTS="$SPECOPTS" \
YJIT_BENCH_OPTS="$YJIT_BENCH_OPTS" YJIT_BINDGEN_DIFF_OPTS="$YJIT_BINDGEN_DIFF_OPTS"
timeout-minutes: 90 timeout-minutes: 90
env: env:
RUBY_TESTOPTS: '-q --tty=no' RUBY_TESTOPTS: '-q --tty=no'