mirror of
https://github.com/actions/download-artifact.git
synced 2025-07-23 23:18:29 +02:00
Support downloading artifacts with common prefix
This commit adds the `name-prefix` input parameter to allow downloading multiple artifacts of which the names share a common prefix. This is useful for aggregating artifacts produced by matrix runs (e.g. reports from matrixed test jobs). Provides a smoother migration path for the use cases in #248.
This commit is contained in:
parent
1bd0606e08
commit
15051941e0
4 changed files with 32 additions and 5 deletions
|
@ -46,9 +46,15 @@ For more information, see the [`@actions/artifact`](https://github.com/actions/t
|
|||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
# Name of the artifact to download.
|
||||
# Optional. If unspecified, all artifacts for the run are downloaded.
|
||||
# Optional. If unspecified, all artifacts for the run are downloaded, unless restricted by `name-prefix`.
|
||||
name:
|
||||
|
||||
# Name prefix of artifacts to download.
|
||||
# If specified, download all artifacts of which the name starts with the given prefix.
|
||||
# This is useful for aggregating artifacts produced by matrix jobs, for example.
|
||||
# Optional; only meaningful if `name` is unspecified.
|
||||
name-prefix:
|
||||
|
||||
# Destination path. Supports basic tilde expansion.
|
||||
# Optional. Defaults is $GITHUB_WORKSPACE
|
||||
path:
|
||||
|
|
|
@ -3,7 +3,11 @@ description: 'Download a build artifact that was previously uploaded in the work
|
|||
author: 'GitHub'
|
||||
inputs:
|
||||
name:
|
||||
description: 'Name of the artifact to download. If unspecified, all artifacts for the run are downloaded'
|
||||
description: 'Name of the artifact to download. If unspecified, all artifacts for the run are downloaded,
|
||||
unless filtered out by name-prefix.'
|
||||
required: false
|
||||
name-prefix:
|
||||
description: 'Download all artifacts starting with this prefix.'
|
||||
required: false
|
||||
path:
|
||||
description: 'Destination path. Supports basic tilde expansion. Defaults to $GITHUB_WORKSPACE'
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
export enum Inputs {
|
||||
Name = 'name',
|
||||
NamePrefix = 'name-prefix',
|
||||
Path = 'path',
|
||||
GitHubToken = 'github-token',
|
||||
Repository = 'repository',
|
||||
|
|
|
@ -17,6 +17,7 @@ export const chunk = <T>(arr: T[], n: number): T[][] =>
|
|||
async function run(): Promise<void> {
|
||||
const inputs = {
|
||||
name: core.getInput(Inputs.Name, {required: false}),
|
||||
namePrefix: core.getInput(Inputs.NamePrefix, {required: false}),
|
||||
path: core.getInput(Inputs.Path, {required: false}),
|
||||
token: core.getInput(Inputs.GitHubToken, {required: false}),
|
||||
repository: core.getInput(Inputs.Repository, {required: false}),
|
||||
|
@ -73,7 +74,10 @@ async function run(): Promise<void> {
|
|||
artifacts = [targetArtifact]
|
||||
} else {
|
||||
core.info(
|
||||
`No input name specified, downloading all artifacts. Extra directory with the artifact name will be created for each download`
|
||||
`No input name specified, downloading all artifacts ${
|
||||
inputs.namePrefix ? `starting with '${inputs.namePrefix}'` : ''
|
||||
}.
|
||||
Extra directory with the artifact name will be created for each download`
|
||||
)
|
||||
|
||||
const listArtifactResponse = await artifactClient.listArtifacts({
|
||||
|
@ -87,8 +91,20 @@ async function run(): Promise<void> {
|
|||
)
|
||||
}
|
||||
|
||||
core.debug(`Found ${listArtifactResponse.artifacts.length} artifacts`)
|
||||
artifacts = listArtifactResponse.artifacts
|
||||
if (inputs.namePrefix) {
|
||||
artifacts = listArtifactResponse.artifacts.filter(art =>
|
||||
art.name.startsWith(inputs.namePrefix)
|
||||
)
|
||||
|
||||
if (artifacts.length === 0) {
|
||||
throw new Error(
|
||||
`No artifacts found starting with prefix ${inputs.namePrefix} for run '${inputs.runID}' in '${inputs.repository}'`
|
||||
)
|
||||
}
|
||||
} else {
|
||||
artifacts = listArtifactResponse.artifacts
|
||||
}
|
||||
core.debug(`Found ${artifacts.length} artifacts`)
|
||||
}
|
||||
|
||||
const downloadPromises = artifacts.map(artifact =>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue