Add retry mechanism in fetchPolicy (#263)

This commit is contained in:
jatin 2023-03-30 07:50:18 +05:30 committed by GitHub
commit 840250fc42
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 32 deletions

40
dist/pre/index.js vendored
View file

@ -69116,19 +69116,27 @@ function fetchPolicy(owner, policyName, idToken) {
let headers = {};
headers["Authorization"] = `Bearer ${idToken}`;
headers["Source"] = "github-actions";
let response = yield httpClient.getJson(policyEndpoint, headers);
if (response.statusCode !== 200) {
// policy doesn't exists
switch (response.statusCode) {
case 400:
throw new Error("[PolicyFetch: policy doesn't exists");
case 401:
throw new Error("[PolicyFetch]: supplied id-token can't be used for authentication");
case 403:
throw new Error("[PolicyFetch]: access to policy not allowed");
let response = undefined;
let err = undefined;
let retry = 0;
while (retry < 3) {
try {
console.log(`Attempt: ${retry + 1}`);
response = yield httpClient.getJson(policyEndpoint, headers);
break;
}
catch (e) {
err = e;
}
retry += 1;
yield sleep(1000);
}
if (response === undefined && err !== undefined) {
throw new Error(`[Policy Fetch] ${err}`);
}
else {
return response.result;
}
return response.result;
});
}
function mergeConfigs(localConfig, remoteConfig) {
@ -69146,6 +69154,11 @@ function mergeConfigs(localConfig, remoteConfig) {
}
return localConfig;
}
function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
// EXTERNAL MODULE: ./node_modules/@actions/cache/lib/internal/cacheHttpClient.js
var cacheHttpClient = __nccwpck_require__(8245);
@ -69206,6 +69219,7 @@ var setup_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _ar
};
let policyName = lib_core.getInput("policy");
if (policyName !== "") {
console.log(`Fetching policy from API with name: ${policyName}`);
try {
let idToken = yield lib_core.getIDToken();
let result = yield fetchPolicy(github.context.repo.owner, policyName, idToken);
@ -69306,7 +69320,7 @@ var setup_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _ar
}
break;
}
yield sleep(300);
yield setup_sleep(300);
} // The file *does* exist
else {
// Read the file
@ -69320,7 +69334,7 @@ var setup_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _ar
lib_core.setFailed(error.message);
}
}))();
function sleep(ms) {
function setup_sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});

File diff suppressed because one or more lines are too long

View file

@ -8,6 +8,7 @@ export async function fetchPolicy(
policyName: string,
idToken: string
): Promise<PolicyResponse> {
if (idToken === "") {
throw new Error("[PolicyFetch]: id-token in empty");
}
@ -20,24 +21,30 @@ export async function fetchPolicy(
headers["Authorization"] = `Bearer ${idToken}`;
headers["Source"] = "github-actions";
let response = await httpClient.getJson<PolicyResponse>(
policyEndpoint,
headers
);
if (response.statusCode !== 200) {
// policy doesn't exists
switch (response.statusCode) {
case 400:
throw new Error("[PolicyFetch: policy doesn't exists");
case 401:
throw new Error("[PolicyFetch]: supplied id-token can't be used for authentication");
case 403:
throw new Error("[PolicyFetch]: access to policy not allowed")
let response = undefined;
let err = undefined;
let retry = 0;
while(retry < 3){
try{
console.log(`Attempt: ${retry+1}`)
response = await httpClient.getJson<PolicyResponse>(
policyEndpoint,
headers
);
break;
}catch(e){
err = e
}
retry += 1
await sleep(1000);
}
if(response === undefined && err !== undefined){
throw new Error(`[Policy Fetch] ${err}`)
}else{
return response.result;
}
return response.result;
}
export function mergeConfigs(
@ -60,3 +67,9 @@ export function mergeConfigs(
return localConfig;
}
function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}

View file

@ -55,6 +55,7 @@ import * as utils from '@actions/cache/lib/internal/cacheUtils'
let policyName = core.getInput("policy");
if (policyName !== "") {
console.log(`Fetching policy from API with name: ${policyName}`);
try {
let idToken: string = await core.getIDToken()
let result: PolicyResponse = await fetchPolicy(