mirror of
				https://github.com/actions/setup-node.git
				synced 2025-10-31 08:04:00 +08:00 
			
		
		
		
	Caching on GHES (#452)
* add support for ghes caching * fix licesnses * work on resolving comments * change internal error to warning * fix warning for internal errors * update version
This commit is contained in:
		| @@ -1,37 +1,28 @@ | ||||
| import * as core from '@actions/core'; | ||||
| import * as cache from '@actions/cache'; | ||||
| import path from 'path'; | ||||
| import * as utils from '../src/cache-utils'; | ||||
| import {PackageManagerInfo} from '../src/cache-utils'; | ||||
| import {PackageManagerInfo, isCacheFeatureAvailable} from '../src/cache-utils'; | ||||
|  | ||||
| describe('cache-utils', () => { | ||||
|   const commonPath = '/some/random/path'; | ||||
|   const versionYarn1 = '1.2.3'; | ||||
|   const versionYarn2 = '2.3.4'; | ||||
|  | ||||
|   let debugSpy: jest.SpyInstance; | ||||
|   let getCommandOutputSpy: jest.SpyInstance; | ||||
|  | ||||
|   function getPackagePath(name: string) { | ||||
|     if (name === utils.supportedPackageManagers.npm.getCacheFolderCommand) { | ||||
|       return `${commonPath}/npm`; | ||||
|     } else if ( | ||||
|       name === utils.supportedPackageManagers.pnpm.getCacheFolderCommand | ||||
|     ) { | ||||
|       return `${commonPath}/pnpm`; | ||||
|     } else { | ||||
|       if (name === utils.supportedPackageManagers.yarn1.getCacheFolderCommand) { | ||||
|         return `${commonPath}/yarn1`; | ||||
|       } else { | ||||
|         return `${commonPath}/yarn2`; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   let isFeatureAvailable: jest.SpyInstance; | ||||
|   let info: jest.SpyInstance; | ||||
|   let warningSpy: jest.SpyInstance; | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     process.env['GITHUB_WORKSPACE'] = path.join(__dirname, 'data'); | ||||
|     debugSpy = jest.spyOn(core, 'debug'); | ||||
|     debugSpy.mockImplementation(msg => {}); | ||||
|  | ||||
|     info = jest.spyOn(core, 'info'); | ||||
|     warningSpy = jest.spyOn(core, 'warning'); | ||||
|  | ||||
|     isFeatureAvailable = jest.spyOn(cache, 'isFeatureAvailable'); | ||||
|  | ||||
|     getCommandOutputSpy = jest.spyOn(utils, 'getCommandOutput'); | ||||
|   }); | ||||
|  | ||||
| @@ -51,7 +42,32 @@ describe('cache-utils', () => { | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   it('isCacheFeatureAvailable for GHES is false', () => { | ||||
|     isFeatureAvailable.mockImplementation(() => false); | ||||
|     process.env['GITHUB_SERVER_URL'] = 'https://www.test.com'; | ||||
|  | ||||
|     expect(() => isCacheFeatureAvailable()).toThrowError( | ||||
|       'Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('isCacheFeatureAvailable for GHES has an interhal error', () => { | ||||
|     isFeatureAvailable.mockImplementation(() => false); | ||||
|     process.env['GITHUB_SERVER_URL'] = ''; | ||||
|     isCacheFeatureAvailable(); | ||||
|     expect(warningSpy).toHaveBeenCalledWith( | ||||
|       'The runner was not able to contact the cache service. Caching will be skipped' | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('isCacheFeatureAvailable for GHES is available', () => { | ||||
|     isFeatureAvailable.mockImplementation(() => true); | ||||
|  | ||||
|     expect(isCacheFeatureAvailable()).toStrictEqual(true); | ||||
|   }); | ||||
|  | ||||
|   afterEach(() => { | ||||
|     process.env['GITHUB_SERVER_URL'] = ''; | ||||
|     jest.resetAllMocks(); | ||||
|     jest.clearAllMocks(); | ||||
|   }); | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import * as core from '@actions/core'; | ||||
| import * as io from '@actions/io'; | ||||
| import * as tc from '@actions/tool-cache'; | ||||
| import * as im from '../src/installer'; | ||||
| import * as cache from '@actions/cache'; | ||||
| import fs from 'fs'; | ||||
| import cp from 'child_process'; | ||||
| import osm = require('os'); | ||||
| @@ -36,6 +37,7 @@ describe('setup-node', () => { | ||||
|   let execSpy: jest.SpyInstance; | ||||
|   let authSpy: jest.SpyInstance; | ||||
|   let parseNodeVersionSpy: jest.SpyInstance; | ||||
|   let isCacheActionAvailable: jest.SpyInstance; | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     // @actions/core | ||||
| @@ -67,6 +69,9 @@ describe('setup-node', () => { | ||||
|     existsSpy = jest.spyOn(fs, 'existsSync'); | ||||
|     mkdirpSpy = jest.spyOn(io, 'mkdirP'); | ||||
|  | ||||
|     // @actions/tool-cache | ||||
|     isCacheActionAvailable = jest.spyOn(cache, 'isFeatureAvailable'); | ||||
|  | ||||
|     // disable authentication portion for installer tests | ||||
|     authSpy = jest.spyOn(auth, 'configAuthentication'); | ||||
|     authSpy.mockImplementation(() => {}); | ||||
| @@ -644,6 +649,49 @@ describe('setup-node', () => { | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   describe('cache on GHES', () => { | ||||
|     it('Should throw an error, because cache is not supported', async () => { | ||||
|       inputs['node-version'] = '12'; | ||||
|       inputs['cache'] = 'npm'; | ||||
|  | ||||
|       inSpy.mockImplementation(name => inputs[name]); | ||||
|  | ||||
|       let toolPath = path.normalize('/cache/node/12.16.1/x64'); | ||||
|       findSpy.mockImplementation(() => toolPath); | ||||
|  | ||||
|       // expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`); | ||||
|       process.env['GITHUB_SERVER_URL'] = 'https://www.test.com'; | ||||
|       isCacheActionAvailable.mockImplementation(() => false); | ||||
|  | ||||
|       await main.run(); | ||||
|  | ||||
|       expect(cnSpy).toHaveBeenCalledWith( | ||||
|         `::error::Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.${osm.EOL}` | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('Should throw an internal error', async () => { | ||||
|       inputs['node-version'] = '12'; | ||||
|       inputs['cache'] = 'npm'; | ||||
|  | ||||
|       inSpy.mockImplementation(name => inputs[name]); | ||||
|  | ||||
|       let toolPath = path.normalize('/cache/node/12.16.1/x64'); | ||||
|       findSpy.mockImplementation(() => toolPath); | ||||
|  | ||||
|       // expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`); | ||||
|       process.env['GITHUB_SERVER_URL'] = ''; | ||||
|       isCacheActionAvailable.mockImplementation(() => false); | ||||
|  | ||||
|       await main.run(); | ||||
|  | ||||
|       expect(warningSpy).toHaveBeenCalledWith( | ||||
|         'The runner was not able to contact the cache service. Caching will be skipped' | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   describe('LTS version', () => { | ||||
|     beforeEach(() => { | ||||
|       os.platform = 'linux'; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Dmitry Shibanov
					Dmitry Shibanov