Add linux os release info to primary key (#467)
This commit is contained in:
		
							parent
							
								
									aba6f4ba7b
								
							
						
					
					
						commit
						592a7a7a45
					
				| @ -2,6 +2,7 @@ import * as core from '@actions/core'; | ||||
| import * as cache from '@actions/cache'; | ||||
| import * as exec from '@actions/exec'; | ||||
| import {getCacheDistributor} from '../src/cache-distributions/cache-factory'; | ||||
| import * as utils from './../src/utils'; | ||||
| 
 | ||||
| describe('restore-cache', () => { | ||||
|   const pipFileLockHash = | ||||
| @ -28,6 +29,7 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | ||||
|   let saveSatetSpy: jest.SpyInstance; | ||||
|   let getStateSpy: jest.SpyInstance; | ||||
|   let setOutputSpy: jest.SpyInstance; | ||||
|   let getLinuxOSReleaseInfoSpy: jest.SpyInstance; | ||||
| 
 | ||||
|   // cache spy
 | ||||
|   let restoreCacheSpy: jest.SpyInstance; | ||||
| @ -74,6 +76,8 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | ||||
|         return primaryKey; | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     getLinuxOSReleaseInfoSpy = jest.spyOn(utils, 'getLinuxOSReleaseInfo'); | ||||
|   }); | ||||
| 
 | ||||
|   describe('Validate provided package manager', () => { | ||||
| @ -109,11 +113,24 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | ||||
|           pythonVersion, | ||||
|           dependencyFile | ||||
|         ); | ||||
| 
 | ||||
|         if (process.platform === 'linux') { | ||||
|           getLinuxOSReleaseInfoSpy.mockImplementation(() => | ||||
|             Promise.resolve('Ubuntu-20.4') | ||||
|           ); | ||||
|         } | ||||
| 
 | ||||
|         await cacheDistributor.restoreCache(); | ||||
| 
 | ||||
|         expect(infoSpy).toHaveBeenCalledWith( | ||||
|           `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-python-${pythonVersion}-${packageManager}-${fileHash}` | ||||
|         ); | ||||
|         if (process.platform === 'linux' && packageManager === 'pip') { | ||||
|           expect(infoSpy).toHaveBeenCalledWith( | ||||
|             `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-Ubuntu-20.4-python-${pythonVersion}-${packageManager}-${fileHash}` | ||||
|           ); | ||||
|         } else { | ||||
|           expect(infoSpy).toHaveBeenCalledWith( | ||||
|             `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-python-${pythonVersion}-${packageManager}-${fileHash}` | ||||
|           ); | ||||
|         } | ||||
|       }, | ||||
|       30000 | ||||
|     ); | ||||
|  | ||||
							
								
								
									
										36
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -64430,8 +64430,17 @@ class PipCache extends cache_distributor_1.default { | ||||
|     computeKeys() { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             const hash = yield glob.hashFiles(this.cacheDependencyPath); | ||||
|             const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||
|             const restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`; | ||||
|             let primaryKey = ''; | ||||
|             let restoreKey = ''; | ||||
|             if (utils_1.IS_LINUX) { | ||||
|                 const osRelease = yield utils_1.getLinuxOSReleaseInfo(); | ||||
|                 primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osRelease}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||
|                 restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osRelease}-python-${this.pythonVersion}-${this.packageManager}`; | ||||
|             } | ||||
|             else { | ||||
|                 primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||
|                 restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`; | ||||
|             } | ||||
|             return { | ||||
|                 primaryKey, | ||||
|                 restoreKey: [restoreKey] | ||||
| @ -65357,16 +65366,26 @@ var __importStar = (this && this.__importStar) || function (mod) { | ||||
|     __setModuleDefault(result, mod); | ||||
|     return result; | ||||
| }; | ||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||
|     return new (P || (P = Promise))(function (resolve, reject) { | ||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||
|     }); | ||||
| }; | ||||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||||
|     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||
| exports.isCacheFeatureAvailable = exports.isGhes = exports.validatePythonVersionFormatForPyPy = exports.writeExactPyPyVersionFile = exports.readExactPyPyVersionFile = exports.getPyPyVersionFromPath = exports.isNightlyKeyword = exports.validateVersion = exports.createSymlinkInFolder = exports.WINDOWS_PLATFORMS = exports.WINDOWS_ARCHS = exports.IS_LINUX = exports.IS_WINDOWS = void 0; | ||||
| exports.getLinuxOSReleaseInfo = exports.isCacheFeatureAvailable = exports.isGhes = exports.validatePythonVersionFormatForPyPy = exports.writeExactPyPyVersionFile = exports.readExactPyPyVersionFile = exports.getPyPyVersionFromPath = exports.isNightlyKeyword = exports.validateVersion = exports.createSymlinkInFolder = exports.WINDOWS_PLATFORMS = exports.WINDOWS_ARCHS = exports.IS_LINUX = exports.IS_WINDOWS = void 0; | ||||
| const cache = __importStar(__nccwpck_require__(7799)); | ||||
| const core = __importStar(__nccwpck_require__(2186)); | ||||
| const fs_1 = __importDefault(__nccwpck_require__(7147)); | ||||
| const path = __importStar(__nccwpck_require__(1017)); | ||||
| const semver = __importStar(__nccwpck_require__(1383)); | ||||
| const exec = __importStar(__nccwpck_require__(1514)); | ||||
| exports.IS_WINDOWS = process.platform === 'win32'; | ||||
| exports.IS_LINUX = process.platform === 'linux'; | ||||
| exports.WINDOWS_ARCHS = ['x86', 'x64']; | ||||
| @ -65450,6 +65469,17 @@ function isCacheFeatureAvailable() { | ||||
|     return true; | ||||
| } | ||||
| exports.isCacheFeatureAvailable = isCacheFeatureAvailable; | ||||
| function getLinuxOSReleaseInfo() { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         const { stdout, stderr, exitCode } = yield exec.getExecOutput('lsb_release', ['-i', '-r', '-s'], { | ||||
|             silent: true | ||||
|         }); | ||||
|         const [osRelease, osVersion] = stdout.trim().split('\n'); | ||||
|         core.debug(`OS Release: ${osRelease}, Version: ${osVersion}`); | ||||
|         return `${osVersion}-${osRelease}`; | ||||
|     }); | ||||
| } | ||||
| exports.getLinuxOSReleaseInfo = getLinuxOSReleaseInfo; | ||||
| 
 | ||||
| 
 | ||||
| /***/ }), | ||||
|  | ||||
| @ -7,7 +7,7 @@ import * as path from 'path'; | ||||
| import os from 'os'; | ||||
| 
 | ||||
| import CacheDistributor from './cache-distributor'; | ||||
| import {IS_WINDOWS} from '../utils'; | ||||
| import {getLinuxOSReleaseInfo, IS_LINUX, IS_WINDOWS} from '../utils'; | ||||
| 
 | ||||
| class PipCache extends CacheDistributor { | ||||
|   constructor( | ||||
| @ -57,8 +57,17 @@ class PipCache extends CacheDistributor { | ||||
| 
 | ||||
|   protected async computeKeys() { | ||||
|     const hash = await glob.hashFiles(this.cacheDependencyPath); | ||||
|     const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||
|     const restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`; | ||||
|     let primaryKey = ''; | ||||
|     let restoreKey = ''; | ||||
| 
 | ||||
|     if (IS_LINUX) { | ||||
|       const osRelease = await getLinuxOSReleaseInfo(); | ||||
|       primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osRelease}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||
|       restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osRelease}-python-${this.pythonVersion}-${this.packageManager}`; | ||||
|     } else { | ||||
|       primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||
|       restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`; | ||||
|     } | ||||
| 
 | ||||
|     return { | ||||
|       primaryKey, | ||||
|  | ||||
							
								
								
									
										17
									
								
								src/utils.ts
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								src/utils.ts
									
									
									
									
									
								
							| @ -3,6 +3,7 @@ import * as core from '@actions/core'; | ||||
| import fs from 'fs'; | ||||
| import * as path from 'path'; | ||||
| import * as semver from 'semver'; | ||||
| import * as exec from '@actions/exec'; | ||||
| 
 | ||||
| export const IS_WINDOWS = process.platform === 'win32'; | ||||
| export const IS_LINUX = process.platform === 'linux'; | ||||
| @ -119,3 +120,19 @@ export function isCacheFeatureAvailable(): boolean { | ||||
| 
 | ||||
|   return true; | ||||
| } | ||||
| 
 | ||||
| export async function getLinuxOSReleaseInfo() { | ||||
|   const {stdout, stderr, exitCode} = await exec.getExecOutput( | ||||
|     'lsb_release', | ||||
|     ['-i', '-r', '-s'], | ||||
|     { | ||||
|       silent: true | ||||
|     } | ||||
|   ); | ||||
| 
 | ||||
|   const [osRelease, osVersion] = stdout.trim().split('\n'); | ||||
| 
 | ||||
|   core.debug(`OS Release: ${osRelease}, Version: ${osVersion}`); | ||||
| 
 | ||||
|   return `${osVersion}-${osRelease}`; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Milos Pantic
						Milos Pantic