Description
Command.Retry
This module defines a `Retry` type and a `build` function for configuring retry behavior in Buildkite command steps.
Types
`Retry.Type`
The `Retry.Type` represents a retry configuration with the following fields:
- `exit_status`: Specifies the exit status that triggers a retry. It can be:
- `Code`: An integer exit code.
- `Any`: A wildcard for any exit code.
- `limit`: An optional natural number specifying the maximum number of retries.
`Retry.default.limit`
The default value for the `limit` field, which is `None Natural`.
Functions
`build`
The `build` function constructs a retry configuration for a Buildkite command step.
Parameters:
- `flake_retry_limit`: An optional natural number specifying the retry limit for flaky tests.
- `retries`: A list of additional retry configurations of type `Retry.Type`.
Returns:
A record with the following fields:
- `automatic`: A list of automatic retry configurations (`B/Retry.ListAutomaticRetry/Type`), derived from the provided `retries` and default retry rules.
- `manual`: A manual retry configuration (`B/Manual.Manual/Type`) with default settings.
Source
let Prelude = ../External/Prelude.dhall
let B = ../External/Buildkite.dhall
let List/map = Prelude.List.map
let Optional/map = Prelude.Optional.map
let B/ExitStatus = B.definitions/automaticRetry/properties/exit_status/Type
let B/AutoRetryChunk = B.definitions/automaticRetry/Type.Type
let B/Retry =
B.definitions/commandStep/properties/retry/properties/automatic/Type
let B/Manual = B.definitions/commandStep/properties/retry/properties/manual/Type
let ExitStatus = < Code : Integer | Any >
let Retry =
{ Type = { exit_status : ExitStatus, limit : Optional Natural }
, default.limit = None Natural
}
let build =
\(flake_retry_limit : Optional Natural)
-> \(retries : List Retry.Type)
-> { automatic = Some
( let xs
: List B/AutoRetryChunk
= List/map
Retry.Type
B/AutoRetryChunk
( \(retry : Retry.Type)
-> { exit_status = Some
( merge
{ Code =
\(i : Integer)
-> B/ExitStatus.Integer i
, Any = B/ExitStatus.String "*"
}
retry.exit_status
)
, limit =
Optional/map
Natural
Integer
Natural/toInteger
retry.limit
}
)
( [ Retry::{
, exit_status = ExitStatus.Code -1
, limit = Some 4
}
, Retry::{
, exit_status = ExitStatus.Code +255
, limit = Some 4
}
, Retry::{
, exit_status = ExitStatus.Code +1
, limit = flake_retry_limit
}
, Retry::{
, exit_status = ExitStatus.Code +100
, limit = Some 4
}
, Retry::{
, exit_status = ExitStatus.Code +128
, limit = Some 4
}
, Retry::{
, exit_status = ExitStatus.Code +143
, limit = Some 4
}
, Retry::{
, exit_status = ExitStatus.Code +125
, limit = Some 4
}
]
# retries
)
in B/Retry.ListAutomaticRetry/Type xs
)
, manual = Some
( B/Manual.Manual/Type
{ allowed = Some True
, permit_on_passed = Some True
, reason = None Text
}
)
}
in { Type = Retry.Type, build = build }