mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-14 13:16:16 -08:00
ci(packaging): classify kill-after probe timeouts and keep output tails
Address review feedback on the time-boxed runtime probes: - GNU timeout exits 137, not 124, when -k escalates to SIGKILL. Run it with --verbose and report a timeout for 124, or for 137 only when timeout announced its own KILL, so an app killed by something else is not misreported. Verified against coreutils 9.4 on ubuntu:24.04. - Print the first and last 16 KiB of oversized Flatpak probe output so a late startup exception or the timeout notice stays in the log. - Pin the hostile Snap probe's timeout-before-generic-failure ordering. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ae13b569ff
commit
7342ccd329
3 files changed
+75
-22
No files matched your search
@@ -1099,6 +1099,15 @@ jobs:
|
||||
sudo snap disconnect iptvnator:graphics-core22 mesa-core22:graphics-core22
|
||||
snap connections iptvnator | awk \
|
||||
'$2 == "iptvnator:graphics-core22" && $3 == "-" { found=1 } END { exit !found }'
|
||||
probe_timed_out() {
|
||||
# GNU timeout exits 124 when SIGTERM ends the app and 137 when -k
|
||||
# escalates to SIGKILL. --verbose announces that KILL, so an app
|
||||
# killed by anything else is not misreported as a timeout.
|
||||
local status="$1" output="$2"
|
||||
[ "${status}" -eq 124 ] && return 0
|
||||
[ "${status}" -eq 137 ] &&
|
||||
grep -Fq 'sending signal KILL to command' <<<"${output}"
|
||||
}
|
||||
# GNU timeout kills a packaged app that never exits, for example when the
|
||||
# main process throws before app ready and Electron's uncaught-exception
|
||||
# dialog blocks under xvfb. ELECTRON_ENABLE_LOGGING routes Chromium and
|
||||
@@ -1107,13 +1116,13 @@ jobs:
|
||||
set +e
|
||||
disconnected_probe="$(
|
||||
xvfb-run -a env LIBGL_ALWAYS_SOFTWARE=1 ELECTRON_ENABLE_LOGGING=1 \
|
||||
timeout -k 10 300 \
|
||||
timeout --verbose -k 10 300 \
|
||||
snap run iptvnator --embedded-mpv-runtime-probe 2>&1
|
||||
)"
|
||||
disconnected_status=$?
|
||||
set -e
|
||||
printf '%s\n' "${disconnected_probe}"
|
||||
if [ "${disconnected_status}" -eq 124 ]; then
|
||||
if probe_timed_out "${disconnected_status}" "${disconnected_probe}"; then
|
||||
echo "::error::The packaged Snap app did not exit within 300 seconds during the disconnected graphics runtime probe and was killed; inspect the probe output above for main-process startup errors."
|
||||
exit 1
|
||||
fi
|
||||
@@ -1150,13 +1159,13 @@ jobs:
|
||||
XDG_CONFIG_DIRS=/tmp/hostile-xdg-config-dirs \
|
||||
XDG_DATA_HOME=/tmp/hostile-xdg-data-home \
|
||||
XDG_DATA_DIRS=/tmp/hostile-xdg-data-dirs \
|
||||
timeout -k 10 300 \
|
||||
timeout --verbose -k 10 300 \
|
||||
snap run iptvnator --embedded-mpv-runtime-probe 2>&1
|
||||
)"
|
||||
hostile_status=$?
|
||||
set -e
|
||||
printf '%s\n' "${hostile_probe}"
|
||||
if [ "${hostile_status}" -eq 124 ]; then
|
||||
if probe_timed_out "${hostile_status}" "${hostile_probe}"; then
|
||||
echo "::error::The packaged Snap app did not exit within 300 seconds during the hostile-environment runtime probe and was killed; inspect the probe output above for main-process startup errors."
|
||||
exit 1
|
||||
fi
|
||||
@@ -1249,13 +1258,22 @@ jobs:
|
||||
ELF_MAGIC="$(od -An -tx1 -N4 "${LAUNCHER_PATH}" | tr -d "[:space:]")"
|
||||
test "${ELF_MAGIC}" = "7f454c46"
|
||||
'
|
||||
probe_timed_out() {
|
||||
# GNU timeout exits 124 when SIGTERM ends the app and 137 when -k
|
||||
# escalates to SIGKILL. --verbose announces that KILL, so an app
|
||||
# killed by anything else is not misreported as a timeout.
|
||||
local status="$1" output="$2"
|
||||
[ "${status}" -eq 124 ] && return 0
|
||||
[ "${status}" -eq 137 ] &&
|
||||
grep -Fq 'sending signal KILL to command' <<<"${output}"
|
||||
}
|
||||
# GNU timeout kills a packaged app that never exits, for example when the
|
||||
# main process throws before app ready and Electron's uncaught-exception
|
||||
# dialog blocks under xvfb. ELECTRON_ENABLE_LOGGING routes Chromium and
|
||||
# main-process stderr into the captured output.
|
||||
set +e
|
||||
PROBE_OUTPUT="$(
|
||||
xvfb-run -a dbus-run-session -- timeout -k 10 300 flatpak run \
|
||||
xvfb-run -a dbus-run-session -- timeout --verbose -k 10 300 flatpak run \
|
||||
--env=LIBGL_ALWAYS_SOFTWARE=1 \
|
||||
--env=ELECTRON_ENABLE_LOGGING=1 \
|
||||
com.fourgray.iptvnator \
|
||||
@@ -1264,17 +1282,22 @@ jobs:
|
||||
PROBE_STATUS=$?
|
||||
set -e
|
||||
|
||||
# Keep both ends of oversized output: logging can push a startup
|
||||
# exception or the timeout notice past the first window.
|
||||
PROBE_OUTPUT_LIMIT=16384
|
||||
printf '%s\n' "${PROBE_OUTPUT:0:PROBE_OUTPUT_LIMIT}"
|
||||
if [ "${#PROBE_OUTPUT}" -gt "${PROBE_OUTPUT_LIMIT}" ]; then
|
||||
echo "::warning::Flatpak runtime probe output was truncated to ${PROBE_OUTPUT_LIMIT} characters."
|
||||
if [ "${#PROBE_OUTPUT}" -le $((PROBE_OUTPUT_LIMIT * 2)) ]; then
|
||||
printf '%s\n' "${PROBE_OUTPUT}"
|
||||
else
|
||||
printf '%s\n' "${PROBE_OUTPUT:0:PROBE_OUTPUT_LIMIT}"
|
||||
echo "::warning::Flatpak runtime probe output was truncated to its first and last ${PROBE_OUTPUT_LIMIT} characters."
|
||||
printf '%s\n' "${PROBE_OUTPUT: -PROBE_OUTPUT_LIMIT}"
|
||||
fi
|
||||
if [[ "${PROBE_OUTPUT}" == *"not an ELF file"* ]] ||
|
||||
[[ "${PROBE_OUTPUT}" == *"Zypak needs to be called directly"* ]]; then
|
||||
echo "::error::Flatpak launched a wrapper instead of the Electron ELF."
|
||||
exit 1
|
||||
fi
|
||||
if [ "${PROBE_STATUS}" -eq 124 ]; then
|
||||
if probe_timed_out "${PROBE_STATUS}" "${PROBE_OUTPUT}"; then
|
||||
echo "::error::The packaged Flatpak app did not exit within 300 seconds during the application runtime probe and was killed; inspect the probe output above for main-process startup errors."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in new issue
Block a user