mirror of https://github.com/actions/toolkit
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import * as core from '@actions/core'
|
|
import {OctokitOptions} from '@octokit/core/dist-types/types'
|
|
import {RequestRequestOptions} from '@octokit/types'
|
|
|
|
export type RetryOptions = {
|
|
doNotRetry?: number[]
|
|
enabled?: boolean
|
|
}
|
|
|
|
// Defaults for fetching artifacts
|
|
const defaultMaxRetryNumber = 5
|
|
const defaultExemptStatusCodes = [400, 401, 403, 404, 422] // https://github.com/octokit/plugin-retry.js/blob/9a2443746c350b3beedec35cf26e197ea318a261/src/index.ts#L14
|
|
|
|
export function getRetryOptions(
|
|
defaultOptions: OctokitOptions,
|
|
retries: number = defaultMaxRetryNumber,
|
|
exemptStatusCodes: number[] = defaultExemptStatusCodes
|
|
): [RetryOptions, RequestRequestOptions | undefined] {
|
|
if (retries <= 0) {
|
|
return [{enabled: false}, defaultOptions.request]
|
|
}
|
|
|
|
const retryOptions: RetryOptions = {
|
|
enabled: true
|
|
}
|
|
|
|
if (exemptStatusCodes.length > 0) {
|
|
retryOptions.doNotRetry = exemptStatusCodes
|
|
}
|
|
|
|
// The GitHub type has some defaults for `options.request`
|
|
// see: https://github.com/actions/toolkit/blob/4fbc5c941a57249b19562015edbd72add14be93d/packages/github/src/utils.ts#L15
|
|
// We pass these in here so they are not overridden.
|
|
const requestOptions: RequestRequestOptions = {
|
|
...defaultOptions.request,
|
|
retries
|
|
}
|
|
|
|
core.debug(
|
|
`GitHub client configured with: (retries: ${
|
|
requestOptions.retries
|
|
}, retry-exempt-status-code: ${
|
|
retryOptions.doNotRetry ?? 'octokit default: [400, 401, 403, 404, 422]'
|
|
})`
|
|
)
|
|
|
|
return [retryOptions, requestOptions]
|
|
}
|