mirror of
				https://gitea.com/actions/setup-python.git
				synced 2025-10-31 09:08:07 +07:00 
			
		
		
		
	Cache on ghes (#363)
* initial changes * updated version * format check * refactored code * updated test cases * Update src/utils.ts Co-authored-by: Brian Cristante <33549821+brcrista@users.noreply.github.com> * Update utils.ts * Update utils.test.ts * review comments * dist update * Review comment * update version * updated version Co-authored-by: Brian Cristante <33549821+brcrista@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									6c566026c0
								
							
						
					
					
						commit
						05fb98de9a
					
				
							
								
								
									
										2
									
								
								.licenses/npm/@actions/cache.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/@actions/cache.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,6 +1,6 @@ | |||||||
| --- | --- | ||||||
| name: "@actions/cache" | name: "@actions/cache" | ||||||
| version: 1.0.8 | version: 2.0.0 | ||||||
| type: npm | type: npm | ||||||
| summary: Actions cache lib | summary: Actions cache lib | ||||||
| homepage: https://github.com/actions/toolkit/tree/main/packages/cache | homepage: https://github.com/actions/toolkit/tree/main/packages/cache | ||||||
|  | |||||||
| @ -1,8 +1,14 @@ | |||||||
|  | import * as cache from '@actions/cache'; | ||||||
|  | import * as core from '@actions/core'; | ||||||
| import { | import { | ||||||
|   validateVersion, |   validateVersion, | ||||||
|   validatePythonVersionFormatForPyPy |   validatePythonVersionFormatForPyPy, | ||||||
|  |   isCacheFeatureAvailable | ||||||
| } from '../src/utils'; | } from '../src/utils'; | ||||||
| 
 | 
 | ||||||
|  | jest.mock('@actions/cache'); | ||||||
|  | jest.mock('@actions/core'); | ||||||
|  | 
 | ||||||
| describe('validatePythonVersionFormatForPyPy', () => { | describe('validatePythonVersionFormatForPyPy', () => { | ||||||
|   it.each([ |   it.each([ | ||||||
|     ['3.6', true], |     ['3.6', true], | ||||||
| @ -32,3 +38,39 @@ describe('validateVersion', () => { | |||||||
|     expect(validateVersion(input)).toEqual(expected); |     expect(validateVersion(input)).toEqual(expected); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | 
 | ||||||
|  | describe('isCacheFeatureAvailable', () => { | ||||||
|  |   it('isCacheFeatureAvailable disabled on GHES', () => { | ||||||
|  |     jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => false); | ||||||
|  |     try { | ||||||
|  |       process.env['GITHUB_SERVER_URL'] = 'http://example.com'; | ||||||
|  |       isCacheFeatureAvailable(); | ||||||
|  |     } catch (error) { | ||||||
|  |       expect(error).toHaveProperty( | ||||||
|  |         'message', | ||||||
|  |         'Caching is only supported on GHES version >= 3.5. If you are on a version >= 3.5, please check with your GHES admin if the Actions cache service is enabled or not.' | ||||||
|  |       ); | ||||||
|  |     } finally { | ||||||
|  |       delete process.env['GITHUB_SERVER_URL']; | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('isCacheFeatureAvailable disabled on dotcom', () => { | ||||||
|  |     jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => false); | ||||||
|  |     const infoMock = jest.spyOn(core, 'warning'); | ||||||
|  |     const message = | ||||||
|  |       'The runner was not able to contact the cache service. Caching will be skipped'; | ||||||
|  |     try { | ||||||
|  |       process.env['GITHUB_SERVER_URL'] = 'http://github.com'; | ||||||
|  |       expect(isCacheFeatureAvailable()).toBe(false); | ||||||
|  |       expect(infoMock).toHaveBeenCalledWith(message); | ||||||
|  |     } finally { | ||||||
|  |       delete process.env['GITHUB_SERVER_URL']; | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('isCacheFeatureAvailable is enabled', () => { | ||||||
|  |     jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => true); | ||||||
|  |     expect(isCacheFeatureAvailable()).toBe(true); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  | |||||||
							
								
								
									
										17
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							| @ -3728,10 +3728,7 @@ const options_1 = __webpack_require__(538); | |||||||
| const requestUtils_1 = __webpack_require__(899); | const requestUtils_1 = __webpack_require__(899); | ||||||
| const versionSalt = '1.0'; | const versionSalt = '1.0'; | ||||||
| function getCacheApiUrl(resource) { | function getCacheApiUrl(resource) { | ||||||
|     // Ideally we just use ACTIONS_CACHE_URL
 |     const baseUrl = process.env['ACTIONS_CACHE_URL'] || ''; | ||||||
|     const baseUrl = (process.env['ACTIONS_CACHE_URL'] || |  | ||||||
|         process.env['ACTIONS_RUNTIME_URL'] || |  | ||||||
|         '').replace('pipelines', 'artifactcache'); |  | ||||||
|     if (!baseUrl) { |     if (!baseUrl) { | ||||||
|         throw new Error('Cache Service Url not found, unable to restore cache.'); |         throw new Error('Cache Service Url not found, unable to restore cache.'); | ||||||
|     } |     } | ||||||
| @ -5920,7 +5917,8 @@ function downloadCacheStorageSDK(archiveLocation, archivePath, options) { | |||||||
|             //
 |             //
 | ||||||
|             // If the file exceeds the buffer maximum length (~1 GB on 32-bit systems and ~2 GB
 |             // If the file exceeds the buffer maximum length (~1 GB on 32-bit systems and ~2 GB
 | ||||||
|             // on 64-bit systems), split the download into multiple segments
 |             // on 64-bit systems), split the download into multiple segments
 | ||||||
|             const maxSegmentSize = buffer.constants.MAX_LENGTH; |             // ~2 GB = 2147483647, beyond this, we start getting out of range error. So, capping it accordingly.
 | ||||||
|  |             const maxSegmentSize = Math.min(2147483647, buffer.constants.MAX_LENGTH); | ||||||
|             const downloadProgress = new DownloadProgress(contentLength); |             const downloadProgress = new DownloadProgress(contentLength); | ||||||
|             const fd = fs.openSync(archivePath, 'w'); |             const fd = fs.openSync(archivePath, 'w'); | ||||||
|             try { |             try { | ||||||
| @ -41451,6 +41449,15 @@ function checkKey(key) { | |||||||
|         throw new ValidationError(`Key Validation Error: ${key} cannot contain commas.`); |         throw new ValidationError(`Key Validation Error: ${key} cannot contain commas.`); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | /** | ||||||
|  |  * isFeatureAvailable to check the presence of Actions cache service | ||||||
|  |  * | ||||||
|  |  * @returns boolean return true if Actions cache service feature is available, otherwise false | ||||||
|  |  */ | ||||||
|  | function isFeatureAvailable() { | ||||||
|  |     return !!process.env['ACTIONS_CACHE_URL']; | ||||||
|  | } | ||||||
|  | exports.isFeatureAvailable = isFeatureAvailable; | ||||||
| /** | /** | ||||||
|  * Restores cache from keys |  * Restores cache from keys | ||||||
|  * |  * | ||||||
|  | |||||||
							
								
								
									
										3527
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3527
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										26
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										26
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -1,15 +1,15 @@ | |||||||
| { | { | ||||||
|   "name": "setup-python", |   "name": "setup-python", | ||||||
|   "version": "2.2.2", |   "version": "3.1.0", | ||||||
|   "lockfileVersion": 2, |   "lockfileVersion": 2, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "packages": { |   "packages": { | ||||||
|     "": { |     "": { | ||||||
|       "name": "setup-python", |       "name": "setup-python", | ||||||
|       "version": "2.2.2", |       "version": "3.1.0", | ||||||
|       "license": "MIT", |       "license": "MIT", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/cache": "^1.0.8", |         "@actions/cache": "^2.0.0", | ||||||
|         "@actions/core": "^1.2.3", |         "@actions/core": "^1.2.3", | ||||||
|         "@actions/exec": "^1.1.0", |         "@actions/exec": "^1.1.0", | ||||||
|         "@actions/glob": "^0.2.0", |         "@actions/glob": "^0.2.0", | ||||||
| @ -31,17 +31,17 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@actions/cache": { |     "node_modules/@actions/cache": { | ||||||
|       "version": "1.0.8", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-1.0.8.tgz", |       "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-2.0.0.tgz", | ||||||
|       "integrity": "sha512-GWNNB67w93HGJRQXlsV56YqrdAuDoP3esK/mo5mzU8WoDCVjtQgJGsTdkYUX7brswtT7xnI30bWNo1WLKQ8FZQ==", |       "integrity": "sha512-d7n8ul6HjWX6oDrNEPoqn8ZvqyyDhp9Uek6WOxALyxGVsXU+8+ND+viD3UfrXVWfs/GQiqI5Eq4cOozZj0yRFQ==", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/core": "^1.2.6", |         "@actions/core": "^1.2.6", | ||||||
|         "@actions/exec": "^1.0.1", |         "@actions/exec": "^1.0.1", | ||||||
|         "@actions/glob": "^0.1.0", |         "@actions/glob": "^0.1.0", | ||||||
|         "@actions/http-client": "^1.0.9", |         "@actions/http-client": "^1.0.9", | ||||||
|         "@actions/io": "^1.0.1", |         "@actions/io": "^1.0.1", | ||||||
|         "@azure/ms-rest-js": "^2.0.7", |         "@azure/ms-rest-js": "^2.6.0", | ||||||
|         "@azure/storage-blob": "^12.1.2", |         "@azure/storage-blob": "^12.8.0", | ||||||
|         "semver": "^6.1.0", |         "semver": "^6.1.0", | ||||||
|         "uuid": "^3.3.3" |         "uuid": "^3.3.3" | ||||||
|       } |       } | ||||||
| @ -11338,17 +11338,17 @@ | |||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/cache": { |     "@actions/cache": { | ||||||
|       "version": "1.0.8", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-1.0.8.tgz", |       "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-2.0.0.tgz", | ||||||
|       "integrity": "sha512-GWNNB67w93HGJRQXlsV56YqrdAuDoP3esK/mo5mzU8WoDCVjtQgJGsTdkYUX7brswtT7xnI30bWNo1WLKQ8FZQ==", |       "integrity": "sha512-d7n8ul6HjWX6oDrNEPoqn8ZvqyyDhp9Uek6WOxALyxGVsXU+8+ND+viD3UfrXVWfs/GQiqI5Eq4cOozZj0yRFQ==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@actions/core": "^1.2.6", |         "@actions/core": "^1.2.6", | ||||||
|         "@actions/exec": "^1.0.1", |         "@actions/exec": "^1.0.1", | ||||||
|         "@actions/glob": "^0.1.0", |         "@actions/glob": "^0.1.0", | ||||||
|         "@actions/http-client": "^1.0.9", |         "@actions/http-client": "^1.0.9", | ||||||
|         "@actions/io": "^1.0.1", |         "@actions/io": "^1.0.1", | ||||||
|         "@azure/ms-rest-js": "^2.0.7", |         "@azure/ms-rest-js": "^2.6.0", | ||||||
|         "@azure/storage-blob": "^12.1.2", |         "@azure/storage-blob": "^12.8.0", | ||||||
|         "semver": "^6.1.0", |         "semver": "^6.1.0", | ||||||
|         "uuid": "^3.3.3" |         "uuid": "^3.3.3" | ||||||
|       }, |       }, | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "setup-python", |   "name": "setup-python", | ||||||
|   "version": "2.2.2", |   "version": "3.1.0", | ||||||
|   "private": true, |   "private": true, | ||||||
|   "description": "Setup python action", |   "description": "Setup python action", | ||||||
|   "main": "dist/index.js", |   "main": "dist/index.js", | ||||||
| @ -23,7 +23,7 @@ | |||||||
|   "author": "GitHub", |   "author": "GitHub", | ||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/cache": "^1.0.8", |     "@actions/cache": "^2.0.0", | ||||||
|     "@actions/core": "^1.2.3", |     "@actions/core": "^1.2.3", | ||||||
|     "@actions/exec": "^1.1.0", |     "@actions/exec": "^1.1.0", | ||||||
|     "@actions/glob": "^0.2.0", |     "@actions/glob": "^0.2.0", | ||||||
|  | |||||||
| @ -4,16 +4,13 @@ import * as finderPyPy from './find-pypy'; | |||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| import * as os from 'os'; | import * as os from 'os'; | ||||||
| import {getCacheDistributor} from './cache-distributions/cache-factory'; | import {getCacheDistributor} from './cache-distributions/cache-factory'; | ||||||
| import {isGhes} from './utils'; | import {isCacheFeatureAvailable} from './utils'; | ||||||
| 
 | 
 | ||||||
| function isPyPyVersion(versionSpec: string) { | function isPyPyVersion(versionSpec: string) { | ||||||
|   return versionSpec.startsWith('pypy-'); |   return versionSpec.startsWith('pypy-'); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async function cacheDependencies(cache: string, pythonVersion: string) { | async function cacheDependencies(cache: string, pythonVersion: string) { | ||||||
|   if (isGhes()) { |  | ||||||
|     throw new Error('Caching is not supported on GHES'); |  | ||||||
|   } |  | ||||||
|   const cacheDependencyPath = |   const cacheDependencyPath = | ||||||
|     core.getInput('cache-dependency-path') || undefined; |     core.getInput('cache-dependency-path') || undefined; | ||||||
|   const cacheDistributor = getCacheDistributor( |   const cacheDistributor = getCacheDistributor( | ||||||
| @ -43,7 +40,7 @@ async function run() { | |||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       const cache = core.getInput('cache'); |       const cache = core.getInput('cache'); | ||||||
|       if (cache) { |       if (cache && isCacheFeatureAvailable()) { | ||||||
|         await cacheDependencies(cache, pythonVersion); |         await cacheDependencies(cache, pythonVersion); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								src/utils.ts
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/utils.ts
									
									
									
									
									
								
							| @ -1,3 +1,5 @@ | |||||||
|  | import * as cache from '@actions/cache'; | ||||||
|  | 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'; | ||||||
| @ -99,3 +101,21 @@ export function isGhes(): boolean { | |||||||
|   ); |   ); | ||||||
|   return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; |   return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export function isCacheFeatureAvailable(): boolean { | ||||||
|  |   if (!cache.isFeatureAvailable()) { | ||||||
|  |     if (isGhes()) { | ||||||
|  |       throw new Error( | ||||||
|  |         'Caching is only supported on GHES version >= 3.5. If you are on a version >= 3.5, please check with your GHES admin if the Actions cache service is enabled or not.' | ||||||
|  |       ); | ||||||
|  |     } else { | ||||||
|  |       core.warning( | ||||||
|  |         'The runner was not able to contact the cache service. Caching will be skipped' | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return false; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return true; | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user