mirror of
https://github.com/nick-fields/retry.git
synced 2026-02-10 07:05:29 +00:00
Compare commits
3 Commits
v3.0.0
...
nrf/add-te
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
634988cced | ||
|
|
cc15f2ffff | ||
|
|
db9d6ef914 |
84
.github/workflows/ci_cd.yml
vendored
84
.github/workflows/ci_cd.yml
vendored
@@ -14,11 +14,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Run Unit Tests
|
||||
@@ -33,11 +33,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
@@ -143,11 +143,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: env-vars-passed-through
|
||||
@@ -164,11 +164,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Test 100MiB of output can be processed
|
||||
@@ -195,11 +195,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: retry_on_exit_code (with expected error code)
|
||||
@@ -243,11 +243,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: happy-path (continue_on_error)
|
||||
@@ -290,11 +290,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
@@ -326,11 +326,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
@@ -369,11 +369,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
@@ -399,11 +399,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
@@ -430,11 +430,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
@@ -465,11 +465,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
@@ -495,11 +495,11 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Powershell test
|
||||
@@ -571,11 +571,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 16
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Release
|
||||
|
||||
@@ -50,5 +50,5 @@ outputs:
|
||||
exit_error:
|
||||
description: The final error returned by the command
|
||||
runs:
|
||||
using: 'node20'
|
||||
using: 'node16'
|
||||
main: 'dist/index.js'
|
||||
|
||||
28725
dist/index.js
vendored
28725
dist/index.js
vendored
File diff suppressed because one or more lines are too long
16468
package-lock.json
generated
16468
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -37,7 +37,7 @@
|
||||
"@types/node": "^16.11.7",
|
||||
"@typescript-eslint/eslint-plugin": "^5.32.0",
|
||||
"@typescript-eslint/parser": "^5.32.0",
|
||||
"@vercel/ncc": "^0.38.1",
|
||||
"@zeit/ncc": "^0.20.5",
|
||||
"dotenv": "8.2.0",
|
||||
"eslint": "^8.21.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
|
||||
21
src/index.ts
21
src/index.ts
@@ -11,9 +11,16 @@ const OUTPUT_TOTAL_ATTEMPTS_KEY = 'total_attempts';
|
||||
const OUTPUT_EXIT_CODE_KEY = 'exit_code';
|
||||
const OUTPUT_EXIT_ERROR_KEY = 'exit_error';
|
||||
|
||||
let exit: number;
|
||||
let done: boolean;
|
||||
|
||||
class ErrorWithCode extends Error {
|
||||
constructor(readonly message: string, readonly code: number) {
|
||||
super();
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
|
||||
function getExecutable(inputs: Inputs): string {
|
||||
if (!inputs.shell) {
|
||||
return OS === 'win32' ? 'powershell' : 'bash';
|
||||
@@ -71,7 +78,7 @@ async function runCmd(attempt: number, inputs: Inputs) {
|
||||
const end_time = Date.now() + getTimeout(inputs);
|
||||
const executable = getExecutable(inputs);
|
||||
|
||||
exit = 0;
|
||||
let exit = 0;
|
||||
done = false;
|
||||
let timeout = false;
|
||||
|
||||
@@ -117,10 +124,10 @@ async function runCmd(attempt: number, inputs: Inputs) {
|
||||
timeout = true;
|
||||
kill(child.pid);
|
||||
await retryWait(ms.seconds(inputs.retry_wait_seconds));
|
||||
throw new Error(`Timeout of ${getTimeout(inputs)}ms hit`);
|
||||
throw new ErrorWithCode(`Timeout of ${getTimeout(inputs)}ms hit`, exit);
|
||||
} else if (exit > 0) {
|
||||
await retryWait(ms.seconds(inputs.retry_wait_seconds));
|
||||
throw new Error(`Child_process exited with error code ${exit}`);
|
||||
throw new ErrorWithCode(`Child_process exited with error code ${exit}`, exit);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
@@ -138,8 +145,9 @@ async function runAction(inputs: Inputs) {
|
||||
break;
|
||||
// eslint-disable-next-line
|
||||
} catch (error: any) {
|
||||
const exit = error instanceof ErrorWithCode ? error.code : 1;
|
||||
if (attempt === inputs.max_attempts) {
|
||||
throw new Error(`Final attempt failed. ${error.message}`);
|
||||
throw new ErrorWithCode(`Final attempt failed. ${error.message}`, exit);
|
||||
} else if (!done && inputs.retry_on === 'error') {
|
||||
// error: timeout
|
||||
throw error;
|
||||
@@ -168,8 +176,7 @@ runAction(inputs)
|
||||
process.exit(0); // success
|
||||
})
|
||||
.catch((err) => {
|
||||
// exact error code if available, otherwise just 1
|
||||
const exitCode = exit > 0 ? exit : 1;
|
||||
const exitCode = err instanceof ErrorWithCode ? err.code : 1;
|
||||
|
||||
if (inputs.continue_on_error) {
|
||||
warning(err.message);
|
||||
|
||||
@@ -3,11 +3,6 @@ import { getHeapStatistics } from 'v8';
|
||||
|
||||
import { wait } from './util';
|
||||
|
||||
// otherwise, TypeError: Cannot assign to read only property 'performance' of object '[object global]'
|
||||
Object.defineProperty(global, 'performance', {
|
||||
writable: true,
|
||||
});
|
||||
|
||||
// mocks the setTimeout function, see https://jestjs.io/docs/timer-mocks
|
||||
jest.useFakeTimers();
|
||||
jest.spyOn(global, 'setTimeout');
|
||||
|
||||
Reference in New Issue
Block a user