-
Notifications
You must be signed in to change notification settings - Fork 982
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue 1739: Fixing null reference exception during configuring runner with invalid repo URL or token #1741
Conversation
…repo URL or token
if(response.StatusCode == System.Net.HttpStatusCode.NotFound) | ||
{ | ||
_term.WriteError("Invalid repository URL or register token"); | ||
return StringUtil.ConvertFromJson<GitHubRunnerRegisterToken>(errorResponse); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ConvertFromJson
will return useless data if the errorResponse
is not a contract of GitHubRunnerRegisterToken
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed this in the new commit.
else | ||
{ | ||
_term.WriteError($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}'"); | ||
var errorResponse = await response.Content.ReadAsStringAsync(); | ||
_term.WriteError(errorResponse); | ||
response.EnsureSuccessStatusCode(); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we just try storing the response code and using that to determine if we should throw or not.
var responseStatus = HttpStatusCode.OK;
try
{
var response = await httpClient.PostAsync(githubApiUrl, new StringContent(string.Empty));
responseStatus = response.StatusCode;
if (response.IsSuccessStatusCode)
{
Trace.Info($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}'");
var jsonResponse = await response.Content.ReadAsStringAsync();
return StringUtil.ConvertFromJson<GitHubRunnerRegisterToken>(jsonResponse);
}
else
{
_term.WriteError($"Http response code: {response.StatusCode} from 'POST {githubApiUrl}'");
var errorResponse = await response.Content.ReadAsStringAsync();
_term.WriteError(errorResponse);
response.EnsureSuccessStatusCode();
}
}
catch(Exception ex) when (retryCount < 2 && responseStatus != HttpStatusCode.NotFound)
{
retryCount++;
Trace.Error($"Failed to get JIT runner token -- Atempt: {retryCount}");
Trace.Error(ex);
Trace.Info("Retrying in 5 seconds");
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We may want to add others to this not retry list, and looking at the response code is the easiest way to do that
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, makes sense.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just won't trace delay time there, because it's randomly determined outside of catch.
// Something else bad happened, let's go to our retry logic | ||
response.EnsureSuccessStatusCode(); | ||
|
||
if(response.StatusCode == System.Net.HttpStatusCode.NotFound) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same as above!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
… with invalid repo URL or token (actions#1741) * Fixing null reference exception when configuring runner with invalid repo URL or token * Throw exception instead of ConvertFromJson * Storing the response code
The problem was that the runner crasher with null reference exception during configuring with invalid repository URL or register token.
Closes #1739
After this change, the runner will not crash with a null reference exception but will exit with an appropriate error message.