🔄 Step-Level Retry Action
Retries a step while preserving its full context and environment.
🚀 Usage
Basic Usage
Retry failed step up to 3 times (default):
steps:
- uses: ultralytics/actions/retry@main
with:
run: python train.py
Advanced Usage
Full configuration with custom retries, timeout, backoff, and jitter:
steps:
- uses: ultralytics/actions/retry@main
with:
run: |
python setup.py install
pytest tests/
retries: 2 # Retry twice after initial attempt (3 total runs)
timeout_minutes: 30 # Total timeout across all attempts
retry_delay_seconds: 10 # Base delay between retries
backoff: exponential # exponential (10s, 20s, 40s, ...) or fixed
jitter: true # Randomize delay to 80-120% to avoid thundering herd
shell: bash # Use python or bash shell
Python Shell Example
steps:
- uses: ultralytics/actions/retry@main
with:
shell: python
retries: 5
run: |
import requests
response = requests.get('https://api.example.com/data')
response.raise_for_status()
📋 Inputs
| Input | Description | Required | Default |
|---|---|---|---|
run |
Command to run | Yes | - |
retries |
Number of retry attempts after initial run | No | 3 |
timeout_minutes |
Maximum total time in minutes, checked between attempts | No | 360 |
retry_delay_seconds |
Base delay between retries in seconds | No | 10 |
backoff |
Backoff strategy: exponential (base * 2^n) or fixed |
No | exponential |
jitter |
Randomize delay to 80-120% of value to avoid thundering herd | No | true |
shell |
Shell to use (bash or python) |
No | bash |
✨ Features
- Preserves environment variables and step context
- Exponential backoff with ±20% jitter (best-practice defaults)
- Configurable total timeout across all attempts (individual sleeps auto-capped to remaining budget)
- GitHub Actions grouping for retry attempts
- Supports both Bash and Python shells