diff --git a/actions/cairn-zig-fuzz-afl/action.yml b/actions/cairn-zig-fuzz-afl/action.yml index d3cb160..dcdfc5e 100644 --- a/actions/cairn-zig-fuzz-afl/action.yml +++ b/actions/cairn-zig-fuzz-afl/action.yml @@ -81,6 +81,17 @@ runs: TOTAL_CRASHES=0 TARGET_NUM=0 + ACTIVE_RUN_ID="" + + # Single EXIT trap that finishes whatever run is active. + cleanup() { + if [ -n "${ACTIVE_RUN_ID}" ]; then + echo "Finishing run ${ACTIVE_RUN_ID} (cleanup)..." + cairn run finish -server "${CAIRN_SERVER}" -id "${ACTIVE_RUN_ID}" || true + ACTIVE_RUN_ID="" + fi + } + trap cleanup EXIT # ── Iterate over each target name ── while IFS= read -r FUZZ_TARGET; do @@ -109,13 +120,9 @@ runs: -server "${CAIRN_SERVER}" \ -target-id "${CAIRN_TARGET_ID}" \ -commit "${COMMIT}") + ACTIVE_RUN_ID="${RUN_ID}" echo "Run ID: ${RUN_ID}" - finish_run() { - cairn run finish -server "${CAIRN_SERVER}" -id "${RUN_ID}" || true - } - trap finish_run EXIT - # ── Download existing corpus ── SEEDS="afl-seeds-${TARGET_NUM}" rm -rf "${SEEDS}" @@ -230,8 +237,8 @@ runs: fi # ── Finish run ── - finish_run - trap - EXIT + cairn run finish -server "${CAIRN_SERVER}" -id "${RUN_ID}" || true + ACTIVE_RUN_ID="" done <