mirror of
				https://github.com/actions/download-artifact.git
				synced 2025-10-31 17:03:40 +00:00 
			
		
		
		
	[v4 beta] Fixes to download directory structure (#233)
* Fix extra root extra root directory if downloading single artifact on v4-beta * Fix for all downloads * Bump to node20 runtime * ncc --------- Co-authored-by: Rob Herley <robherley@github.com>
This commit is contained in:
		
							parent
							
								
									896d1bb258
								
							
						
					
					
						commit
						88dadfbcfc
					
				| @ -25,5 +25,5 @@ outputs: | ||||
|   download-path: | ||||
|     description: 'Path of artifact download' | ||||
| runs: | ||||
|   using: 'node16' | ||||
|   using: 'node20' | ||||
|   main: 'dist/index.js' | ||||
|  | ||||
							
								
								
									
										7
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -118706,6 +118706,7 @@ function run() { | ||||
|         if (inputs.path.startsWith(`~`)) { | ||||
|             inputs.path = inputs.path.replace('~', os.homedir()); | ||||
|         } | ||||
|         const isSingleArtifactDownload = !!inputs.name; | ||||
|         const resolvedPath = path.resolve(inputs.path); | ||||
|         core.debug(`Resolved path is ${resolvedPath}`); | ||||
|         const [owner, repo] = inputs.repository.split('/'); | ||||
| @ -118714,7 +118715,8 @@ function run() { | ||||
|         } | ||||
|         const artifactClient = artifact.create(); | ||||
|         let artifacts = []; | ||||
|         if (inputs.name) { | ||||
|         if (isSingleArtifactDownload) { | ||||
|             core.info(`Downloading single artifact`); | ||||
|             const { artifact: targetArtifact } = yield artifactClient.getArtifact(inputs.name, inputs.runID, owner, repo, inputs.token); | ||||
|             if (!targetArtifact) { | ||||
|                 throw new Error(`Artifact '${inputs.name}' not found`); | ||||
| @ -118723,6 +118725,7 @@ function run() { | ||||
|             artifacts = [targetArtifact]; | ||||
|         } | ||||
|         else { | ||||
|             core.info(`No input name specified, downloading all artifacts. Extra directory with the artifact name will be created for each download`); | ||||
|             const listArtifactResponse = yield artifactClient.listArtifacts(inputs.runID, owner, repo, inputs.token); | ||||
|             if (listArtifactResponse.artifacts.length === 0) { | ||||
|                 throw new Error(`No artifacts found for run '${inputs.runID}' in '${inputs.repository}'`); | ||||
| @ -118731,7 +118734,7 @@ function run() { | ||||
|             artifacts = listArtifactResponse.artifacts; | ||||
|         } | ||||
|         const downloadPromises = artifacts.map(artifact => artifactClient.downloadArtifact(artifact.id, owner, repo, inputs.token, { | ||||
|             path: path.join(resolvedPath, artifact.name) | ||||
|             path: isSingleArtifactDownload ? resolvedPath : path.join(resolvedPath, artifact.name) | ||||
|         })); | ||||
|         const chunkedPromises = exports.chunk(downloadPromises, PARALLEL_DOWNLOADS); | ||||
|         for (const chunk of chunkedPromises) { | ||||
|  | ||||
| @ -30,6 +30,7 @@ async function run(): Promise<void> { | ||||
|     inputs.path = inputs.path.replace('~', os.homedir()) | ||||
|   } | ||||
| 
 | ||||
|   const isSingleArtifactDownload: boolean = !!inputs.name | ||||
|   const resolvedPath = path.resolve(inputs.path) | ||||
|   core.debug(`Resolved path is ${resolvedPath}`) | ||||
| 
 | ||||
| @ -43,7 +44,9 @@ async function run(): Promise<void> { | ||||
|   const artifactClient = artifact.create() | ||||
|   let artifacts: artifact.Artifact[] = [] | ||||
| 
 | ||||
|   if (inputs.name) { | ||||
|   if (isSingleArtifactDownload) { | ||||
|     core.info(`Downloading single artifact`) | ||||
| 
 | ||||
|     const {artifact: targetArtifact} = await artifactClient.getArtifact( | ||||
|       inputs.name, | ||||
|       inputs.runID, | ||||
| @ -62,6 +65,8 @@ 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`) | ||||
| 
 | ||||
|     const listArtifactResponse = await artifactClient.listArtifacts( | ||||
|       inputs.runID, | ||||
|       owner, | ||||
| @ -81,7 +86,7 @@ async function run(): Promise<void> { | ||||
| 
 | ||||
|   const downloadPromises = artifacts.map(artifact => | ||||
|     artifactClient.downloadArtifact(artifact.id, owner, repo, inputs.token, { | ||||
|       path: path.join(resolvedPath, artifact.name) | ||||
|       path: isSingleArtifactDownload ? resolvedPath : path.join(resolvedPath, artifact.name) | ||||
|     }) | ||||
|   ) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user