basic validation failure fix (#682)
This commit is contained in:
		
							parent
							
								
									7467385c61
								
							
						
					
					
						commit
						2dfa2011c5
					
				| @ -43,13 +43,13 @@ describe('getAvailableVersions', () => { | |||||||
|       spyHttpClient.mockReturnValueOnce({ |       spyHttpClient.mockReturnValueOnce({ | ||||||
|         statusCode: 404, |         statusCode: 404, | ||||||
|         headers: {}, |         headers: {}, | ||||||
|         result: "" |         result: '' | ||||||
|       }) |       }); | ||||||
|       spyHttpClient.mockReturnValueOnce({ |       spyHttpClient.mockReturnValueOnce({ | ||||||
|         statusCode: 200, |         statusCode: 200, | ||||||
|         headers: {}, |         headers: {}, | ||||||
|         result: manifestData |         result: manifestData | ||||||
|       }) |       }); | ||||||
| 
 | 
 | ||||||
|       const version = '17'; |       const version = '17'; | ||||||
|       const distribution = new SapMachineDistribution({ |       const distribution = new SapMachineDistribution({ | ||||||
| @ -65,8 +65,10 @@ describe('getAvailableVersions', () => { | |||||||
|         version |         version | ||||||
|       ); |       ); | ||||||
|       expect(availableVersion).not.toBeNull(); |       expect(availableVersion).not.toBeNull(); | ||||||
|       expect(availableVersion.url).toBe('https://github.com/SAP/SapMachine/releases/download/sapmachine-17.0.10/sapmachine-jdk-17.0.10_linux-x64_bin.tar.gz'); |       expect(availableVersion.url).toBe( | ||||||
|     }) |         'https://github.com/SAP/SapMachine/releases/download/sapmachine-17.0.10/sapmachine-jdk-17.0.10_linux-x64_bin.tar.gz' | ||||||
|  |       ); | ||||||
|  |     }); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   describe('getAvailableVersions', () => { |   describe('getAvailableVersions', () => { | ||||||
| @ -77,7 +79,7 @@ describe('getAvailableVersions', () => { | |||||||
|       ['16.0.1', 'x64', 'linux', 71], |       ['16.0.1', 'x64', 'linux', 71], | ||||||
|       ['23-ea', 'x64', 'linux', 798], |       ['23-ea', 'x64', 'linux', 798], | ||||||
|       ['23-ea', 'aarch64', 'windows', 0], |       ['23-ea', 'aarch64', 'windows', 0], | ||||||
|       ['23-ea', 'x64', 'windows', 750], |       ['23-ea', 'x64', 'windows', 750] | ||||||
|     ])( |     ])( | ||||||
|       'should get right number of available versions from JSON', |       'should get right number of available versions from JSON', | ||||||
|       async ( |       async ( | ||||||
| @ -209,7 +211,7 @@ describe('getAvailableVersions', () => { | |||||||
|         'x64', |         'x64', | ||||||
|         'jdk', |         'jdk', | ||||||
|         'https://github.com/SAP/SapMachine/releases/download/sapmachine-17.0.10/sapmachine-jdk-17.0.10_linux-x64-musl_bin.tar.gz' |         'https://github.com/SAP/SapMachine/releases/download/sapmachine-17.0.10/sapmachine-jdk-17.0.10_linux-x64-musl_bin.tar.gz' | ||||||
|       ], |       ] | ||||||
|     ])( |     ])( | ||||||
|       'should return proper link according to the specified java-version, platform and arch', |       'should return proper link according to the specified java-version, platform and arch', | ||||||
|       async ( |       async ( | ||||||
| @ -224,8 +226,7 @@ describe('getAvailableVersions', () => { | |||||||
|           version: version, |           version: version, | ||||||
|           architecture: arch, |           architecture: arch, | ||||||
|           packageType: packageType, |           packageType: packageType, | ||||||
|           checkLatest: false, |           checkLatest: false | ||||||
| 
 |  | ||||||
|         }); |         }); | ||||||
|         mockPlatform(distribution, platform); |         mockPlatform(distribution, platform); | ||||||
| 
 | 
 | ||||||
| @ -247,15 +248,20 @@ describe('getAvailableVersions', () => { | |||||||
|       ['8-ea', 'linux', 'x64', '8'], |       ['8-ea', 'linux', 'x64', '8'], | ||||||
|       ['21.0.3+7', 'linux', 'x64', '21.0.3+7'], |       ['21.0.3+7', 'linux', 'x64', '21.0.3+7'], | ||||||
|       ['21.0.3+8-ea', 'linux', 'x64', '21.0.3+8'], |       ['21.0.3+8-ea', 'linux', 'x64', '21.0.3+8'], | ||||||
|       ['17', 'linux-muse', 'aarch64'], |       ['17', 'linux-muse', 'aarch64'] | ||||||
|     ])( |     ])( | ||||||
|       'should throw when required version of JDK can not be found in the JSON', |       'should throw when required version of JDK can not be found in the JSON', | ||||||
|       async (version: string, platform: string, arch: string, normalizedVersion: string = version) => { |       async ( | ||||||
|  |         version: string, | ||||||
|  |         platform: string, | ||||||
|  |         arch: string, | ||||||
|  |         normalizedVersion: string = version | ||||||
|  |       ) => { | ||||||
|         const distribution = new SapMachineDistribution({ |         const distribution = new SapMachineDistribution({ | ||||||
|           version: version, |           version: version, | ||||||
|           architecture: arch, |           architecture: arch, | ||||||
|           packageType: 'jdk', |           packageType: 'jdk', | ||||||
|           checkLatest: false, |           checkLatest: false | ||||||
|         }); |         }); | ||||||
|         mockPlatform(distribution, platform); |         mockPlatform(distribution, platform); | ||||||
| 
 | 
 | ||||||
| @ -280,7 +286,9 @@ describe('getAvailableVersions', () => { | |||||||
|       mockPlatform(distribution, platform); |       mockPlatform(distribution, platform); | ||||||
|       await expect( |       await expect( | ||||||
|         distribution['findPackageForDownload'](jdkVersion) |         distribution['findPackageForDownload'](jdkVersion) | ||||||
|       ).rejects.toThrow('SapMachine provides only the `jdk` and `jre` package type'); |       ).rejects.toThrow( | ||||||
|  |         'SapMachine provides only the `jdk` and `jre` package type' | ||||||
|  |       ); | ||||||
|     }); |     }); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -125012,7 +125012,7 @@ class SapMachineDistribution extends base_installer_1.JavaBase { | |||||||
|                         continue; |                         continue; | ||||||
|                     } |                     } | ||||||
|                     // skip earlyAccessVersions if stable version requested
 |                     // skip earlyAccessVersions if stable version requested
 | ||||||
|                     if (this.stable && buildVersionMap.ea === "true") { |                     if (this.stable && buildVersionMap.ea === 'true') { | ||||||
|                         continue; |                         continue; | ||||||
|                     } |                     } | ||||||
|                     for (const [edition, editionAssets] of Object.entries(buildVersionMap.assets)) { |                     for (const [edition, editionAssets] of Object.entries(buildVersionMap.assets)) { | ||||||
| @ -125038,7 +125038,7 @@ class SapMachineDistribution extends base_installer_1.JavaBase { | |||||||
|                                     version: buildVersionWithoutPrefix, |                                     version: buildVersionWithoutPrefix, | ||||||
|                                     checksum: contentTypeAssets.checksum, |                                     checksum: contentTypeAssets.checksum, | ||||||
|                                     downloadLink: contentTypeAssets.url, |                                     downloadLink: contentTypeAssets.url, | ||||||
|                                     packageType: edition, |                                     packageType: edition | ||||||
|                                 }); |                                 }); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|  | |||||||
| @ -25,7 +25,7 @@ enum JavaDistribution { | |||||||
|   Corretto = 'corretto', |   Corretto = 'corretto', | ||||||
|   Oracle = 'oracle', |   Oracle = 'oracle', | ||||||
|   Dragonwell = 'dragonwell', |   Dragonwell = 'dragonwell', | ||||||
|   SapMachine = 'sapmachine', |   SapMachine = 'sapmachine' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export function getJavaDistribution( | export function getJavaDistribution( | ||||||
|  | |||||||
| @ -27,10 +27,12 @@ export class SapMachineDistribution extends JavaBase { | |||||||
|   protected async findPackageForDownload( |   protected async findPackageForDownload( | ||||||
|     version: string |     version: string | ||||||
|   ): Promise<JavaDownloadRelease> { |   ): Promise<JavaDownloadRelease> { | ||||||
|     core.debug(`Only stable versions: ${this.stable}`) |     core.debug(`Only stable versions: ${this.stable}`); | ||||||
| 
 | 
 | ||||||
|     if (!['jdk', 'jre'].includes(this.packageType)) { |     if (!['jdk', 'jre'].includes(this.packageType)) { | ||||||
|       throw new Error('SapMachine provides only the `jdk` and `jre` package type'); |       throw new Error( | ||||||
|  |         'SapMachine provides only the `jdk` and `jre` package type' | ||||||
|  |       ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const availableVersions = await this.getAvailableVersions(); |     const availableVersions = await this.getAvailableVersions(); | ||||||
| @ -60,10 +62,15 @@ export class SapMachineDistribution extends JavaBase { | |||||||
|     const platform = this.getPlatformOption(); |     const platform = this.getPlatformOption(); | ||||||
|     const arch = this.distributionArchitecture(); |     const arch = this.distributionArchitecture(); | ||||||
| 
 | 
 | ||||||
|     let fetchedReleasesJson = await this.fetchReleasesFromUrl('https://sap.github.io/SapMachine/assets/data/sapmachine-releases-all.json') |     let fetchedReleasesJson = await this.fetchReleasesFromUrl( | ||||||
|  |       'https://sap.github.io/SapMachine/assets/data/sapmachine-releases-all.json' | ||||||
|  |     ); | ||||||
| 
 | 
 | ||||||
|     if (!fetchedReleasesJson) { |     if (!fetchedReleasesJson) { | ||||||
|       fetchedReleasesJson = await this.fetchReleasesFromUrl('https://api.github.com/repos/SAP/SapMachine/contents/assets/data/sapmachine-releases-all.json?ref=gh-pages', getGitHubHttpHeaders()); |       fetchedReleasesJson = await this.fetchReleasesFromUrl( | ||||||
|  |         'https://api.github.com/repos/SAP/SapMachine/contents/assets/data/sapmachine-releases-all.json?ref=gh-pages', | ||||||
|  |         getGitHubHttpHeaders() | ||||||
|  |       ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!fetchedReleasesJson) { |     if (!fetchedReleasesJson) { | ||||||
| @ -123,23 +130,36 @@ export class SapMachineDistribution extends JavaBase { | |||||||
|   private parseVersions( |   private parseVersions( | ||||||
|     platform: string, |     platform: string, | ||||||
|     arch: string, |     arch: string, | ||||||
|     versions: ISapMachineAllVersions, |     versions: ISapMachineAllVersions | ||||||
|   ): ISapMachineVersions[] { |   ): ISapMachineVersions[] { | ||||||
|     const eligibleVersions: ISapMachineVersions[] = []; |     const eligibleVersions: ISapMachineVersions[] = []; | ||||||
| 
 | 
 | ||||||
|     for (const [, majorVersionMap] of Object.entries(versions)) { |     for (const [, majorVersionMap] of Object.entries(versions)) { | ||||||
|       for (const [, jdkVersionMap] of Object.entries(majorVersionMap.updates)) { |       for (const [, jdkVersionMap] of Object.entries(majorVersionMap.updates)) { | ||||||
|         for (const [buildVersion, buildVersionMap] of Object.entries(jdkVersionMap)) { |         for (const [buildVersion, buildVersionMap] of Object.entries( | ||||||
|           let buildVersionWithoutPrefix = buildVersion.replace('sapmachine-', ''); |           jdkVersionMap | ||||||
|  |         )) { | ||||||
|  |           let buildVersionWithoutPrefix = buildVersion.replace( | ||||||
|  |             'sapmachine-', | ||||||
|  |             '' | ||||||
|  |           ); | ||||||
|           if (!buildVersionWithoutPrefix.includes('.')) { |           if (!buildVersionWithoutPrefix.includes('.')) { | ||||||
|             // replace major version with major.minor.patch and keep the remaining build identifier after the + as is with regex
 |             // replace major version with major.minor.patch and keep the remaining build identifier after the + as is with regex
 | ||||||
|             buildVersionWithoutPrefix = buildVersionWithoutPrefix.replace(/(\d+)(\+.*)?/, '$1.0.0$2'); |             buildVersionWithoutPrefix = buildVersionWithoutPrefix.replace( | ||||||
|  |               /(\d+)(\+.*)?/, | ||||||
|  |               '$1.0.0$2' | ||||||
|  |             ); | ||||||
|           } |           } | ||||||
|           // replace + with . to convert to semver format if we have more than 3 version digits
 |           // replace + with . to convert to semver format if we have more than 3 version digits
 | ||||||
|           if (buildVersionWithoutPrefix.split('.').length > 3) { |           if (buildVersionWithoutPrefix.split('.').length > 3) { | ||||||
|             buildVersionWithoutPrefix = buildVersionWithoutPrefix.replace('+', '.'); |             buildVersionWithoutPrefix = buildVersionWithoutPrefix.replace( | ||||||
|  |               '+', | ||||||
|  |               '.' | ||||||
|  |             ); | ||||||
|           } |           } | ||||||
|           buildVersionWithoutPrefix = convertVersionToSemver(buildVersionWithoutPrefix); |           buildVersionWithoutPrefix = convertVersionToSemver( | ||||||
|  |             buildVersionWithoutPrefix | ||||||
|  |           ); | ||||||
| 
 | 
 | ||||||
|           // ignore invalid version
 |           // ignore invalid version
 | ||||||
|           if (!semver.valid(buildVersionWithoutPrefix)) { |           if (!semver.valid(buildVersionWithoutPrefix)) { | ||||||
| @ -148,23 +168,29 @@ export class SapMachineDistribution extends JavaBase { | |||||||
|           } |           } | ||||||
| 
 | 
 | ||||||
|           // skip earlyAccessVersions if stable version requested
 |           // skip earlyAccessVersions if stable version requested
 | ||||||
|           if (this.stable && buildVersionMap.ea === "true") { |           if (this.stable && buildVersionMap.ea === 'true') { | ||||||
|             continue; |             continue; | ||||||
|           } |           } | ||||||
| 
 | 
 | ||||||
|           for (const [edition, editionAssets] of Object.entries(buildVersionMap.assets)) { |           for (const [edition, editionAssets] of Object.entries( | ||||||
|  |             buildVersionMap.assets | ||||||
|  |           )) { | ||||||
|             if (this.packageType !== edition) { |             if (this.packageType !== edition) { | ||||||
|               continue; |               continue; | ||||||
|             } |             } | ||||||
|             for (const [archAndPlatForm, archAssets] of Object.entries(editionAssets)) { |             for (const [archAndPlatForm, archAssets] of Object.entries( | ||||||
|               let expectedArchAndPlatform = `${platform}-${arch}` |               editionAssets | ||||||
|  |             )) { | ||||||
|  |               let expectedArchAndPlatform = `${platform}-${arch}`; | ||||||
|               if (platform === 'linux-musl') { |               if (platform === 'linux-musl') { | ||||||
|                 expectedArchAndPlatform = `linux-${arch}-musl` |                 expectedArchAndPlatform = `linux-${arch}-musl`; | ||||||
|               } |               } | ||||||
|               if (archAndPlatForm !== expectedArchAndPlatform) { |               if (archAndPlatForm !== expectedArchAndPlatform) { | ||||||
|                 continue |                 continue; | ||||||
|               } |               } | ||||||
|               for (const [contentType, contentTypeAssets] of Object.entries(archAssets)) { |               for (const [contentType, contentTypeAssets] of Object.entries( | ||||||
|  |                 archAssets | ||||||
|  |               )) { | ||||||
|                 // skip if not tar.gz and zip files
 |                 // skip if not tar.gz and zip files
 | ||||||
|                 if (contentType !== 'tar.gz' && contentType !== 'zip') { |                 if (contentType !== 'tar.gz' && contentType !== 'zip') { | ||||||
|                   continue; |                   continue; | ||||||
| @ -175,7 +201,7 @@ export class SapMachineDistribution extends JavaBase { | |||||||
|                   version: buildVersionWithoutPrefix, |                   version: buildVersionWithoutPrefix, | ||||||
|                   checksum: contentTypeAssets.checksum, |                   checksum: contentTypeAssets.checksum, | ||||||
|                   downloadLink: contentTypeAssets.url, |                   downloadLink: contentTypeAssets.url, | ||||||
|                   packageType: edition, |                   packageType: edition | ||||||
|                 }); |                 }); | ||||||
|               } |               } | ||||||
|             } |             } | ||||||
| @ -206,7 +232,7 @@ export class SapMachineDistribution extends JavaBase { | |||||||
|       case 'win32': |       case 'win32': | ||||||
|         return 'windows'; |         return 'windows'; | ||||||
|       case 'darwin': |       case 'darwin': | ||||||
|         return 'macos' |         return 'macos'; | ||||||
|       case 'linux': |       case 'linux': | ||||||
|         // figure out if alpine/musl
 |         // figure out if alpine/musl
 | ||||||
|         if (fs.existsSync('/etc/alpine-release')) { |         if (fs.existsSync('/etc/alpine-release')) { | ||||||
| @ -218,7 +244,10 @@ export class SapMachineDistribution extends JavaBase { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private async fetchReleasesFromUrl(url: string, headers: OutgoingHttpHeaders = {}): Promise<ISapMachineAllVersions | null> { |   private async fetchReleasesFromUrl( | ||||||
|  |     url: string, | ||||||
|  |     headers: OutgoingHttpHeaders = {} | ||||||
|  |   ): Promise<ISapMachineAllVersions | null> { | ||||||
|     try { |     try { | ||||||
|       core.debug( |       core.debug( | ||||||
|         `Trying to fetch available SapMachine versions info from the primary url: ${url}` |         `Trying to fetch available SapMachine versions info from the primary url: ${url}` | ||||||
| @ -229,7 +258,8 @@ export class SapMachineDistribution extends JavaBase { | |||||||
|       return releases; |       return releases; | ||||||
|     } catch (err) { |     } catch (err) { | ||||||
|       core.debug( |       core.debug( | ||||||
|         `Fetching SapMachine versions info from the link: ${url} ended up with the error: ${(err as Error).message |         `Fetching SapMachine versions info from the link: ${url} ended up with the error: ${ | ||||||
|  |           (err as Error).message | ||||||
|         }` |         }` | ||||||
|       ); |       ); | ||||||
|       return null; |       return null; | ||||||
|  | |||||||
| @ -1,18 +1,18 @@ | |||||||
| export interface ISapMachineAllVersions { | export interface ISapMachineAllVersions { | ||||||
|   [major: string]: { |   [major: string]: { | ||||||
|         lts: string, |     lts: string; | ||||||
|     updates: { |     updates: { | ||||||
|       [full_version: string]: { |       [full_version: string]: { | ||||||
|         [sapmachineBuild: string]: { |         [sapmachineBuild: string]: { | ||||||
|                     release_url: string, |           release_url: string; | ||||||
|                     ea: string, |           ea: string; | ||||||
|           assets: { |           assets: { | ||||||
|             [packageType: string]: { |             [packageType: string]: { | ||||||
|               [arch: string]: { |               [arch: string]: { | ||||||
|                 [content_type: string]: { |                 [content_type: string]: { | ||||||
|                                     name: string, |                   name: string; | ||||||
|                                     checksum: string, |                   checksum: string; | ||||||
|                                     url: string |                   url: string; | ||||||
|                 }; |                 }; | ||||||
|               }; |               }; | ||||||
|             }; |             }; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user