Skip to content
You're viewing an older version of this GitHub Action. Do you want to see the latest version instead?
activity

GitHub Action

retry action

v2.1.0

retry action

activity

retry action

Retries an Github Action step on failure

Installation

Copy and paste the following snippet into your .yml file.

              

- name: retry action

uses: Wandalen/[email protected]

Learn more about this action in Wandalen/wretry.action

Choose a version

Stand With Ukraine

action::retry status stable

Retries a Github Action step or command on failure.

Works with either shell commands or other actions to retry.

Why

Github actions which use the Internet connection can fail when connection is lost :

Run actions/setup-node@v1
connect ETIMEDOUT 104.20.22.46:443
Waiting 15 seconds before trying again
connect ETIMEDOUT 104.20.22.46:443
Waiting 18 seconds before trying again
Error: connect ETIMEDOUT 104.20.22.46:443

It is a cause of failed jobs. For this case, the action wretry.action can retry the action immediately after fail or with some delay. And if the connection will be restored, then the job will continue the normal run.

Features

  • Retries Github JavaScript actions. The action can be an action repository that is not published on Marketplace.
  • Retries Github Docker actions that use Dockerfile as an image.
  • Retries shell commands. Uses default shells to run commands.
  • Can retry single action or single command ( multiline command ), but not both simultaneously.
  • Retries main, pre and post stages of external actions.
  • Always has pre and post stages. If external action has pre or/and post stage, then action run it also.
  • Handles no conditions in external actions ( fields pre-if and post-if ). All stages of external action will be performed.
  • Resolves external action default inputs from next contexts : github, env, job, matrix, inputs.
  • Retries actions with defined number of attempts ( default is 2 ).
  • Retries actions with defined delay between attempts ( default is 0 ).

Inputs

action

The name of a Github action. Format is {owner}/{repo_name}@{ref}.

Attention. Action requires defined action or command. If the fields action and commands are defined simultaneously, then action will throw error.

command

The command to run. The action runs the command in the default shell.

Attention. Action requires defined action or command. If the fields action and commands are defined simultaneously, then action will throw error.

with

An options map for Github action. It is a multiline string with pairs key : value.

An example of declaration of option with single line value :

- uses: Wandalen/wretry.action@master
  with:
    action: owner/action-repo@version
    with: |
      option1: value
      option2: value

An example of declaration of option with multiline string :

- uses: Wandalen/wretry.action@master
  with:
    action: owner/action-repo@version
    with: |
      option1: |
        value1
        value2
          value3
      option2: value

current_path

Setup working directory for the action. Works with only commands. Default is github.workspace path.

attempt_limit

Set number of attempts. Default is 2.

attempt_delay

Set delay between attempts in ms. Default is 0.

time_out

Set time out in ms for entire step including all retries. By default actions sets no time out.

github_token

A token to access private actions. Does not required for public actions.

Outputs

The action exposes single output named outputs. It collects all the outputs from the action/command in JSON map.

How to use outputs from the external action

To access the value from an external action outputs parse the wretry.action output and select required key. To parse the outputs use builtin Github Actions function fromJSON.

Let's look at an example:

jobs:
  job1:
    runs-on: ubuntu-latest
    outputs:
      # extract `outputs` from a step
      out: ${{ steps.my-action.outputs.outputs }}
    steps:
      - id: my-action
        uses: Wandalen/[email protected]
        with:
          attempt_limit: 3
          action: user/action@version
          with: |
            foo: bar
  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
      - env:
          # parse full map and store it to OUPUT1
          OUTPUT1: ${{ fromJSON( needs.job1.outputs.out ) }}
          # parse full map and extract field `foo`
          OUTPUT2: ${{ fromJSON( needs.job1.outputs.out ).foo }}
        run: echo "$OUTPUT1 $OUTPUT2"

To setup job output we access output outputs of the step my-action. In the job job2 we parse this output to JSON. The environment variable OUPUT1 represents full JSON and the variable OUPUT2 represents key foo of the parsed JSON.

Example usage

Retry action

- uses: Wandalen/wretry.action@master
  with:
    action: action/[email protected]
    with: |
      node-version: 14.x
      architecture: x64
    attempt_limit: 3
    attempt_delay: 2000

Retry command

- uses: Wandalen/wretry.action@master
  with:
    command: npm i
    attempt_limit: 3
    attempt_delay: 2000

Development and contributing

To build compiled dependencies utility willbe is required. To install utility run :

npm i -g 'willbe@latest'

willbe is not required to use the action in your project as submodule.