@@ -90,7 +90,7 @@ func (c *httpGitHubRunnerClient) RemoveRunner(ctx context.Context, owner, repo s
9090 return errors .New ("runner_id must be positive" )
9191 }
9292 endpoint := fmt .Sprintf ("%s/repos/%s/%s/actions/runners/%d" , c .baseURL , url .PathEscape (owner ), url .PathEscape (repo ), runnerID )
93- return c .do (ctx , http . MethodDelete , endpoint , nil , token , http . StatusNoContent , nil )
93+ return c .doRunnerDelete (ctx , endpoint , token )
9494}
9595
9696func (c * httpGitHubRunnerClient ) OrgRegistrationToken (ctx context.Context , organization , token string ) (GitHubRunnerRegistrationToken , error ) {
@@ -110,7 +110,7 @@ func (c *httpGitHubRunnerClient) RemoveOrgRunner(ctx context.Context, organizati
110110 return errors .New ("runner_id must be positive" )
111111 }
112112 endpoint := fmt .Sprintf ("%s/orgs/%s/actions/runners/%d" , c .baseURL , url .PathEscape (organization ), runnerID )
113- return c .do (ctx , http . MethodDelete , endpoint , nil , token , http . StatusNoContent , nil )
113+ return c .doRunnerDelete (ctx , endpoint , token )
114114}
115115
116116func (c * httpGitHubRunnerClient ) PreflightOrg (ctx context.Context , req GitHubRunnerProviderPreflightRequest , token string ) (GitHubRunnerProviderPreflight , error ) {
@@ -190,6 +190,15 @@ func (c *httpGitHubRunnerClient) do(ctx context.Context, method, endpoint string
190190}
191191
192192func (c * httpGitHubRunnerClient ) doRaw (ctx context.Context , method , endpoint string , body any , token string , wantStatus int , out any ) (http.Header , error ) {
193+ return c .doRawAllowed (ctx , method , endpoint , body , token , []int {wantStatus }, out )
194+ }
195+
196+ func (c * httpGitHubRunnerClient ) doRunnerDelete (ctx context.Context , endpoint , token string ) error {
197+ _ , err := c .doRawAllowed (ctx , http .MethodDelete , endpoint , nil , token , []int {http .StatusNoContent , http .StatusNotFound }, nil )
198+ return err
199+ }
200+
201+ func (c * httpGitHubRunnerClient ) doRawAllowed (ctx context.Context , method , endpoint string , body any , token string , wantStatuses []int , out any ) (http.Header , error ) {
193202 if strings .TrimSpace (token ) == "" {
194203 return nil , errors .New ("github token is required" )
195204 }
@@ -221,11 +230,19 @@ func (c *httpGitHubRunnerClient) doRaw(ctx context.Context, method, endpoint str
221230 return nil , fmt .Errorf ("github runner request failed: %w" , err )
222231 }
223232 defer resp .Body .Close ()
224- if resp .StatusCode != wantStatus {
233+ ok := false
234+ for _ , status := range wantStatuses {
235+ if resp .StatusCode == status {
236+ ok = true
237+ break
238+ }
239+ }
240+ if ! ok {
225241 limited , _ := io .ReadAll (io .LimitReader (resp .Body , 2048 ))
226242 return nil , fmt .Errorf ("github runner request returned %s: %s" , resp .Status , strings .TrimSpace (string (limited )))
227243 }
228244 if out == nil {
245+ _ , _ = io .Copy (io .Discard , resp .Body )
229246 return resp .Header , nil
230247 }
231248 if err := json .NewDecoder (resp .Body ).Decode (out ); err != nil {
0 commit comments