Exit hosted runner cleanly during deprovisioning. (#3755)

This commit is contained in:
Tingluo Huang
2025-03-18 10:33:40 -04:00
committed by GitHub
parent 6b08f23b6c
commit a0ba8fd399
7 changed files with 41 additions and 1 deletions

View File

@@ -93,7 +93,7 @@ namespace GitHub.Runner.Common
public bool ShouldRetryException(Exception ex)
{
if (ex is AccessDeniedException || ex is RunnerNotFoundException)
if (ex is AccessDeniedException || ex is RunnerNotFoundException || ex is HostedRunnerDeprovisionedException)
{
return false;
}

View File

@@ -249,6 +249,11 @@ namespace GitHub.Runner.Listener
Trace.Info("Runner OAuth token has been revoked. Unable to pull message.");
throw;
}
catch (HostedRunnerDeprovisionedException)
{
Trace.Info("Hosted runner has been deprovisioned.");
throw;
}
catch (AccessDeniedException e) when (e.ErrorCode == 1)
{
throw;

View File

@@ -304,6 +304,11 @@ namespace GitHub.Runner.Listener
_accessTokenRevoked = true;
throw;
}
catch (HostedRunnerDeprovisionedException)
{
Trace.Info("Hosted runner has been deprovisioned.");
throw;
}
catch (AccessDeniedException e) when (e.ErrorCode == 1)
{
throw;

View File

@@ -697,6 +697,10 @@ namespace GitHub.Runner.Listener
{
Trace.Info("Runner OAuth token has been revoked. Shutting down.");
}
catch (HostedRunnerDeprovisionedException)
{
Trace.Info("Hosted runner has been deprovisioned. Shutting down.");
}
return Constants.Runner.ReturnCode.Success;
}

View File

@@ -7,5 +7,6 @@ namespace GitHub.Actions.RunService.WebApi
{
public const string RunnerNotFound = "RunnerNotFound";
public const string RunnerVersionTooOld = "RunnerVersionTooOld";
public const string HostedRunnerDeprovisioned = "HostedRunnerDeprovisioned";
}
}

View File

@@ -122,6 +122,8 @@ namespace GitHub.Actions.RunService.WebApi
{
ErrorCode = 1
};
case BrokerErrorKind.HostedRunnerDeprovisioned:
throw new HostedRunnerDeprovisionedException(brokerError.Message);
default:
break;
}

View File

@@ -0,0 +1,23 @@
using System;
namespace GitHub.Services.WebApi
{
[Serializable]
public sealed class HostedRunnerDeprovisionedException : Exception
{
public HostedRunnerDeprovisionedException()
: base()
{
}
public HostedRunnerDeprovisionedException(String message)
: base(message)
{
}
public HostedRunnerDeprovisionedException(String message, Exception innerException)
: base(message, innerException)
{
}
}
}