mirror of
https://github.com/nick-fields/retry.git
synced 2026-02-10 07:05:29 +00:00
Compare commits
8 Commits
master
...
anthonyc/m
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e4fe2b191 | ||
|
|
676683ec60 | ||
|
|
772a768088 | ||
|
|
6e8635d64a | ||
|
|
2d8f74008e | ||
|
|
4d604b1776 | ||
|
|
29e1861bc1 | ||
|
|
db59b2620d |
108
.github/workflows/ci_cd.yml
vendored
108
.github/workflows/ci_cd.yml
vendored
@@ -313,6 +313,114 @@ jobs:
|
|||||||
expected: failure
|
expected: failure
|
||||||
actual: ${{ steps.wrong_shell.outcome }}
|
actual: ${{ steps.wrong_shell.outcome }}
|
||||||
|
|
||||||
|
ci_multiline_tests:
|
||||||
|
name: Run Tests (Multiline)
|
||||||
|
if: startsWith(github.ref, 'refs/heads')
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Multi-line 2 commands non existent first command
|
||||||
|
id: multi_line_2_commands_non_existent_first_command
|
||||||
|
uses: ./
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
shell: bash
|
||||||
|
timeout_seconds: 1
|
||||||
|
max_attempts: 2
|
||||||
|
command: |
|
||||||
|
i-do-not-exist && \
|
||||||
|
echo "i-exist"
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
expected: 2
|
||||||
|
actual: ${{ steps.multi_line_2_commands_non_existent_first_command.outputs.total_attempts }}
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
expected: 'Final attempt failed'
|
||||||
|
actual: ${{ steps.multi_line_2_commands_non_existent_first_command.outputs.exit_error }}
|
||||||
|
comparison: contains
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
# The 127 error code indicates “command not found”.
|
||||||
|
expected: '127'
|
||||||
|
actual: ${{ steps.multi_line_2_commands_non_existent_first_command.outputs.exit_code }}
|
||||||
|
comparison: contains
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
expected: 'i-exist'
|
||||||
|
actual: ${{ steps.multi_line_2_commands_non_existent_first_command.outputs.exit_error }}
|
||||||
|
comparison: notContains
|
||||||
|
|
||||||
|
- name: Multi-line 2 commands happy path test
|
||||||
|
id: multi_line_2_commands_happy_path
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
shell: bash
|
||||||
|
timeout_seconds: 1
|
||||||
|
max_attempts: 2
|
||||||
|
command: |
|
||||||
|
echo "foo" && \
|
||||||
|
echo "bar"
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
expected: 1
|
||||||
|
actual: ${{ steps.multi_line_2_commands_happy_path.outputs.total_attempts }}
|
||||||
|
|
||||||
|
- name: Conventional multi-line non existent first command
|
||||||
|
id: conventional_multi_line_non_existent_first_command
|
||||||
|
uses: ./
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
shell: bash
|
||||||
|
timeout_seconds: 1
|
||||||
|
max_attempts: 2
|
||||||
|
command: |
|
||||||
|
i-do-not-exist
|
||||||
|
echo "i-exist"
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
expected: 2
|
||||||
|
actual: ${{ steps.conventional_multi_line_non_existent_first_command.outputs.total_attempts }}
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
expected: 'Final attempt failed'
|
||||||
|
actual: ${{ steps.conventional_multi_line_non_existent_first_command.outputs.exit_error }}
|
||||||
|
comparison: contains
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
# The 127 error code indicates “command not found”.
|
||||||
|
expected: '127'
|
||||||
|
actual: ${{ steps.conventional_multi_line_non_existent_first_command.outputs.exit_code }}
|
||||||
|
comparison: contains
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
expected: 'i-exist'
|
||||||
|
actual: ${{ steps.conventional_multi_line_non_existent_first_command.outputs.exit_error }}
|
||||||
|
comparison: notContains
|
||||||
|
|
||||||
|
- name: Conventional multi-line happy path test
|
||||||
|
id: conventional_multi_line_happy_path
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
shell: bash
|
||||||
|
timeout_seconds: 1
|
||||||
|
max_attempts: 2
|
||||||
|
command: |
|
||||||
|
echo "foo"
|
||||||
|
echo "bar"
|
||||||
|
- uses: nick-invision/assert-action@v1
|
||||||
|
with:
|
||||||
|
expected: 1
|
||||||
|
actual: ${{ steps.conventional_multi_line_happy_path.outputs.total_attempts }}
|
||||||
|
|
||||||
ci_windows:
|
ci_windows:
|
||||||
name: Run Windows Tests
|
name: Run Windows Tests
|
||||||
if: startsWith(github.ref, 'refs/heads')
|
if: startsWith(github.ref, 'refs/heads')
|
||||||
|
|||||||
10
dist/index.js
vendored
10
dist/index.js
vendored
@@ -708,11 +708,15 @@ function getTimeout() {
|
|||||||
}
|
}
|
||||||
function getExecutable() {
|
function getExecutable() {
|
||||||
if (!SHELL) {
|
if (!SHELL) {
|
||||||
return OS === 'win32' ? 'powershell' : 'bash';
|
return OS === 'win32' ? 'powershell' : 'bash -e';
|
||||||
}
|
}
|
||||||
var executable;
|
var executable;
|
||||||
switch (SHELL) {
|
switch (SHELL) {
|
||||||
case "bash":
|
case "bash": {
|
||||||
|
// -e to not ignore errors, but exit with non-zero code.
|
||||||
|
executable = "bash -e";
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "python":
|
case "python":
|
||||||
case "pwsh": {
|
case "pwsh": {
|
||||||
executable = SHELL;
|
executable = SHELL;
|
||||||
@@ -776,7 +780,7 @@ function runCmd(attempt) {
|
|||||||
executable = getExecutable();
|
executable = getExecutable();
|
||||||
exit = 0;
|
exit = 0;
|
||||||
done = false;
|
done = false;
|
||||||
core_1.debug("Running command " + COMMAND + " on " + OS + " using shell " + executable);
|
core_1.debug("Running command " + COMMAND + " on " + OS + " using shell \"" + executable + "\"");
|
||||||
child = attempt > 1 && NEW_COMMAND_ON_RETRY
|
child = attempt > 1 && NEW_COMMAND_ON_RETRY
|
||||||
? child_process_1.exec(NEW_COMMAND_ON_RETRY, { 'shell': executable })
|
? child_process_1.exec(NEW_COMMAND_ON_RETRY, { 'shell': executable })
|
||||||
: child_process_1.exec(COMMAND, { 'shell': executable });
|
: child_process_1.exec(COMMAND, { 'shell': executable });
|
||||||
|
|||||||
10
src/index.ts
10
src/index.ts
@@ -78,12 +78,16 @@ function getTimeout(): number {
|
|||||||
|
|
||||||
function getExecutable(): string {
|
function getExecutable(): string {
|
||||||
if (!SHELL) {
|
if (!SHELL) {
|
||||||
return OS === 'win32' ? 'powershell' : 'bash';
|
return OS === 'win32' ? 'powershell' : 'bash -e';
|
||||||
}
|
}
|
||||||
|
|
||||||
let executable: string;
|
let executable: string;
|
||||||
switch (SHELL) {
|
switch (SHELL) {
|
||||||
case "bash":
|
case "bash": {
|
||||||
|
// -e to not ignore errors, but exit with non-zero code.
|
||||||
|
executable = "bash -e";
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "python":
|
case "python":
|
||||||
case "pwsh": {
|
case "pwsh": {
|
||||||
executable = SHELL;
|
executable = SHELL;
|
||||||
@@ -131,7 +135,7 @@ async function runCmd(attempt: number) {
|
|||||||
exit = 0;
|
exit = 0;
|
||||||
done = false;
|
done = false;
|
||||||
|
|
||||||
debug(`Running command ${COMMAND} on ${OS} using shell ${executable}`)
|
debug(`Running command ${COMMAND} on ${OS} using shell "${executable}"`)
|
||||||
var child = attempt > 1 && NEW_COMMAND_ON_RETRY
|
var child = attempt > 1 && NEW_COMMAND_ON_RETRY
|
||||||
? exec(NEW_COMMAND_ON_RETRY, { 'shell': executable })
|
? exec(NEW_COMMAND_ON_RETRY, { 'shell': executable })
|
||||||
: exec(COMMAND, { 'shell': executable });
|
: exec(COMMAND, { 'shell': executable });
|
||||||
|
|||||||
Reference in New Issue
Block a user