Merge pull request #872 from akv-platform/add-notice-about-binaries-not-being-updated
Add notice about binaries not being updated yet
This commit is contained in:
		
						commit
						6e9e44895f
					
				| @ -357,6 +357,41 @@ describe('setup-node', () => { | |||||||
|     expect(cnSpy).toHaveBeenCalledWith(`::error::${errMsg}${osm.EOL}`); |     expect(cnSpy).toHaveBeenCalledWith(`::error::${errMsg}${osm.EOL}`); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|  |   it('reports when download failed but version exists', async () => { | ||||||
|  |     os.platform = 'linux'; | ||||||
|  |     os.arch = 'x64'; | ||||||
|  | 
 | ||||||
|  |     // a version which is not in the manifest but is in node dist
 | ||||||
|  |     const versionSpec = '11.15.0'; | ||||||
|  | 
 | ||||||
|  |     inputs['node-version'] = versionSpec; | ||||||
|  |     inputs['always-auth'] = false; | ||||||
|  |     inputs['token'] = 'faketoken'; | ||||||
|  | 
 | ||||||
|  |     // ... but not in the local cache
 | ||||||
|  |     findSpy.mockImplementation(() => ''); | ||||||
|  | 
 | ||||||
|  |     dlSpy.mockImplementationOnce(async () => { | ||||||
|  |       throw new tc.HTTPError(404); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     await main.run(); | ||||||
|  | 
 | ||||||
|  |     expect(getManifestSpy).toHaveBeenCalled(); | ||||||
|  |     expect(logSpy).toHaveBeenCalledWith( | ||||||
|  |       `Attempting to download ${versionSpec}...` | ||||||
|  |     ); | ||||||
|  |     expect(logSpy).toHaveBeenCalledWith( | ||||||
|  |       'Not found in manifest. Falling back to download directly from Node' | ||||||
|  |     ); | ||||||
|  |     expect(dlSpy).toHaveBeenCalled(); | ||||||
|  |     expect(warningSpy).toHaveBeenCalledWith( | ||||||
|  |       `Node version ${versionSpec} for platform ${os.platform} and architecture ${os.arch} was found but failed to download. ` + | ||||||
|  |         'This usually happens when downloadable binaries are not fully updated at https://nodejs.org/. ' + | ||||||
|  |         'To resolve this issue you may either fall back to the older version or try again later.' | ||||||
|  |     ); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|   it('acquires specified architecture of node', async () => { |   it('acquires specified architecture of node', async () => { | ||||||
|     for (const {arch, version, osSpec} of [ |     for (const {arch, version, osSpec} of [ | ||||||
|       {arch: 'x86', version: '12.16.2', osSpec: 'win32'}, |       {arch: 'x86', version: '12.16.2', osSpec: 'win32'}, | ||||||
|  | |||||||
							
								
								
									
										90
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										90
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -72783,45 +72783,38 @@ class OfficialBuilds extends base_distribution_1.default { | |||||||
|             let toolPath = this.findVersionInHostedToolCacheDirectory(); |             let toolPath = this.findVersionInHostedToolCacheDirectory(); | ||||||
|             if (toolPath) { |             if (toolPath) { | ||||||
|                 core.info(`Found in cache @ ${toolPath}`); |                 core.info(`Found in cache @ ${toolPath}`); | ||||||
|  |                 this.addToolPath(toolPath); | ||||||
|  |                 return; | ||||||
|             } |             } | ||||||
|             else { |             let downloadPath = ''; | ||||||
|                 let downloadPath = ''; |             try { | ||||||
|                 try { |                 core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`); | ||||||
|                     core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`); |                 const versionInfo = yield this.getInfoFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, osArch, manifest); | ||||||
|                     const versionInfo = yield this.getInfoFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, osArch, manifest); |                 if (versionInfo) { | ||||||
|                     if (versionInfo) { |                     core.info(`Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}`); | ||||||
|                         core.info(`Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}`); |                     downloadPath = yield tc.downloadTool(versionInfo.downloadUrl, undefined, this.nodeInfo.auth); | ||||||
|                         downloadPath = yield tc.downloadTool(versionInfo.downloadUrl, undefined, this.nodeInfo.auth); |                     if (downloadPath) { | ||||||
|                         if (downloadPath) { |                         toolPath = yield this.extractArchive(downloadPath, versionInfo); | ||||||
|                             toolPath = yield this.extractArchive(downloadPath, versionInfo); |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                     else { |  | ||||||
|                         core.info('Not found in manifest. Falling back to download directly from Node'); |  | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 catch (err) { |                 else { | ||||||
|                     // Rate limit?
 |                     core.info('Not found in manifest. Falling back to download directly from Node'); | ||||||
|                     if (err instanceof tc.HTTPError && |  | ||||||
|                         (err.httpStatusCode === 403 || err.httpStatusCode === 429)) { |  | ||||||
|                         core.info(`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`); |  | ||||||
|                     } |  | ||||||
|                     else { |  | ||||||
|                         core.info(err.message); |  | ||||||
|                     } |  | ||||||
|                     core.debug((_a = err.stack) !== null && _a !== void 0 ? _a : 'empty stack'); |  | ||||||
|                     core.info('Falling back to download directly from Node'); |  | ||||||
|                 } |                 } | ||||||
|                 if (!toolPath) { |             } | ||||||
|                     const nodeJsVersions = yield this.getNodeJsVersions(); |             catch (err) { | ||||||
|                     const versions = this.filterVersions(nodeJsVersions); |                 // Rate limit?
 | ||||||
|                     const evaluatedVersion = this.evaluateVersions(versions); |                 if (err instanceof tc.HTTPError && | ||||||
|                     if (!evaluatedVersion) { |                     (err.httpStatusCode === 403 || err.httpStatusCode === 429)) { | ||||||
|                         throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`); |                     core.info(`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`); | ||||||
|                     } |  | ||||||
|                     const toolName = this.getNodejsDistInfo(evaluatedVersion); |  | ||||||
|                     toolPath = yield this.downloadNodejs(toolName); |  | ||||||
|                 } |                 } | ||||||
|  |                 else { | ||||||
|  |                     core.info(err.message); | ||||||
|  |                 } | ||||||
|  |                 core.debug((_a = err.stack) !== null && _a !== void 0 ? _a : 'empty stack'); | ||||||
|  |                 core.info('Falling back to download directly from Node'); | ||||||
|  |             } | ||||||
|  |             if (!toolPath) { | ||||||
|  |                 toolPath = yield this.downloadDirectlyFromNode(); | ||||||
|             } |             } | ||||||
|             if (this.osPlat != 'win32') { |             if (this.osPlat != 'win32') { | ||||||
|                 toolPath = path_1.default.join(toolPath, 'bin'); |                 toolPath = path_1.default.join(toolPath, 'bin'); | ||||||
| @ -72829,6 +72822,35 @@ class OfficialBuilds extends base_distribution_1.default { | |||||||
|             core.addPath(toolPath); |             core.addPath(toolPath); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |     addToolPath(toolPath) { | ||||||
|  |         if (this.osPlat != 'win32') { | ||||||
|  |             toolPath = path_1.default.join(toolPath, 'bin'); | ||||||
|  |         } | ||||||
|  |         core.addPath(toolPath); | ||||||
|  |     } | ||||||
|  |     downloadDirectlyFromNode() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const nodeJsVersions = yield this.getNodeJsVersions(); | ||||||
|  |             const versions = this.filterVersions(nodeJsVersions); | ||||||
|  |             const evaluatedVersion = this.evaluateVersions(versions); | ||||||
|  |             if (!evaluatedVersion) { | ||||||
|  |                 throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`); | ||||||
|  |             } | ||||||
|  |             const toolName = this.getNodejsDistInfo(evaluatedVersion); | ||||||
|  |             try { | ||||||
|  |                 const toolPath = yield this.downloadNodejs(toolName); | ||||||
|  |                 return toolPath; | ||||||
|  |             } | ||||||
|  |             catch (error) { | ||||||
|  |                 if (error instanceof tc.HTTPError && error.httpStatusCode === 404) { | ||||||
|  |                     core.warning(`Node version ${this.nodeInfo.versionSpec} for platform ${this.osPlat} and architecture ${this.nodeInfo.arch} was found but failed to download. ` + | ||||||
|  |                         'This usually happens when downloadable binaries are not fully updated at https://nodejs.org/. ' + | ||||||
|  |                         'To resolve this issue you may either fall back to the older version or try again later.'); | ||||||
|  |                 } | ||||||
|  |                 throw error; | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|     evaluateVersions(versions) { |     evaluateVersions(versions) { | ||||||
|         let version = ''; |         let version = ''; | ||||||
|         if (this.isLatestSyntax(this.nodeInfo.versionSpec)) { |         if (this.isLatestSyntax(this.nodeInfo.versionSpec)) { | ||||||
|  | |||||||
| @ -18,6 +18,7 @@ export default class OfficialBuilds extends BaseDistribution { | |||||||
|     let manifest: tc.IToolRelease[] | undefined; |     let manifest: tc.IToolRelease[] | undefined; | ||||||
|     let nodeJsVersions: INodeVersion[] | undefined; |     let nodeJsVersions: INodeVersion[] | undefined; | ||||||
|     const osArch = this.translateArchToDistUrl(this.nodeInfo.arch); |     const osArch = this.translateArchToDistUrl(this.nodeInfo.arch); | ||||||
|  | 
 | ||||||
|     if (this.isLtsAlias(this.nodeInfo.versionSpec)) { |     if (this.isLtsAlias(this.nodeInfo.versionSpec)) { | ||||||
|       core.info('Attempt to resolve LTS alias from manifest...'); |       core.info('Attempt to resolve LTS alias from manifest...'); | ||||||
| 
 | 
 | ||||||
| @ -61,63 +62,57 @@ export default class OfficialBuilds extends BaseDistribution { | |||||||
| 
 | 
 | ||||||
|     if (toolPath) { |     if (toolPath) { | ||||||
|       core.info(`Found in cache @ ${toolPath}`); |       core.info(`Found in cache @ ${toolPath}`); | ||||||
|     } else { |       this.addToolPath(toolPath); | ||||||
|       let downloadPath = ''; |       return; | ||||||
|       try { |     } | ||||||
|         core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`); |  | ||||||
| 
 | 
 | ||||||
|         const versionInfo = await this.getInfoFromManifest( |     let downloadPath = ''; | ||||||
|           this.nodeInfo.versionSpec, |     try { | ||||||
|           this.nodeInfo.stable, |       core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`); | ||||||
|           osArch, | 
 | ||||||
|           manifest |       const versionInfo = await this.getInfoFromManifest( | ||||||
|  |         this.nodeInfo.versionSpec, | ||||||
|  |         this.nodeInfo.stable, | ||||||
|  |         osArch, | ||||||
|  |         manifest | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       if (versionInfo) { | ||||||
|  |         core.info( | ||||||
|  |           `Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}` | ||||||
|  |         ); | ||||||
|  |         downloadPath = await tc.downloadTool( | ||||||
|  |           versionInfo.downloadUrl, | ||||||
|  |           undefined, | ||||||
|  |           this.nodeInfo.auth | ||||||
|         ); |         ); | ||||||
|         if (versionInfo) { |  | ||||||
|           core.info( |  | ||||||
|             `Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}` |  | ||||||
|           ); |  | ||||||
|           downloadPath = await tc.downloadTool( |  | ||||||
|             versionInfo.downloadUrl, |  | ||||||
|             undefined, |  | ||||||
|             this.nodeInfo.auth |  | ||||||
|           ); |  | ||||||
| 
 | 
 | ||||||
|           if (downloadPath) { |         if (downloadPath) { | ||||||
|             toolPath = await this.extractArchive(downloadPath, versionInfo); |           toolPath = await this.extractArchive(downloadPath, versionInfo); | ||||||
|           } |  | ||||||
|         } else { |  | ||||||
|           core.info( |  | ||||||
|             'Not found in manifest. Falling back to download directly from Node' |  | ||||||
|           ); |  | ||||||
|         } |         } | ||||||
|       } catch (err) { |       } else { | ||||||
|         // Rate limit?
 |         core.info( | ||||||
|         if ( |           'Not found in manifest. Falling back to download directly from Node' | ||||||
|           err instanceof tc.HTTPError && |         ); | ||||||
|           (err.httpStatusCode === 403 || err.httpStatusCode === 429) |  | ||||||
|         ) { |  | ||||||
|           core.info( |  | ||||||
|             `Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded` |  | ||||||
|           ); |  | ||||||
|         } else { |  | ||||||
|           core.info((err as Error).message); |  | ||||||
|         } |  | ||||||
|         core.debug((err as Error).stack ?? 'empty stack'); |  | ||||||
|         core.info('Falling back to download directly from Node'); |  | ||||||
|       } |       } | ||||||
|  |     } catch (err) { | ||||||
|  |       // Rate limit?
 | ||||||
|  |       if ( | ||||||
|  |         err instanceof tc.HTTPError && | ||||||
|  |         (err.httpStatusCode === 403 || err.httpStatusCode === 429) | ||||||
|  |       ) { | ||||||
|  |         core.info( | ||||||
|  |           `Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded` | ||||||
|  |         ); | ||||||
|  |       } else { | ||||||
|  |         core.info((err as Error).message); | ||||||
|  |       } | ||||||
|  |       core.debug((err as Error).stack ?? 'empty stack'); | ||||||
|  |       core.info('Falling back to download directly from Node'); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|       if (!toolPath) { |     if (!toolPath) { | ||||||
|         const nodeJsVersions = await this.getNodeJsVersions(); |       toolPath = await this.downloadDirectlyFromNode(); | ||||||
|         const versions = this.filterVersions(nodeJsVersions); |  | ||||||
|         const evaluatedVersion = this.evaluateVersions(versions); |  | ||||||
|         if (!evaluatedVersion) { |  | ||||||
|           throw new Error( |  | ||||||
|             `Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.` |  | ||||||
|           ); |  | ||||||
|         } |  | ||||||
|         const toolName = this.getNodejsDistInfo(evaluatedVersion); |  | ||||||
|         toolPath = await this.downloadNodejs(toolName); |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (this.osPlat != 'win32') { |     if (this.osPlat != 'win32') { | ||||||
| @ -127,6 +122,43 @@ export default class OfficialBuilds extends BaseDistribution { | |||||||
|     core.addPath(toolPath); |     core.addPath(toolPath); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   protected addToolPath(toolPath: string) { | ||||||
|  |     if (this.osPlat != 'win32') { | ||||||
|  |       toolPath = path.join(toolPath, 'bin'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     core.addPath(toolPath); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   protected async downloadDirectlyFromNode() { | ||||||
|  |     const nodeJsVersions = await this.getNodeJsVersions(); | ||||||
|  |     const versions = this.filterVersions(nodeJsVersions); | ||||||
|  |     const evaluatedVersion = this.evaluateVersions(versions); | ||||||
|  | 
 | ||||||
|  |     if (!evaluatedVersion) { | ||||||
|  |       throw new Error( | ||||||
|  |         `Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.` | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const toolName = this.getNodejsDistInfo(evaluatedVersion); | ||||||
|  | 
 | ||||||
|  |     try { | ||||||
|  |       const toolPath = await this.downloadNodejs(toolName); | ||||||
|  |       return toolPath; | ||||||
|  |     } catch (error) { | ||||||
|  |       if (error instanceof tc.HTTPError && error.httpStatusCode === 404) { | ||||||
|  |         core.warning( | ||||||
|  |           `Node version ${this.nodeInfo.versionSpec} for platform ${this.osPlat} and architecture ${this.nodeInfo.arch} was found but failed to download. ` + | ||||||
|  |             'This usually happens when downloadable binaries are not fully updated at https://nodejs.org/. ' + | ||||||
|  |             'To resolve this issue you may either fall back to the older version or try again later.' | ||||||
|  |         ); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       throw error; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   protected evaluateVersions(versions: string[]): string { |   protected evaluateVersions(versions: string[]): string { | ||||||
|     let version = ''; |     let version = ''; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user