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 cache from '@actions/cache'; | ||||||
| import * as exec from '@actions/exec'; | import * as exec from '@actions/exec'; | ||||||
| import {getCacheDistributor} from '../src/cache-distributions/cache-factory'; | import {getCacheDistributor} from '../src/cache-distributions/cache-factory'; | ||||||
|  | import * as utils from './../src/utils'; | ||||||
| 
 | 
 | ||||||
| describe('restore-cache', () => { | describe('restore-cache', () => { | ||||||
|   const pipFileLockHash = |   const pipFileLockHash = | ||||||
| @ -28,6 +29,7 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|   let saveSatetSpy: jest.SpyInstance; |   let saveSatetSpy: jest.SpyInstance; | ||||||
|   let getStateSpy: jest.SpyInstance; |   let getStateSpy: jest.SpyInstance; | ||||||
|   let setOutputSpy: jest.SpyInstance; |   let setOutputSpy: jest.SpyInstance; | ||||||
|  |   let getLinuxOSReleaseInfoSpy: jest.SpyInstance; | ||||||
| 
 | 
 | ||||||
|   // cache spy
 |   // cache spy
 | ||||||
|   let restoreCacheSpy: jest.SpyInstance; |   let restoreCacheSpy: jest.SpyInstance; | ||||||
| @ -74,6 +76,8 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|         return primaryKey; |         return primaryKey; | ||||||
|       } |       } | ||||||
|     ); |     ); | ||||||
|  | 
 | ||||||
|  |     getLinuxOSReleaseInfoSpy = jest.spyOn(utils, 'getLinuxOSReleaseInfo'); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   describe('Validate provided package manager', () => { |   describe('Validate provided package manager', () => { | ||||||
| @ -109,11 +113,24 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|           pythonVersion, |           pythonVersion, | ||||||
|           dependencyFile |           dependencyFile | ||||||
|         ); |         ); | ||||||
|  | 
 | ||||||
|  |         if (process.platform === 'linux') { | ||||||
|  |           getLinuxOSReleaseInfoSpy.mockImplementation(() => | ||||||
|  |             Promise.resolve('Ubuntu-20.4') | ||||||
|  |           ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         await cacheDistributor.restoreCache(); |         await cacheDistributor.restoreCache(); | ||||||
| 
 | 
 | ||||||
|  |         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( |           expect(infoSpy).toHaveBeenCalledWith( | ||||||
|             `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-python-${pythonVersion}-${packageManager}-${fileHash}` |             `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-python-${pythonVersion}-${packageManager}-${fileHash}` | ||||||
|           ); |           ); | ||||||
|  |         } | ||||||
|       }, |       }, | ||||||
|       30000 |       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() { |     computeKeys() { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|             const hash = yield glob.hashFiles(this.cacheDependencyPath); |             const hash = yield glob.hashFiles(this.cacheDependencyPath); | ||||||
|             const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; |             let primaryKey = ''; | ||||||
|             const restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`; |             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 { |             return { | ||||||
|                 primaryKey, |                 primaryKey, | ||||||
|                 restoreKey: [restoreKey] |                 restoreKey: [restoreKey] | ||||||
| @ -65357,16 +65366,26 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
|     __setModuleDefault(result, mod); |     __setModuleDefault(result, mod); | ||||||
|     return result; |     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) { | var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
|     return (mod && mod.__esModule) ? mod : { "default": mod }; |     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | 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 cache = __importStar(__nccwpck_require__(7799)); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const fs_1 = __importDefault(__nccwpck_require__(7147)); | const fs_1 = __importDefault(__nccwpck_require__(7147)); | ||||||
| const path = __importStar(__nccwpck_require__(1017)); | const path = __importStar(__nccwpck_require__(1017)); | ||||||
| const semver = __importStar(__nccwpck_require__(1383)); | const semver = __importStar(__nccwpck_require__(1383)); | ||||||
|  | const exec = __importStar(__nccwpck_require__(1514)); | ||||||
| exports.IS_WINDOWS = process.platform === 'win32'; | exports.IS_WINDOWS = process.platform === 'win32'; | ||||||
| exports.IS_LINUX = process.platform === 'linux'; | exports.IS_LINUX = process.platform === 'linux'; | ||||||
| exports.WINDOWS_ARCHS = ['x86', 'x64']; | exports.WINDOWS_ARCHS = ['x86', 'x64']; | ||||||
| @ -65450,6 +65469,17 @@ function isCacheFeatureAvailable() { | |||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| exports.isCacheFeatureAvailable = isCacheFeatureAvailable; | 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 os from 'os'; | ||||||
| 
 | 
 | ||||||
| import CacheDistributor from './cache-distributor'; | import CacheDistributor from './cache-distributor'; | ||||||
| import {IS_WINDOWS} from '../utils'; | import {getLinuxOSReleaseInfo, IS_LINUX, IS_WINDOWS} from '../utils'; | ||||||
| 
 | 
 | ||||||
| class PipCache extends CacheDistributor { | class PipCache extends CacheDistributor { | ||||||
|   constructor( |   constructor( | ||||||
| @ -57,8 +57,17 @@ class PipCache extends CacheDistributor { | |||||||
| 
 | 
 | ||||||
|   protected async computeKeys() { |   protected async computeKeys() { | ||||||
|     const hash = await glob.hashFiles(this.cacheDependencyPath); |     const hash = await glob.hashFiles(this.cacheDependencyPath); | ||||||
|     const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; |     let primaryKey = ''; | ||||||
|     const restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`; |     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 { |     return { | ||||||
|       primaryKey, |       primaryKey, | ||||||
|  | |||||||
							
								
								
									
										17
									
								
								src/utils.ts
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								src/utils.ts
									
									
									
									
									
								
							| @ -3,6 +3,7 @@ import * as core from '@actions/core'; | |||||||
| import fs from 'fs'; | import fs from 'fs'; | ||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| import * as semver from 'semver'; | import * as semver from 'semver'; | ||||||
|  | import * as exec from '@actions/exec'; | ||||||
| 
 | 
 | ||||||
| export const IS_WINDOWS = process.platform === 'win32'; | export const IS_WINDOWS = process.platform === 'win32'; | ||||||
| export const IS_LINUX = process.platform === 'linux'; | export const IS_LINUX = process.platform === 'linux'; | ||||||
| @ -119,3 +120,19 @@ export function isCacheFeatureAvailable(): boolean { | |||||||
| 
 | 
 | ||||||
|   return true; |   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