mirror of
https://github.com/step-security/harden-runner.git
synced 2026-06-07 03:17:07 +00:00
Add retry mechanism in fetchPolicy (#263)
This commit is contained in:
parent
61c2ffb99a
commit
840250fc42
4 changed files with 60 additions and 32 deletions
40
dist/pre/index.js
vendored
40
dist/pre/index.js
vendored
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
2
dist/pre/index.js.map
vendored
2
dist/pre/index.js.map
vendored
File diff suppressed because one or more lines are too long
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue