Fix archive suffix for Windows.

This commit is contained in:
Brendan Burns 2021-11-19 10:50:41 -08:00
parent 2828873ff8
commit f073089abe
4 changed files with 6679 additions and 74 deletions

View file

@ -1,34 +1,4 @@
import { MicrosoftDistributions } from '../../src/distributions/microsoft/installer'; import { MicrosoftDistributions } from '../../src/distributions/microsoft/installer';
import { ArchitectureOptions } from '../../src/distributions/microsoft/models';
describe('getArchitectureOptions', () => {
it.each([
['x64', { bitness: '64', arch: 'x86' }],
['aarch64', { bitness: '64', arch: 'arm' }]
] as [string, ArchitectureOptions][])('parse architecture %s -> %s', (input, expected) => {
const distributions = new MicrosoftDistributions({
architecture: input,
checkLatest: false,
packageType: '',
version: ''
});
expect(distributions['getArchitectureOptions']()).toEqual(expected);
});
it.each(['armv6', 's390x'])('not support architecture %s', input => {
const distributions = new MicrosoftDistributions({
architecture: input,
checkLatest: false,
packageType: '',
version: ''
});
expect(() => distributions['getArchitectureOptions']()).toThrow(
/Architecture '\w+' is not supported\. Supported architectures: .*/
);
});
});
describe('findPackageForDownload', () => { describe('findPackageForDownload', () => {
let distribution: MicrosoftDistributions; let distribution: MicrosoftDistributions;
@ -46,34 +16,39 @@ describe('findPackageForDownload', () => {
[ [
'17.x', '17.x',
'17.0.1', '17.0.1',
'https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-{{OS_TYPE}}-x64.tar.gz' 'https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-{{OS_TYPE}}-x64.{{ARCHIVE_TYPE}}'
], ],
[ [
'16.0.x', '16.0.x',
'16.0.2', '16.0.2',
'https://aka.ms/download-jdk/microsoft-jdk-16.0.2.7.1-{{OS_TYPE}}-x64.tar.gz' 'https://aka.ms/download-jdk/microsoft-jdk-16.0.2.7.1-{{OS_TYPE}}-x64.{{ARCHIVE_TYPE}}'
], ],
[ [
'11.0.13', '11.0.13',
'11.0.13', '11.0.13',
'https://aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-{{OS_TYPE}}-x64.tar.gz' 'https://aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-{{OS_TYPE}}-x64.{{ARCHIVE_TYPE}}'
] ]
])('version is %s -> %s', async (input, expectedVersion, expectedUrl) => { ])('version is %s -> %s', async (input, expectedVersion, expectedUrl) => {
const result = await distribution['findPackageForDownload'](input); const result = await distribution['findPackageForDownload'](input);
expect(result.version).toBe(expectedVersion); expect(result.version).toBe(expectedVersion);
var os: string; var os: string;
var archive: string;
switch (process.platform) { switch (process.platform) {
case 'darwin': case 'darwin':
os = 'macos'; os = 'macos';
archive = 'tar.gz';
break; break;
case 'win32': case 'win32':
os = 'windows'; os = 'windows';
archive = 'zip';
break; break;
default: default:
os = process.platform.toString(); os = process.platform.toString();
archive = 'tar.gz';
break; break;
} }
expect(result.url).toBe(expectedUrl.replace('{{OS_TYPE}}', os)); const url = expectedUrl.replace('{{OS_TYPE}}', os).replace('{{ARCHIVE_TYPE}}', archive);
expect(result.url).toBe(url);
}); });
it('should throw an error', async () => { it('should throw an error', async () => {
@ -92,13 +67,14 @@ describe('getPlatformOption', () => {
}); });
it.each([ it.each([
['linux', 'linux'], ['linux', 'tar.gz', 'linux'],
['darwin', 'macos'], ['darwin', 'tar.gz', 'macos'],
['win32', 'windows'] ['win32', 'zip', 'windows']
])('os version %s -> %s', (input, expected) => { ])('os version %s -> %s', (input, expectedArchive, expectedOs) => {
const actual = distributions['getPlatformOption'](input as NodeJS.Platform); const actual = distributions['getPlatformOption'](input as NodeJS.Platform);
expect(actual).toEqual(expected); expect(actual.archive).toEqual(expectedArchive);
expect(actual.os).toEqual(expectedOs);
}); });
it.each(['aix', 'android', 'freebsd', 'openbsd', 'netbsd', 'solaris', 'cygwin'])( it.each(['aix', 'android', 'freebsd', 'openbsd', 'netbsd', 'solaris', 'cygwin'])(

6644
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@ import { JavaDownloadRelease, JavaInstallerOptions, JavaInstallerResults } from
import semver from 'semver'; import semver from 'semver';
import { extractJdkFile, getDownloadArchiveExtension, isVersionSatisfies } from '../../util'; import { extractJdkFile, getDownloadArchiveExtension, isVersionSatisfies } from '../../util';
import * as core from '@actions/core'; import * as core from '@actions/core';
import { ArchitectureOptions, MicrosoftVersion, OsVersions } from './models'; import { MicrosoftVersion, PlatformOptions } from './models';
import * as tc from '@actions/tool-cache'; import * as tc from '@actions/tool-cache';
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
@ -41,12 +41,14 @@ export class MicrosoftDistributions extends JavaBase {
} }
protected async findPackageForDownload(range: string): Promise<JavaDownloadRelease> { protected async findPackageForDownload(range: string): Promise<JavaDownloadRelease> {
if (this.architecture !== 'x64' && this.architecture != 'aarch64') {
throw new Error(`Unsupported architecture: ${this.architecture}`);
}
const availableVersionsRaw = await this.getAvailableVersions(); const availableVersionsRaw = await this.getAvailableVersions();
const opts = this.getPlatformOption();
const availableVersions = availableVersionsRaw.map(item => ({ const availableVersions = availableVersionsRaw.map(item => ({
url: `https://aka.ms/download-jdk/microsoft-jdk-${ url: `https://aka.ms/download-jdk/microsoft-jdk-${item.fullVersion}-${opts.os}-${this.architecture}.${opts.archive}`,
item.fullVersion
}-${this.getPlatformOption()}-${this.architecture}.tar.gz`,
version: this.convertVersionToSemver(item) version: this.convertVersionToSemver(item)
})); }));
@ -83,39 +85,30 @@ export class MicrosoftDistributions extends JavaBase {
minorVersion: 0, minorVersion: 0,
patchVersion: 2, patchVersion: 2,
fullVersion: '16.0.2.7.1' fullVersion: '16.0.2.7.1'
}, }
{ ];
// M1 is only supported for Java 16 & 17
if (process.platform !== 'darwin' || this.architecture !== 'aarch64') {
jdkVersions.push({
majorVersion: 11, majorVersion: 11,
minorVersion: 0, minorVersion: 0,
patchVersion: 13, patchVersion: 13,
fullVersion: '11.0.13.8.1' fullVersion: '11.0.13.8.1'
});
} }
];
return jdkVersions; return jdkVersions;
} }
private getArchitectureOptions(): ArchitectureOptions { private getPlatformOption(platform: NodeJS.Platform = process.platform): PlatformOptions {
switch (this.architecture) {
case 'x64':
return { bitness: '64', arch: 'x86' };
case 'aarch64':
return { bitness: '64', arch: 'arm' };
default:
throw new Error(
`Architecture '${this.architecture}' is not supported. Supported architectures: ${supportedArchitecture}`
);
}
}
private getPlatformOption(platform: NodeJS.Platform = process.platform): OsVersions {
switch (platform) { switch (platform) {
case 'darwin': case 'darwin':
return 'macos'; return { archive: 'tar.gz', os: 'macos' };
case 'win32': case 'win32':
return 'windows'; return { archive: 'zip', os: 'windows' };
case 'linux': case 'linux':
return 'linux'; return { archive: 'tar.gz', os: 'linux' };
default: default:
throw new Error( throw new Error(
`Platform '${platform}' is not supported. Supported platforms: ${supportedPlatform}` `Platform '${platform}' is not supported. Supported platforms: ${supportedPlatform}`

View file

@ -1,11 +1,9 @@
export type Bitness = '32' | '64'; export type OsVersions = 'linux' | 'macos' | 'windows';
export type ArchType = 'arm' | 'ppc' | 'sparc' | 'x86'; export type ArchiveType = 'tar.gz' | 'zip';
export type OsVersions = 'linux' | 'linux-musl' | 'macos' | 'solaris' | 'windows'; export interface PlatformOptions {
archive: ArchiveType;
export interface ArchitectureOptions { os: OsVersions;
bitness: Bitness;
arch: ArchType;
} }
export interface MicrosoftVersion { export interface MicrosoftVersion {