We destroy the runner when GitHub sends the workflow job completed
webhook event.
Recently, the runner script has gotten stuck a few times due to zombie
processes.
This might be related to GitHub incidents, but we don't have enough
information to confirm it.
https://github.com/actions/runner/issues/3737
Since GitHub servers think the script is still running, they don't stop
it.
Customers can force terminate the runner by clicking the button. This
destroys the underlying virtual machine, causing GitHub servers to lose
connection to the runner and mark the job as failed.