Buildalon Retry Failed Jobs

A GitHub Action to rerun the failed jobs of a finished workflow run when every failure is marked as retryable, such as a transient network error or a busy shared resource.

A step marks a failure as retryable by writing an error annotation whose title is one of the markers:

echo "::error title=transient-failure::Download timed out"

The failed jobs are rerun only when every failed job, other than ignore-jobs, carries a marker. A rerun repeats every failed job, so a single real failure leaves the run failed. The rerun is skipped if the run has moved on to another attempt since it was checked. Cancelled jobs are not failures, so a cancelled run reruns nothing, while jobs cancelled by fail-fast alongside a marked failure are rerun with it.

How to use

workflow

Run it from a workflow_run workflow, which starts only once the watched run has finished, so nothing waits or polls in between.

on:
  workflow_run:
    workflows: [<workflow name>]
    types: [completed]
jobs:
  rerun:
    if: github.event.workflow_run.conclusion == 'failure'
    runs-on: ubuntu-latest
    permissions:
      actions: write # to rerun the failed jobs
      checks: read # to read the failed jobs' annotations
    steps:
      - uses: buildalon/retry-failed-jobs@v1
        with:
          markers: transient-failure

For example, unity-cli marks its retryable failures with unity-license-exhausted and unity-transient-failure.

inputs

namedescriptionrequired
markersComma-separated annotation titles that mark a failure as retryable.true
run-idThe finished run to check.Defaults to the run of a workflow_run event.
run-attemptThe attempt of that run that finished.Defaults to the attempt of a workflow_run event.
max-attemptsThe last attempt that may be rerun; later attempts are left failed.Defaults to 3.
ignore-jobsComma-separated names of jobs that only report other jobs’ results, such as an aggregate check.Defaults to none.
delay-secondsSeconds to wait before the rerun, such as for a shared resource to be released.Defaults to 0.
github-tokenToken with actions: write and checks: read on the repository.Defaults to ${{ github.token }}.

outputs

namedescription
reruntrue when the failed jobs were rerun.

Development

Requires Node.js 24.

npm run build      # clean install + bundle to dist/
npm run typecheck  # tsc --noEmit

Commit the rebuilt dist/ with your changes.

© 2026 Virtual Maker Corporation