diff --git a/action.yml b/action.yml index 54a3eb6..a38a77e 100644 --- a/action.yml +++ b/action.yml @@ -11,6 +11,10 @@ inputs: pattern: description: 'A glob pattern matching the artifacts that should be downloaded. Ignored if name is specified.' required: false + max-attempts: + description: 'Maximum number of attempts while retrying download.' + required: false + default: '5' merge-multiple: description: 'When multiple artifacts are matched, this changes the behavior of the destination directories. If true, the downloaded artifacts will be in the same directory specified by path. diff --git a/src/constants.ts b/src/constants.ts index 17c7d34..bb7cbff 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -5,7 +5,8 @@ export enum Inputs { Repository = 'repository', RunID = 'run-id', Pattern = 'pattern', - MergeMultiple = 'merge-multiple' + MergeMultiple = 'merge-multiple', + MaxAttempts = 'max-attempts' } export enum Outputs { diff --git a/src/download-artifact.ts b/src/download-artifact.ts index 1beef4d..f57961c 100644 --- a/src/download-artifact.ts +++ b/src/download-artifact.ts @@ -21,6 +21,7 @@ export async function run(): Promise { path: core.getInput(Inputs.Path, {required: false}), token: core.getInput(Inputs.GitHubToken, {required: false}), repository: core.getInput(Inputs.Repository, {required: false}), + maxAttempts: core.getInput(constants_1.Inputs.MaxAttempts, { required: false }), runID: parseInt(core.getInput(Inputs.RunID, {required: false})), pattern: core.getInput(Inputs.Pattern, {required: false}), mergeMultiple: core.getBooleanInput(Inputs.MergeMultiple, {required: false}) @@ -55,6 +56,14 @@ export async function run(): Promise { } } + if (inputs.maxAttempts) { + core.info(`Max attempts for retrying download: ${inputs.maxAttempts}`); + options.findBy["maxAttempts"] = inputs.maxAttempts; + } + else { + throw new Error(`Invalid retryCount: '${inputs.maxAttempts}'. Must be greater than 0`); + } + let artifacts: Artifact[] = [] if (isSingleArtifactDownload) {