mirror of
				https://github.com/actions/setup-java.git
				synced 2025-10-30 05:50:53 +00:00 
			
		
		
		
	feat: implement cache-dependency-path option to control caching dependency (#499)
This commit is contained in:
		
					parent
					
						
							
								78078da0cd
							
						
					
				
			
			
				commit
				
					
						9eda6b51cc
					
				
			
		
					 14 changed files with 278 additions and 59 deletions
				
			
		
							
								
								
									
										31
									
								
								src/cache.ts
									
										
									
									
									
								
							
							
						
						
									
										31
									
								
								src/cache.ts
									
										
									
									
									
								
							|  | @ -83,31 +83,34 @@ function findPackageManager(id: string): PackageManager { | |||
| /** | ||||
|  * A function that generates a cache key to use. | ||||
|  * Format of the generated key will be "${{ platform }}-${{ id }}-${{ fileHash }}"". | ||||
|  * If there is no file matched to {@link PackageManager.path}, the generated key ends with a dash (-). | ||||
|  * @see {@link https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key|spec of cache key}
 | ||||
|  */ | ||||
| async function computeCacheKey(packageManager: PackageManager) { | ||||
|   const hash = await glob.hashFiles(packageManager.pattern.join('\n')); | ||||
|   return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${hash}`; | ||||
| async function computeCacheKey( | ||||
|   packageManager: PackageManager, | ||||
|   cacheDependencyPath: string | ||||
| ) { | ||||
|   const pattern = cacheDependencyPath | ||||
|     ? cacheDependencyPath.trim().split('\n') | ||||
|     : packageManager.pattern; | ||||
|   const fileHash = await glob.hashFiles(pattern.join('\n')); | ||||
|   if (!fileHash) { | ||||
|     throw new Error( | ||||
|       `No file in ${process.cwd()} matched to [${pattern}], make sure you have checked out the target repository` | ||||
|     ); | ||||
|   } | ||||
|   return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${fileHash}`; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Restore the dependency cache | ||||
|  * @param id ID of the package manager, should be "maven" or "gradle" | ||||
|  * @param cacheDependencyPath The path to a dependency file | ||||
|  */ | ||||
| export async function restore(id: string) { | ||||
| export async function restore(id: string, cacheDependencyPath: string) { | ||||
|   const packageManager = findPackageManager(id); | ||||
|   const primaryKey = await computeCacheKey(packageManager); | ||||
| 
 | ||||
|   const primaryKey = await computeCacheKey(packageManager, cacheDependencyPath); | ||||
|   core.debug(`primary key is ${primaryKey}`); | ||||
|   core.saveState(STATE_CACHE_PRIMARY_KEY, primaryKey); | ||||
|   if (primaryKey.endsWith('-')) { | ||||
|     throw new Error( | ||||
|       `No file in ${process.cwd()} matched to [${ | ||||
|         packageManager.pattern | ||||
|       }], make sure you have checked out the target repository` | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   // No "restoreKeys" is set, to start with a clear cache after dependency update (see https://github.com/actions/setup-java/issues/269)
 | ||||
|   const matchedKey = await cache.restoreCache(packageManager.path, primaryKey); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue