From 65330d4e00438637e06219845fe34ca04910471b Mon Sep 17 00:00:00 2001 From: S Date: Mon, 2 Mar 2026 10:50:27 -0500 Subject: [PATCH] fix: enhance phase3_teardown.sh with error handling for runner removal --- phase3_teardown.sh | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/phase3_teardown.sh b/phase3_teardown.sh index b9f3c16..e3db49d 100755 --- a/phase3_teardown.sh +++ b/phase3_teardown.sh @@ -24,6 +24,11 @@ if [[ ! -f "$RUNNERS_CONF" ]]; then exit 0 fi +# Track whether teardown encountered operational errors (not user skips). +TEARDOWN_FAILED=false +REMOVED=0 +FAILED=0 + # --------------------------------------------------------------------------- # Step 1: Remove each runner via manage_runner.sh # manage_runner.sh handles its own safety (skips already-removed runners). @@ -34,21 +39,36 @@ if [[ "$confirm" =~ ^[Yy]$ ]]; then while IFS= read -r name; do [[ -z "$name" ]] && continue log_info "Removing runner: ${name}" - "${SCRIPT_DIR}/manage_runner.sh" remove --name "$name" || true + if "${SCRIPT_DIR}/manage_runner.sh" remove --name "$name"; then + REMOVED=$((REMOVED + 1)) + else + log_error "Failed to remove runner: ${name}" + FAILED=$((FAILED + 1)) + TEARDOWN_FAILED=true + fi done < <(ini_list_sections "$RUNNERS_CONF") - log_success "All runners removed" + + TOTAL=$((REMOVED + FAILED)) + log_info "Results: ${REMOVED} removed, ${FAILED} failed (out of ${TOTAL})" else log_info "Skipped runner removal" fi # --------------------------------------------------------------------------- # Step 2: Clear the registration token from .env -# The token is single-use in some Gitea configurations — generating a new one -# on next deploy is safer than reusing a potentially stale token. +# Only clear if no runners failed — a partial teardown should preserve the +# token so the user can retry without needing to regenerate it. # --------------------------------------------------------------------------- -if [[ -n "${GITEA_RUNNER_REGISTRATION_TOKEN:-}" ]]; then +if $TEARDOWN_FAILED; then + log_info "Keeping GITEA_RUNNER_REGISTRATION_TOKEN in .env because some runners failed to remove" +elif [[ -n "${GITEA_RUNNER_REGISTRATION_TOKEN:-}" ]]; then save_env_var "GITEA_RUNNER_REGISTRATION_TOKEN" "" log_success "GITEA_RUNNER_REGISTRATION_TOKEN cleared from .env" fi +if $TEARDOWN_FAILED; then + log_error "Phase 3 teardown completed with errors" + exit 1 +fi + log_success "Phase 3 teardown complete"