Cache hit output (#373)
* Remove useless await in getCacheDistributor calls * Added cache-hit output * Build action with cache-hit output * Remove PromiseReturnType, add matchedKey == primaryKey check * Update cache-distributor.ts * Fix tests and rebuild
This commit is contained in:
		
							parent
							
								
									7933d5a3dd
								
							
						
					
					
						commit
						21c0493ecf
					
				| @ -27,6 +27,7 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|   let debugSpy: jest.SpyInstance; |   let debugSpy: jest.SpyInstance; | ||||||
|   let saveSatetSpy: jest.SpyInstance; |   let saveSatetSpy: jest.SpyInstance; | ||||||
|   let getStateSpy: jest.SpyInstance; |   let getStateSpy: jest.SpyInstance; | ||||||
|  |   let setOutputSpy: jest.SpyInstance; | ||||||
| 
 | 
 | ||||||
|   // cache spy
 |   // cache spy
 | ||||||
|   let restoreCacheSpy: jest.SpyInstance; |   let restoreCacheSpy: jest.SpyInstance; | ||||||
| @ -64,6 +65,9 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|       return {stdout: '', stderr: 'Error occured', exitCode: 2}; |       return {stdout: '', stderr: 'Error occured', exitCode: 2}; | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  |     setOutputSpy = jest.spyOn(core, 'setOutput'); | ||||||
|  |     setOutputSpy.mockImplementation(input => undefined); | ||||||
|  | 
 | ||||||
|     restoreCacheSpy = jest.spyOn(cache, 'restoreCache'); |     restoreCacheSpy = jest.spyOn(cache, 'restoreCache'); | ||||||
|     restoreCacheSpy.mockImplementation( |     restoreCacheSpy.mockImplementation( | ||||||
|       (cachePaths: string[], primaryKey: string, restoreKey?: string) => { |       (cachePaths: string[], primaryKey: string, restoreKey?: string) => { | ||||||
| @ -100,7 +104,7 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|     ])( |     ])( | ||||||
|       'restored dependencies for %s by primaryKey', |       'restored dependencies for %s by primaryKey', | ||||||
|       async (packageManager, pythonVersion, dependencyFile, fileHash) => { |       async (packageManager, pythonVersion, dependencyFile, fileHash) => { | ||||||
|         const cacheDistributor = await getCacheDistributor( |         const cacheDistributor = getCacheDistributor( | ||||||
|           packageManager, |           packageManager, | ||||||
|           pythonVersion, |           pythonVersion, | ||||||
|           dependencyFile |           dependencyFile | ||||||
| @ -126,7 +130,7 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|         dependencyFile, |         dependencyFile, | ||||||
|         cacheDependencyPath |         cacheDependencyPath | ||||||
|       ) => { |       ) => { | ||||||
|         const cacheDistributor = await getCacheDistributor( |         const cacheDistributor = getCacheDistributor( | ||||||
|           packageManager, |           packageManager, | ||||||
|           pythonVersion, |           pythonVersion, | ||||||
|           dependencyFile |           dependencyFile | ||||||
| @ -162,7 +166,7 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|             return primaryKey !== fileHash && restoreKey ? pipFileLockHash : ''; |             return primaryKey !== fileHash && restoreKey ? pipFileLockHash : ''; | ||||||
|           } |           } | ||||||
|         ); |         ); | ||||||
|         const cacheDistributor = await getCacheDistributor( |         const cacheDistributor = getCacheDistributor( | ||||||
|           packageManager, |           packageManager, | ||||||
|           pythonVersion, |           pythonVersion, | ||||||
|           dependencyFile |           dependencyFile | ||||||
| @ -187,6 +191,38 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|  |   describe('Check if handleMatchResult', () => { | ||||||
|  |     it.each([ | ||||||
|  |       ['pip', '3.8.12', 'requirements.txt', 'someKey', 'someKey', true], | ||||||
|  |       ['pipenv', '3.9.1', 'requirements.txt', 'someKey', 'someKey', true], | ||||||
|  |       ['poetry', '3.8.12', 'requirements.txt', 'someKey', 'someKey', true], | ||||||
|  |       ['pip', '3.9.2', 'requirements.txt', undefined, 'someKey', false], | ||||||
|  |       ['pipenv', '3.8.12', 'requirements.txt', undefined, 'someKey', false], | ||||||
|  |       ['poetry', '3.9.12', 'requirements.txt', undefined, 'someKey', false] | ||||||
|  |     ])( | ||||||
|  |       'sets correct outputs', | ||||||
|  |       async ( | ||||||
|  |         packageManager, | ||||||
|  |         pythonVersion, | ||||||
|  |         dependencyFile, | ||||||
|  |         matchedKey, | ||||||
|  |         restoredKey, | ||||||
|  |         expectedOutputValue | ||||||
|  |       ) => { | ||||||
|  |         const cacheDistributor = getCacheDistributor( | ||||||
|  |           packageManager, | ||||||
|  |           pythonVersion, | ||||||
|  |           dependencyFile | ||||||
|  |         ); | ||||||
|  |         cacheDistributor.handleMatchResult(matchedKey, restoredKey); | ||||||
|  |         expect(setOutputSpy).toHaveBeenCalledWith( | ||||||
|  |           'cache-hit', | ||||||
|  |           expectedOutputValue | ||||||
|  |         ); | ||||||
|  |       } | ||||||
|  |     ); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|   afterEach(() => { |   afterEach(() => { | ||||||
|     jest.resetAllMocks(); |     jest.resetAllMocks(); | ||||||
|     jest.clearAllMocks(); |     jest.clearAllMocks(); | ||||||
|  | |||||||
| @ -19,6 +19,8 @@ inputs: | |||||||
| outputs: | outputs: | ||||||
|   python-version: |   python-version: | ||||||
|     description: "The installed python version. Useful when given a version range as input." |     description: "The installed python version. Useful when given a version range as input." | ||||||
|  |   cache-hit: | ||||||
|  |     description: 'A boolean value to indicate a cache entry was found' | ||||||
| runs: | runs: | ||||||
|   using: 'node16' |   using: 'node16' | ||||||
|   main: 'dist/setup/index.js' |   main: 'dist/setup/index.js' | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							| @ -37234,15 +37234,19 @@ class CacheDistributor { | |||||||
|             core.saveState(State.CACHE_PATHS, cachePath); |             core.saveState(State.CACHE_PATHS, cachePath); | ||||||
|             core.saveState(State.STATE_CACHE_PRIMARY_KEY, primaryKey); |             core.saveState(State.STATE_CACHE_PRIMARY_KEY, primaryKey); | ||||||
|             const matchedKey = yield cache.restoreCache(cachePath, primaryKey, restoreKey); |             const matchedKey = yield cache.restoreCache(cachePath, primaryKey, restoreKey); | ||||||
|             if (matchedKey) { |             this.handleMatchResult(matchedKey, primaryKey); | ||||||
|                 core.saveState(State.CACHE_MATCHED_KEY, matchedKey); |  | ||||||
|                 core.info(`Cache restored from key: ${matchedKey}`); |  | ||||||
|             } |  | ||||||
|             else { |  | ||||||
|                 core.info(`${this.packageManager} cache is not found`); |  | ||||||
|             } |  | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |     handleMatchResult(matchedKey, primaryKey) { | ||||||
|  |         if (matchedKey) { | ||||||
|  |             core.saveState(State.CACHE_MATCHED_KEY, matchedKey); | ||||||
|  |             core.info(`Cache restored from key: ${matchedKey}`); | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             core.info(`${this.packageManager} cache is not found`); | ||||||
|  |         } | ||||||
|  |         core.setOutput('cache-hit', matchedKey === primaryKey); | ||||||
|  |     } | ||||||
| } | } | ||||||
| exports.default = CacheDistributor; | exports.default = CacheDistributor; | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -42579,15 +42579,19 @@ class CacheDistributor { | |||||||
|             core.saveState(State.CACHE_PATHS, cachePath); |             core.saveState(State.CACHE_PATHS, cachePath); | ||||||
|             core.saveState(State.STATE_CACHE_PRIMARY_KEY, primaryKey); |             core.saveState(State.STATE_CACHE_PRIMARY_KEY, primaryKey); | ||||||
|             const matchedKey = yield cache.restoreCache(cachePath, primaryKey, restoreKey); |             const matchedKey = yield cache.restoreCache(cachePath, primaryKey, restoreKey); | ||||||
|             if (matchedKey) { |             this.handleMatchResult(matchedKey, primaryKey); | ||||||
|                 core.saveState(State.CACHE_MATCHED_KEY, matchedKey); |  | ||||||
|                 core.info(`Cache restored from key: ${matchedKey}`); |  | ||||||
|             } |  | ||||||
|             else { |  | ||||||
|                 core.info(`${this.packageManager} cache is not found`); |  | ||||||
|             } |  | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |     handleMatchResult(matchedKey, primaryKey) { | ||||||
|  |         if (matchedKey) { | ||||||
|  |             core.saveState(State.CACHE_MATCHED_KEY, matchedKey); | ||||||
|  |             core.info(`Cache restored from key: ${matchedKey}`); | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             core.info(`${this.packageManager} cache is not found`); | ||||||
|  |         } | ||||||
|  |         core.setOutput('cache-hit', matchedKey === primaryKey); | ||||||
|  |     } | ||||||
| } | } | ||||||
| exports.default = CacheDistributor; | exports.default = CacheDistributor; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -41,12 +41,17 @@ abstract class CacheDistributor { | |||||||
|       restoreKey |       restoreKey | ||||||
|     ); |     ); | ||||||
| 
 | 
 | ||||||
|  |     this.handleMatchResult(matchedKey, primaryKey); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public handleMatchResult(matchedKey: string | undefined, primaryKey: string) { | ||||||
|     if (matchedKey) { |     if (matchedKey) { | ||||||
|       core.saveState(State.CACHE_MATCHED_KEY, matchedKey); |       core.saveState(State.CACHE_MATCHED_KEY, matchedKey); | ||||||
|       core.info(`Cache restored from key: ${matchedKey}`); |       core.info(`Cache restored from key: ${matchedKey}`); | ||||||
|     } else { |     } else { | ||||||
|       core.info(`${this.packageManager} cache is not found`); |       core.info(`${this.packageManager} cache is not found`); | ||||||
|     } |     } | ||||||
|  |     core.setOutput('cache-hit', matchedKey === primaryKey); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user