mirror of
				https://github.com/actions/upload-artifact.git
				synced 2025-10-31 23:43:43 +00:00 
			
		
		
		
	Add new option to specify behavior if no files found
This commit is contained in:
		
							parent
							
								
									5f948bc1f0
								
							
						
					
					
						commit
						9073645079
					
				
							
								
								
									
										11
									
								
								action.yml
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								action.yml
									
									
									
									
									
								
							| @ -4,10 +4,19 @@ author: 'GitHub' | ||||
| inputs:  | ||||
|   name: | ||||
|     description: 'Artifact name' | ||||
|     required: false | ||||
|     default: 'artifact' | ||||
|   path: | ||||
|     description: 'A file, directory or wildcard pattern that describes what to upload' | ||||
|     required: true | ||||
|   if-no-files-found: | ||||
|     description: > | ||||
|       The desired behavior if no files are found using the provided path. | ||||
| 
 | ||||
|       Available Options: | ||||
|         warn: Output a warning but do not fail the action | ||||
|         error: Fail the action with an error message | ||||
|         suppress: Do not output any warnings or errors, the action does not fail | ||||
|     default: 'warn' | ||||
| runs: | ||||
|   using: 'node12' | ||||
|   main: 'dist/index.js' | ||||
| @ -1,8 +1,22 @@ | ||||
| export enum Inputs { | ||||
|   Name = 'name', | ||||
|   Path = 'path' | ||||
|   Path = 'path', | ||||
|   IfNoFilesFound = 'if-no-files-found' | ||||
| } | ||||
| 
 | ||||
| export function getDefaultArtifactName(): string { | ||||
|   return 'artifact' | ||||
| export enum NoFileOptions { | ||||
|   /** | ||||
|    * Default. Output a warning but do not fail the action | ||||
|    */ | ||||
|   warn, | ||||
| 
 | ||||
|   /** | ||||
|    * Fail the action with an error message | ||||
|    */ | ||||
|   error, | ||||
| 
 | ||||
|   /** | ||||
|    * Do not output any warnings or errors, the action does not fail | ||||
|    */ | ||||
|   suppress | ||||
| } | ||||
|  | ||||
							
								
								
									
										20
									
								
								src/input-helper.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/input-helper.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| import * as core from '@actions/core' | ||||
| import {Inputs, NoFileOptions} from './constants' | ||||
| import {UploadInputs} from './upload-inputs' | ||||
| 
 | ||||
| /** | ||||
|  * Helper to get all the inputs for the action | ||||
|  */ | ||||
| export function getInputs(): UploadInputs { | ||||
|   const name = core.getInput(Inputs.Name) | ||||
|   const path = core.getInput(Inputs.Path, {required: true}) | ||||
| 
 | ||||
|   const ifNoFilesFound = core.getInput(Inputs.IfNoFilesFound) | ||||
|   const noFileBehavior: NoFileOptions = NoFileOptions[ifNoFilesFound] | ||||
| 
 | ||||
|   return { | ||||
|     artifactName: name, | ||||
|     searchPath: path, | ||||
|     ifNoFilesFound: noFileBehavior | ||||
|   } | ||||
| } | ||||
| @ -1,21 +1,38 @@ | ||||
| import * as core from '@actions/core' | ||||
| import {create, UploadOptions} from '@actions/artifact' | ||||
| import {Inputs, getDefaultArtifactName} from './constants' | ||||
| import {findFilesToUpload} from './search' | ||||
| import {getInputs} from './input-helper' | ||||
| import {NoFileOptions} from './constants' | ||||
| 
 | ||||
| async function run(): Promise<void> { | ||||
|   try { | ||||
|     const name = core.getInput(Inputs.Name, {required: false}) | ||||
|     const path = core.getInput(Inputs.Path, {required: true}) | ||||
| 
 | ||||
|     const searchResult = await findFilesToUpload(path) | ||||
|     const inputs = getInputs() | ||||
|     const searchResult = await findFilesToUpload(inputs.searchPath) | ||||
|     if (searchResult.filesToUpload.length === 0) { | ||||
|       core.warning( | ||||
|         `No files were found for the provided path: ${path}. No artifacts will be uploaded.` | ||||
|       ) | ||||
|       // No files were found, different use cases warrant different types of behavior if nothing is found
 | ||||
|       switch (inputs.ifNoFilesFound) { | ||||
|         case NoFileOptions.warn: { | ||||
|           core.warning( | ||||
|             `No files were found with the provided path: ${inputs.searchPath}. No artifacts will be uploaded.` | ||||
|           ) | ||||
|           break | ||||
|         } | ||||
|         case NoFileOptions.error: { | ||||
|           core.setFailed( | ||||
|             `No files were found with the provided path: ${inputs.searchPath}. No artifacts will be uploaded.` | ||||
|           ) | ||||
|           break | ||||
|         } | ||||
|         case NoFileOptions.suppress: { | ||||
|           core.info( | ||||
|             `No files were found with the provided path: ${inputs.searchPath}. No artifacts will be uploaded.` | ||||
|           ) | ||||
|           break | ||||
|         } | ||||
|       } | ||||
|     } else { | ||||
|       core.info( | ||||
|         `With the provided path, there will be ${searchResult.filesToUpload.length} files uploaded` | ||||
|         `With the provided path, there will be ${searchResult.filesToUpload.length} file(s) uploaded` | ||||
|       ) | ||||
|       core.debug(`Root artifact directory is ${searchResult.rootDirectory}`) | ||||
| 
 | ||||
| @ -24,7 +41,7 @@ async function run(): Promise<void> { | ||||
|         continueOnError: false | ||||
|       } | ||||
|       const uploadResponse = await artifactClient.uploadArtifact( | ||||
|         name || getDefaultArtifactName(), | ||||
|         inputs.artifactName, | ||||
|         searchResult.filesToUpload, | ||||
|         searchResult.rootDirectory, | ||||
|         options | ||||
|  | ||||
							
								
								
									
										18
									
								
								src/upload-inputs.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/upload-inputs.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| import {NoFileOptions} from './constants' | ||||
| 
 | ||||
| export interface UploadInputs { | ||||
|   /** | ||||
|    * The name of the artifact that will be uploaded | ||||
|    */ | ||||
|   artifactName: string | ||||
| 
 | ||||
|   /** | ||||
|    * The search path used to describe what to upload as part of the artifact | ||||
|    */ | ||||
|   searchPath: string | ||||
| 
 | ||||
|   /** | ||||
|    * The desired behavior if no files are found with the provided search path | ||||
|    */ | ||||
|   ifNoFilesFound: NoFileOptions | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user