From 852fac3790a01aa89176d4a03fdac63a249339c9 Mon Sep 17 00:00:00 2001 From: Manuel Date: Sat, 2 Apr 2022 14:45:22 +0200 Subject: [PATCH] Implement getAvailableVersions --- .../distributors/coretto-installer.test.ts | 23 ++++++ src/distributions/coretto/installer.ts | 82 +++++++++++++++++++ src/distributions/coretto/models.ts | 24 ++++++ 3 files changed, 129 insertions(+) create mode 100644 __tests__/distributors/coretto-installer.test.ts create mode 100644 src/distributions/coretto/installer.ts create mode 100644 src/distributions/coretto/models.ts diff --git a/__tests__/distributors/coretto-installer.test.ts b/__tests__/distributors/coretto-installer.test.ts new file mode 100644 index 00000000..c3f28c3b --- /dev/null +++ b/__tests__/distributors/coretto-installer.test.ts @@ -0,0 +1,23 @@ +import { HttpClient } from '@actions/http-client'; + +import { CorettoDistribution } from '../../src/distributions/coretto/installer'; +import { JavaInstallerOptions } from '../../src/distributions/base-models'; + +describe('getAvailableVersions', () => { + beforeEach(() => {}); + + afterEach(() => {}); + + it('load available versions', async () => { + const distribution = new CorettoDistribution('coretto', { + version: '11', + architecture: 'x64', + packageType: 'jdk', + checkLatest: false + }); + + const availableVersions = await distribution['getAvailableVersions'](); + expect(availableVersions).not.toBeNull(); + expect(availableVersions.length).toBe(24); + }); +}); diff --git a/src/distributions/coretto/installer.ts b/src/distributions/coretto/installer.ts new file mode 100644 index 00000000..9f649eed --- /dev/null +++ b/src/distributions/coretto/installer.ts @@ -0,0 +1,82 @@ +import * as core from '@actions/core'; +import * as tc from '@actions/tool-cache'; +import { JavaBase } from '../base-installer'; +import { JavaDownloadRelease, JavaInstallerResults } from '../base-models'; +import { ICorrettoAllAvailableVersions, ICorettoAvailableVersions } from './models'; + +export class CorettoDistribution extends JavaBase { + protected downloadTool(javaRelease: JavaDownloadRelease): Promise { + throw new Error('Method not implemented.'); + } + protected findPackageForDownload(range: string): Promise { + throw new Error('Method not implemented.'); + } + + private async getAvailableVersions(): Promise { + const platform = this.getPlatformOption(); + const arch = this.architecture; + const imageType = this.packageType; + + console.time('coretto-retrieve-available-versions'); + + const availableVersionsUrl = + 'https://corretto.github.io/corretto-downloads/latest_links/indexmap_with_checksum.json'; + const fetchResult = await this.http.getJson( + availableVersionsUrl + ); + if (!fetchResult.result) { + throw Error(`Could not fetch latest corretto versions from ${availableVersionsUrl}`); + } + const availableVersions: ICorettoAvailableVersions[] = []; + const eligbleVersions = fetchResult.result[platform][arch][imageType]; + for (const version in eligbleVersions) { + const availableVersion = eligbleVersions[version]; + for (const fileType in availableVersion) { + const availableVersionDetails = availableVersion[fileType]; + const correttoVersion = this.getCorettoVersionr(availableVersionDetails.resource); + + availableVersions.push({ + checksum: availableVersionDetails.checksum, + checksum_sha256: availableVersionDetails.checksum_sha256, + fileType, + resource: availableVersionDetails.resource, + version: version, + correttoVersion + }); + } + } + + if (core.isDebug()) { + core.startGroup('Print information about available versions'); + console.timeEnd('coretto-retrieve-available-versions'); + console.log(`Available versions: [${availableVersions.length}]`); + console.log( + availableVersions.map(item => `${item.version}: ${item.correttoVersion}`).join(', ') + ); + core.endGroup(); + } + + return availableVersions; + } + + private getPlatformOption(): string { + // Coretto has its own platform names so we need to map them + switch (process.platform) { + case 'darwin': + return 'mac'; + case 'win32': + return 'windows'; + default: + return process.platform; + } + } + + private getCorettoVersionr(resource: string): string { + const regex = /(\d+.+)\//; + const match = regex.exec(resource); + if (match === null) { + throw Error(`Could not parse corretto version from ${resource}`); + } + return match[1]; + } +} diff --git a/src/distributions/coretto/models.ts b/src/distributions/coretto/models.ts new file mode 100644 index 00000000..d0f9b26b --- /dev/null +++ b/src/distributions/coretto/models.ts @@ -0,0 +1,24 @@ +export interface ICorrettoAllAvailableVersions { + [os: string]: { + [arch: string]: { + [distributionType: string]: { + [version: string]: { + [fileType: string]: { + checksum: string; + checksum_sha256: string; + resource: string; + }; + }; + }; + }; + }; +} + +export interface ICorettoAvailableVersions { + version: string; + fileType: string; + checksum: string; + checksum_sha256: string; + resource: string; + correttoVersion: string; +}