Add OS info to the error message (#559)
This commit is contained in:
		
							parent
							
								
									76bbdfadd7
								
							
						
					
					
						commit
						2c3dd9e7e2
					
				| @ -30,7 +30,6 @@ 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; | ||||||
| @ -67,6 +66,9 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|       if (input.includes('poetry')) { |       if (input.includes('poetry')) { | ||||||
|         return {stdout: poetryConfigOutput, stderr: '', exitCode: 0}; |         return {stdout: poetryConfigOutput, stderr: '', exitCode: 0}; | ||||||
|       } |       } | ||||||
|  |       if (input.includes('lsb_release')) { | ||||||
|  |         return {stdout: 'Ubuntu\n20.04', stderr: '', exitCode: 0}; | ||||||
|  |       } | ||||||
| 
 | 
 | ||||||
|       return {stdout: '', stderr: 'Error occured', exitCode: 2}; |       return {stdout: '', stderr: 'Error occured', exitCode: 2}; | ||||||
|     }); |     }); | ||||||
| @ -83,7 +85,6 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
| 
 | 
 | ||||||
|     whichSpy = jest.spyOn(io, 'which'); |     whichSpy = jest.spyOn(io, 'which'); | ||||||
|     whichSpy.mockImplementation(() => '/path/to/python'); |     whichSpy.mockImplementation(() => '/path/to/python'); | ||||||
|     getLinuxOSReleaseInfoSpy = jest.spyOn(utils, 'getLinuxOSReleaseInfo'); |  | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   describe('Validate provided package manager', () => { |   describe('Validate provided package manager', () => { | ||||||
| @ -120,17 +121,11 @@ virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/patrick/Library/Caches/py | |||||||
|           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') { |         if (process.platform === 'linux' && packageManager === 'pip') { | ||||||
|           expect(infoSpy).toHaveBeenCalledWith( |           expect(infoSpy).toHaveBeenCalledWith( | ||||||
|             `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-Ubuntu-20.4-python-${pythonVersion}-${packageManager}-${fileHash}` |             `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-20.04-Ubuntu-python-${pythonVersion}-${packageManager}-${fileHash}` | ||||||
|           ); |           ); | ||||||
|         } else { |         } else { | ||||||
|           expect(infoSpy).toHaveBeenCalledWith( |           expect(infoSpy).toHaveBeenCalledWith( | ||||||
|  | |||||||
							
								
								
									
										77
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										77
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -65943,9 +65943,9 @@ class PipCache extends cache_distributor_1.default { | |||||||
|             let primaryKey = ''; |             let primaryKey = ''; | ||||||
|             let restoreKey = ''; |             let restoreKey = ''; | ||||||
|             if (utils_1.IS_LINUX) { |             if (utils_1.IS_LINUX) { | ||||||
|                 const osRelease = yield utils_1.getLinuxOSReleaseInfo(); |                 const osInfo = yield utils_1.getLinuxInfo(); | ||||||
|                 primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osRelease}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; |                 primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osInfo.osVersion}-${osInfo.osName}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||||
|                 restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osRelease}-python-${this.pythonVersion}-${this.packageManager}`; |                 restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osInfo.osVersion}-${osInfo.osName}-python-${this.pythonVersion}-${this.packageManager}`; | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; |                 primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||||
| @ -66401,8 +66401,11 @@ function useCpythonVersion(version, architecture, updateEnvironment, checkLatest | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (!installDir) { |         if (!installDir) { | ||||||
|  |             const osInfo = yield utils_1.getOSInfo(); | ||||||
|             throw new Error([ |             throw new Error([ | ||||||
|                 `Version ${version} with arch ${architecture} not found`, |                 `The version '${version}' with architecture '${architecture}' was not found for ${osInfo | ||||||
|  |                     ? `${osInfo.osName} ${osInfo.osVersion}` | ||||||
|  |                     : 'this operating system'}.`,
 | ||||||
|                 `The list of all available versions can be found here: ${installer.MANIFEST_URL}` |                 `The list of all available versions can be found here: ${installer.MANIFEST_URL}` | ||||||
|             ].join(os.EOL)); |             ].join(os.EOL)); | ||||||
|         } |         } | ||||||
| @ -66975,7 +66978,7 @@ 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.logWarning = 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_MAC = exports.IS_LINUX = exports.IS_WINDOWS = void 0; | exports.getOSInfo = exports.getLinuxInfo = exports.logWarning = 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_MAC = 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)); | ||||||
| @ -67066,22 +67069,64 @@ 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; |  | ||||||
| function logWarning(message) { | function logWarning(message) { | ||||||
|     const warningPrefix = '[warning]'; |     const warningPrefix = '[warning]'; | ||||||
|     core.info(`${warningPrefix}${message}`); |     core.info(`${warningPrefix}${message}`); | ||||||
| } | } | ||||||
| exports.logWarning = logWarning; | exports.logWarning = logWarning; | ||||||
|  | function getWindowsInfo() { | ||||||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |         const { stdout } = yield exec.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', undefined, { | ||||||
|  |             silent: true | ||||||
|  |         }); | ||||||
|  |         const windowsVersion = stdout.trim().split(' ')[3]; | ||||||
|  |         return { osName: 'Windows', osVersion: windowsVersion }; | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | function getMacOSInfo() { | ||||||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |         const { stdout } = yield exec.getExecOutput('sw_vers', ['-productVersion'], { | ||||||
|  |             silent: true | ||||||
|  |         }); | ||||||
|  |         const macOSVersion = stdout.trim(); | ||||||
|  |         return { osName: 'macOS', osVersion: macOSVersion }; | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | function getLinuxInfo() { | ||||||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |         const { stdout } = yield exec.getExecOutput('lsb_release', ['-i', '-r', '-s'], { | ||||||
|  |             silent: true | ||||||
|  |         }); | ||||||
|  |         const [osName, osVersion] = stdout.trim().split('\n'); | ||||||
|  |         core.debug(`OS Name: ${osName}, Version: ${osVersion}`); | ||||||
|  |         return { osName: osName, osVersion: osVersion }; | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | exports.getLinuxInfo = getLinuxInfo; | ||||||
|  | function getOSInfo() { | ||||||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |         let osInfo; | ||||||
|  |         try { | ||||||
|  |             if (exports.IS_WINDOWS) { | ||||||
|  |                 osInfo = yield getWindowsInfo(); | ||||||
|  |             } | ||||||
|  |             else if (exports.IS_LINUX) { | ||||||
|  |                 osInfo = yield getLinuxInfo(); | ||||||
|  |             } | ||||||
|  |             else if (exports.IS_MAC) { | ||||||
|  |                 osInfo = yield getMacOSInfo(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         catch (err) { | ||||||
|  |             const error = err; | ||||||
|  |             core.debug(error.message); | ||||||
|  |         } | ||||||
|  |         finally { | ||||||
|  |             return osInfo; | ||||||
|  |         } | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | exports.getOSInfo = getOSInfo; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
|  | |||||||
| @ -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 {getLinuxOSReleaseInfo, IS_LINUX, IS_WINDOWS} from '../utils'; | import {getLinuxInfo, IS_LINUX, IS_WINDOWS} from '../utils'; | ||||||
| 
 | 
 | ||||||
| class PipCache extends CacheDistributor { | class PipCache extends CacheDistributor { | ||||||
|   constructor( |   constructor( | ||||||
| @ -61,9 +61,9 @@ class PipCache extends CacheDistributor { | |||||||
|     let restoreKey = ''; |     let restoreKey = ''; | ||||||
| 
 | 
 | ||||||
|     if (IS_LINUX) { |     if (IS_LINUX) { | ||||||
|       const osRelease = await getLinuxOSReleaseInfo(); |       const osInfo = await getLinuxInfo(); | ||||||
|       primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osRelease}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; |       primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osInfo.osVersion}-${osInfo.osName}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; | ||||||
|       restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osRelease}-python-${this.pythonVersion}-${this.packageManager}`; |       restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${osInfo.osVersion}-${osInfo.osName}-python-${this.pythonVersion}-${this.packageManager}`; | ||||||
|     } else { |     } else { | ||||||
|       primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; |       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}`; |       restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`; | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| import * as os from 'os'; | import * as os from 'os'; | ||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| import {IS_WINDOWS, IS_LINUX} from './utils'; | import {IS_WINDOWS, IS_LINUX, getOSInfo} from './utils'; | ||||||
| 
 | 
 | ||||||
| import * as semver from 'semver'; | import * as semver from 'semver'; | ||||||
| 
 | 
 | ||||||
| @ -85,9 +85,14 @@ export async function useCpythonVersion( | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   if (!installDir) { |   if (!installDir) { | ||||||
|  |     const osInfo = await getOSInfo(); | ||||||
|     throw new Error( |     throw new Error( | ||||||
|       [ |       [ | ||||||
|         `Version ${version} with arch ${architecture} not found`, |         `The version '${version}' with architecture '${architecture}' was not found for ${ | ||||||
|  |           osInfo | ||||||
|  |             ? `${osInfo.osName} ${osInfo.osVersion}` | ||||||
|  |             : 'this operating system' | ||||||
|  |         }.`,
 | ||||||
|         `The list of all available versions can be found here: ${installer.MANIFEST_URL}` |         `The list of all available versions can be found here: ${installer.MANIFEST_URL}` | ||||||
|       ].join(os.EOL) |       ].join(os.EOL) | ||||||
|     ); |     ); | ||||||
|  | |||||||
							
								
								
									
										60
									
								
								src/utils.ts
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								src/utils.ts
									
									
									
									
									
								
							| @ -122,23 +122,61 @@ export function isCacheFeatureAvailable(): boolean { | |||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export async function getLinuxOSReleaseInfo() { | export function logWarning(message: string): void { | ||||||
|   const {stdout, stderr, exitCode} = await exec.getExecOutput( |   const warningPrefix = '[warning]'; | ||||||
|     'lsb_release', |   core.info(`${warningPrefix}${message}`); | ||||||
|     ['-i', '-r', '-s'], | } | ||||||
|  | 
 | ||||||
|  | async function getWindowsInfo() { | ||||||
|  |   const {stdout} = await exec.getExecOutput( | ||||||
|  |     'powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', | ||||||
|  |     undefined, | ||||||
|     { |     { | ||||||
|       silent: true |       silent: true | ||||||
|     } |     } | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   const [osRelease, osVersion] = stdout.trim().split('\n'); |   const windowsVersion = stdout.trim().split(' ')[3]; | ||||||
| 
 | 
 | ||||||
|   core.debug(`OS Release: ${osRelease}, Version: ${osVersion}`); |   return {osName: 'Windows', osVersion: windowsVersion}; | ||||||
| 
 |  | ||||||
|   return `${osVersion}-${osRelease}`; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export function logWarning(message: string): void { | async function getMacOSInfo() { | ||||||
|   const warningPrefix = '[warning]'; |   const {stdout} = await exec.getExecOutput('sw_vers', ['-productVersion'], { | ||||||
|   core.info(`${warningPrefix}${message}`); |     silent: true | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   const macOSVersion = stdout.trim(); | ||||||
|  | 
 | ||||||
|  |   return {osName: 'macOS', osVersion: macOSVersion}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export async function getLinuxInfo() { | ||||||
|  |   const {stdout} = await exec.getExecOutput('lsb_release', ['-i', '-r', '-s'], { | ||||||
|  |     silent: true | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   const [osName, osVersion] = stdout.trim().split('\n'); | ||||||
|  | 
 | ||||||
|  |   core.debug(`OS Name: ${osName}, Version: ${osVersion}`); | ||||||
|  | 
 | ||||||
|  |   return {osName: osName, osVersion: osVersion}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export async function getOSInfo() { | ||||||
|  |   let osInfo; | ||||||
|  |   try { | ||||||
|  |     if (IS_WINDOWS) { | ||||||
|  |       osInfo = await getWindowsInfo(); | ||||||
|  |     } else if (IS_LINUX) { | ||||||
|  |       osInfo = await getLinuxInfo(); | ||||||
|  |     } else if (IS_MAC) { | ||||||
|  |       osInfo = await getMacOSInfo(); | ||||||
|  |     } | ||||||
|  |   } catch (err) { | ||||||
|  |     const error = err as Error; | ||||||
|  |     core.debug(error.message); | ||||||
|  |   } finally { | ||||||
|  |     return osInfo; | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user