Retry
A simple, stateless, functional mechanism to perform actions repetitively until successful.
Install / Use
/learn @Rican7/RetryREADME
retry
A simple, stateless, functional mechanism to perform actions repetitively until successful.
Project Status
This project is currently in "pre-release". While the code is heavily tested, the API may change. Use a tagged version or vendor this dependency if you plan on using it.
That said, this code has been used in production without issue for years, and has been used by some relatively high-profile projects/codebases.
Examples
Basic
retry.Retry(func(attempt uint) error {
return nil // Do something that may or may not cause an error
})
File Open
const logFilePath = "/var/log/myapp.log"
var logFile *os.File
err := retry.Retry(func(attempt uint) error {
var err error
logFile, err = os.Open(logFilePath)
return err
})
if err != nil {
log.Fatalf("Unable to open file %q with error %q", logFilePath, err)
}
logFile.Chdir() // Do something with the file
HTTP request with strategies and backoff
var response *http.Response
action := func(attempt uint) error {
var err error
response, err = http.Get("https://api.github.com/repos/Rican7/retry")
if err == nil && response != nil && response.StatusCode > 200 {
err = fmt.Errorf("failed to fetch (attempt #%d) with status code: %d", attempt, response.StatusCode)
}
return err
}
err := retry.Retry(
action,
strategy.Limit(5),
strategy.Backoff(backoff.Fibonacci(10*time.Millisecond)),
)
if err != nil {
log.Fatalf("Failed to fetch repository with error %q", err)
}
Retry with backoff jitter
action := func(attempt uint) error {
return errors.New("something happened")
}
seed := time.Now().UnixNano()
random := rand.New(rand.NewSource(seed))
retry.Retry(
action,
strategy.Limit(5),
strategy.BackoffWithJitter(
backoff.BinaryExponential(10*time.Millisecond),
jitter.Deviation(random, 0.5),
),
)
Related Skills
trello
348.5kManage Trello boards, lists, and cards via the Trello REST API.
mcporter
348.5kUse the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.
11_task_management
Plantilla de Gestión de Tareas Información General del Sprint - Número de Sprint : [Número] - Fechas : [Fecha inicio - Fecha fin] - Objetivo del Sprint : [Descripción del objetivo princ
ccpm
7.9kProject management skill system for Agents that uses GitHub Issues and Git worktrees for parallel agent execution.
