| 
									
										
										
										
											2021-06-16 09:52:44 +03:00
										 |  |  | import * as core from '@actions/core'; | 
					
						
							|  |  |  | import * as cache from '@actions/cache'; | 
					
						
							| 
									
										
										
										
											2021-07-14 15:25:45 +01:00
										 |  |  | import fs from 'fs'; | 
					
						
							| 
									
										
										
										
											2021-06-16 09:52:44 +03:00
										 |  |  | import {State} from './constants'; | 
					
						
							|  |  |  | import {getCacheDirectoryPath, getPackageManagerInfo} from './cache-utils'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-28 12:25:43 +03:00
										 |  |  | // Catch and log any unhandled exceptions.  These exceptions can leak out of the uploadChunk method in
 | 
					
						
							|  |  |  | // @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
 | 
					
						
							|  |  |  | // throw an uncaught exception.  Instead of failing this action, just warn.
 | 
					
						
							|  |  |  | process.on('uncaughtException', e => { | 
					
						
							|  |  |  |   const warningPrefix = '[warning]'; | 
					
						
							|  |  |  |   core.info(`${warningPrefix}${e.message}`); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-16 09:52:44 +03:00
										 |  |  | export async function run() { | 
					
						
							|  |  |  |   try { | 
					
						
							| 
									
										
										
										
											2021-06-25 12:06:49 +03:00
										 |  |  |     const cacheLock = core.getInput('cache'); | 
					
						
							| 
									
										
										
										
											2021-06-16 09:52:44 +03:00
										 |  |  |     await cachePackages(cacheLock); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     core.setFailed(error.message); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const cachePackages = async (packageManager: string) => { | 
					
						
							|  |  |  |   const state = core.getState(State.CacheMatchedKey); | 
					
						
							|  |  |  |   const primaryKey = core.getState(State.CachePrimaryKey); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const packageManagerInfo = await getPackageManagerInfo(packageManager); | 
					
						
							|  |  |  |   if (!packageManagerInfo) { | 
					
						
							|  |  |  |     core.debug(`Caching for '${packageManager}' is not supported`); | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const cachePath = await getCacheDirectoryPath( | 
					
						
							|  |  |  |     packageManagerInfo, | 
					
						
							|  |  |  |     packageManager | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2021-07-14 15:25:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (!fs.existsSync(cachePath)) { | 
					
						
							|  |  |  |     throw new Error( | 
					
						
							|  |  |  |       `Cache folder path is retrieved for ${packageManager} but doesn't exist on disk: ${cachePath}` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-16 09:52:44 +03:00
										 |  |  |   if (primaryKey === state) { | 
					
						
							|  |  |  |     core.info( | 
					
						
							|  |  |  |       `Cache hit occurred on the primary key ${primaryKey}, not saving cache.` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-27 10:11:42 +02:00
										 |  |  |   const cacheId = await cache.saveCache([cachePath], primaryKey); | 
					
						
							|  |  |  |   if (cacheId == -1) { | 
					
						
							|  |  |  |     return; | 
					
						
							| 
									
										
										
										
											2021-06-16 09:52:44 +03:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2022-06-27 10:11:42 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   core.info(`Cache saved with the key: ${primaryKey}`); | 
					
						
							| 
									
										
										
										
											2021-06-16 09:52:44 +03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | run(); |