Skip to content

Commit 477e463

Browse files
authored
Merge pull request #7 from gruntwork-io/feat/adding-retry-to-login
feat: Adding retry to login
2 parents 42a7a90 + c972640 commit 477e463

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

action.yml

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,35 @@ runs:
2929
3030
const idToken = await core.getIDToken(aud)
3131
32-
const providerTokenResponse = await fetch(`${apiBaseURL}/tokens/auth/login`, {
33-
method: "POST",
34-
headers: {
35-
"Authorization": `Bearer ${idToken}`
32+
const isRetryableError = (response) => {
33+
return response.status >= 500 || response.status === 429
34+
}
35+
36+
const loginWithRetries = async (tries) => {
37+
const providerTokenResponse = await fetch(`${apiBaseURL}/tokens/auth/login`, {
38+
method: "POST",
39+
headers: {
40+
"Authorization": `Bearer ${idToken}`
41+
}
42+
})
43+
44+
if (providerTokenResponse.ok) {
45+
return providerTokenResponse
46+
} else {
47+
if (tries > 0 && isRetryableError(providerTokenResponse)) {
48+
console.log(`Failed to get provider token: ${providerTokenResponse.status} ${providerTokenResponse.statusText}. Retrying...`)
49+
50+
// Random backoff between 0 and 3 seconds
51+
await new Promise(resolve => setTimeout(resolve, Math.floor(Math.random() * 3000)))
52+
53+
return loginWithRetries(tries - 1)
54+
} else {
55+
return providerTokenResponse
56+
}
3657
}
37-
})
58+
}
59+
60+
const providerTokenResponse = await loginWithRetries(3)
3861
3962
if (providerTokenResponse.ok) {
4063
const providerTokenJson = await providerTokenResponse.json()

0 commit comments

Comments
 (0)