From f098dd2fa4b4141906f560156b530a51636dbdcd Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Sun, 16 Nov 2025 11:29:46 -0500 Subject: [PATCH] profile on timeout --- action.yml | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 79d7807..d1e6dd8 100644 --- a/action.yml +++ b/action.yml @@ -66,9 +66,39 @@ runs: prefix=( ${{ inputs.prefix }} ) [[ -n ${prefix[*]} ]] && julia_cmd=( "${prefix[@]}" "${julia_cmd[@]}" ) - # Run the Julia command + # Determine which signal to use for diagnostics based on OS + if [[ "$(uname -s)" == "Darwin" ]] || [[ "$(uname -s)" == *"BSD"* ]]; then + info_signal="INFO" + else + info_signal="USR1" + fi + + # Set up signal handler to send diagnostic signal when we receive SIGTERM + # (which GitHub Actions sends on timeout/cancellation) + trap_handler() { + echo "::warning::Timeout/cancellation detected - sending SIG${info_signal} to Julia process for diagnostic output" + if kill -0 "$julia_pid" 2>/dev/null; then + kill -s "$info_signal" "$julia_pid" 2>/dev/null || true + # Give Julia a moment to print diagnostics before we get killed + sleep 2 + fi + # Re-send SIGTERM to Julia to ensure it terminates + kill -TERM "$julia_pid" 2>/dev/null || true + wait "$julia_pid" 2>/dev/null || true + exit 124 # Standard timeout exit code + } + trap trap_handler SIGTERM SIGINT + + # Run the Julia command in the background so we can handle signals echo "::debug::Executing Julia: ${julia_cmd[*]}" - "${julia_cmd[@]}" + "${julia_cmd[@]}" & + julia_pid=$! + + # Wait for Julia to complete + wait "$julia_pid" + exit_code=$? + + exit $exit_code shell: bash env: ANNOTATE: ${{ inputs.annotate }}