Include the HTTP status code in jit error

This commit is contained in:
Dhawal Seth 2026-01-21 13:33:50 -08:00
parent 02aa70a64a
commit e9bdb88186
2 changed files with 33 additions and 1 deletions

View File

@ -274,6 +274,10 @@ func (c *Client) Identifier() string {
func (c *Client) Do(req *http.Request) (*http.Response, error) {
resp, err := c.Client.Do(req)
if err != nil {
// If we have a response even with an error, include the status code
if resp != nil {
return nil, fmt.Errorf("client request failed with status code %d: %w", resp.StatusCode, err)
}
return nil, fmt.Errorf("client request failed: %w", err)
}
@ -856,7 +860,8 @@ func (c *Client) GenerateJitRunnerConfig(ctx context.Context, jitRunnerSetting *
resp, err := c.Do(req)
if err != nil {
return nil, fmt.Errorf("failed to issue the request: %w", err)
// Include the URL and method in the error for better debugging
return nil, fmt.Errorf("failed to issue the request %s %s: %w", req.Method, req.URL.String(), err)
}
if resp.StatusCode != http.StatusOK {

View File

@ -58,4 +58,31 @@ func TestGenerateJitRunnerConfig(t *testing.T) {
assert.NotNil(t, err)
assert.Equalf(t, actualRetry, expectedRetry, "A retry was expected after the first request but got: %v", actualRetry)
})
t.Run("Error includes HTTP method and URL when request fails", func(t *testing.T) {
runnerSettings := &actions.RunnerScaleSetJitRunnerSetting{}
server := newActionsServer(t, http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
client, err := actions.NewClient(
server.configURLForOrg("my-org"),
auth,
actions.WithRetryMax(0), // No retries to get immediate error
actions.WithRetryWaitMax(1*time.Millisecond),
)
require.NoError(t, err)
_, err = client.GenerateJitRunnerConfig(ctx, runnerSettings, 1)
require.NotNil(t, err)
// Verify error message includes HTTP method and URL for better debugging
assert.Contains(t, err.Error(), "POST")
assert.Contains(t, err.Error(), "generatejitconfig")
// The status code will be included through ParseActionsErrorFromResponse
var actionsErr *actions.ActionsError
if assert.ErrorAs(t, err, &actionsErr) {
assert.Equal(t, http.StatusInternalServerError, actionsErr.StatusCode)
}
})
}