From 37bedf2b883cc64476e03a5c29207adf3af9c8c8 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Mon, 5 Sep 2022 14:14:23 +0200 Subject: [PATCH] add initial logic --- action.yml | 3 + dist/setup/index.js | 68 ++++----- microsoft-build-of-openjdk-versions.json | 176 +++++++++++++++++++++++ src/distributions/microsoft/installer.ts | 85 +++++------ 4 files changed, 255 insertions(+), 77 deletions(-) create mode 100644 microsoft-build-of-openjdk-versions.json diff --git a/action.yml b/action.yml index ec05f65a..abcfb6b2 100644 --- a/action.yml +++ b/action.yml @@ -59,6 +59,9 @@ inputs: job-status: description: 'Workaround to pass job status to post job step. This variable is not intended for manual setting' default: ${{ job.status }} + token: + description: Used to pull java versions from setup-java. Since there's a default, this is typically not supplied by the user. + default: ${{ github.token }} outputs: distribution: description: 'Distribution of Java that has been installed' diff --git a/dist/setup/index.js b/dist/setup/index.js index 92cf879e..2f72b1de 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -102398,7 +102398,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MicrosoftDistributions = void 0; const base_installer_1 = __nccwpck_require__(9741); -const semver_1 = __importDefault(__nccwpck_require__(1383)); const util_1 = __nccwpck_require__(2629); const core = __importStar(__nccwpck_require__(2186)); const tc = __importStar(__nccwpck_require__(7784)); @@ -102433,49 +102432,44 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { throw new Error('Microsoft Build of OpenJDK provides only the `jdk` package type'); } const availableVersionsRaw = yield this.getAvailableVersions(); - const opts = this.getPlatformOption(); - const availableVersions = availableVersionsRaw.map(item => ({ - url: `https://aka.ms/download-jdk/microsoft-jdk-${item.version.join('.')}-${opts.os}-${this.architecture}.${opts.archive}`, - version: this.convertVersionToSemver(item) - })); - const satisfiedVersion = availableVersions - .filter(item => util_1.isVersionSatisfies(range, item.version)) - .sort((a, b) => -semver_1.default.compareBuild(a.version, b.version))[0]; - if (!satisfiedVersion) { - const availableOptions = availableVersions.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; - throw new Error(`Could not find satisfied version for SemVer ${range}. ${availableOptionsMessage}`); + if (!availableVersionsRaw) { + throw new Error('Could not load manifest for Microsoft Build of OpenJDK'); } - return satisfiedVersion; + const foundRelease = yield tc.findFromManifest(range, true, availableVersionsRaw, this.architecture); + // const opts = this.getPlatformOption(); + // const availableVersions = availableVersionsRaw.map(item => ({ + // url: `https://aka.ms/download-jdk/microsoft-jdk-${item.version.join('.')}-${opts.os}-${ + // this.architecture // https://aka.ms/download-jdk/microsoft-jdk-17.0.3-linux-aarch64.tar.gz + // }.${opts.archive}`, + // version: this.convertVersionToSemver(item) + // })); + // const satisfiedVersion = availableVersions + // .filter(item => isVersionSatisfies(range, item.version)) + // .sort((a, b) => -semver.compareBuild(a.version, b.version))[0]; + // if (!satisfiedVersion) { + // const availableOptions = availableVersions.map(item => item.version).join(', '); + // const availableOptionsMessage = availableOptions + // ? `\nAvailable versions: ${availableOptions}` + // : ''; + // throw new Error( + // `Could not find satisfied version for SemVer ${range}. ${availableOptionsMessage}` + // ); + // } + if (!foundRelease) { + throw new Error(`Could not find satisfied version for SemVer ${range}. ${availableVersionsRaw + .map(item => item.version) + .join(', ')}`); + } + return { url: foundRelease.release_url, version: foundRelease.version }; }); } getAvailableVersions() { return __awaiter(this, void 0, void 0, function* () { // TODO get these dynamically! // We will need Microsoft to add an endpoint where we can query for versions. - const jdkVersions = [ - { - version: [17, 0, 3] - }, - { - version: [17, 0, 1, 12, 1] - }, - { - version: [16, 0, 2, 7, 1] - }, - { - version: [11, 0, 15] - } - ]; - // M1 is only supported for Java 16 & 17 - if (process.platform !== 'darwin' || this.architecture !== 'aarch64') { - jdkVersions.push({ - version: [11, 0, 13, 8, 1] - }); - } - return jdkVersions; + const token = core.getInput('token'); + const manifest = (yield this.http.getJson('https://github.com/dmitry-shibanov/setup-java/tree/main', { authorization: token })).result; + return manifest; }); } getPlatformOption(platform = process.platform /* for testing */) { diff --git a/microsoft-build-of-openjdk-versions.json b/microsoft-build-of-openjdk-versions.json new file mode 100644 index 00000000..11125b78 --- /dev/null +++ b/microsoft-build-of-openjdk-versions.json @@ -0,0 +1,176 @@ +[ + { + "version": "17.0.3", + "stable": true, + "files": [ + { + "filename": "microsoft-jdk-17.0.3-macos-x64.tar.gz", + "arch": "x64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.3-macos-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.3-linux-x64.tar.gz", + "arch": "x64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.3-linux-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.3-windows-x64.zip", + "arch": "x64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.3-windows-x64.zip" + }, + { + "filename": "microsoft-jdk-17.0.3-macos-aarch64.tar.gz", + "arch": "aarch64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.3-macos-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.3-linux-aarch64.tar.gz", + "arch": "aarch64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.3-linux-aarch64.tar.gz" + } + ] + }, + { + "version": "17.0.1+12.1", + "stable": true, + "files": [ + { + "filename": "microsoft-jdk-17.0.1.12.1-macos-x64.tar.gz", + "arch": "x64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-macos-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.1.12.1-linux-x64.tar.gz", + "arch": "x64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-linux-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.1.12.1-windows-x64.zip", + "arch": "x64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-windows-x64.zip" + }, + { + "filename": "microsoft-jdk-17.0.1.12.1-macos-aarch64.tar.gz", + "arch": "aarch64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-macos-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.1.12.1-linux-aarch64.tar.gz", + "arch": "aarch64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-linux-aarch64.tar.gz" + } + ] + }, + { + "version": "16.0.2+7.1", + "stable": true, + "files": [ + { + "filename": "microsoft-jdk-16.0.2+7.1-macos-x64.tar.gz", + "arch": "x64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-16.0.2+7.1-macos-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-16.0.2+7.1-linux-x64.tar.gz", + "arch": "x64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-16.0.2+7.1-linux-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-16.0.2+7.1-windows-x64.zip", + "arch": "x64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-16.0.2+7.1-windows-x64.zip" + }, + { + "filename": "microsoft-jdk-16.0.2+7.1-macos-aarch64.tar.gz", + "arch": "aarch64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-16.0.2+7.1-macos-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-16.0.2+7.1-linux-aarch64.tar.gz", + "arch": "aarch64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-16.0.2+7.1-linux-aarch64.tar.gz" + } + ] + }, + { + "version": "11.0.15", + "stable": true, + "files": [ + { + "filename": "microsoft-jdk-11.0.15-macos-x64.tar.gz", + "arch": "x64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.15-macos-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.15-linux-x64.tar.gz", + "arch": "x64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.15-linux-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.15-windows-x64.zip", + "arch": "x64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.15-windows-x64.zip" + }, + { + "filename": "microsoft-jdk-11.0.15-macos-aarch64.tar.gz", + "arch": "aarch64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.15-macos-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.15-linux-aarch64.tar.gz", + "arch": "aarch64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.15-linux-aarch64.tar.gz" + } + ] + }, + { + "version": "11.0.13+8.1", + "stable": true, + "files": [ + { + "filename": "microsoft-jdk-11.0.13+8.1-macos-x64.tar.gz", + "arch": "x64", + "platform": "darwin", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.13+8.1-macos-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.13+8.1-linux-x64.tar.gz", + "arch": "x64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.13+8.1-linux-x64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.13+8.1-windows-x64.zip", + "arch": "x64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.13+8.1-windows-x64.zip" + }, + { + "filename": "microsoft-jdk-11.0.13+8.1-linux-aarch64.tar.gz", + "arch": "aarch64", + "platform": "linux", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.13+8.1-linux-aarch64.tar.gz" + } + ] + } +] \ No newline at end of file diff --git a/src/distributions/microsoft/installer.ts b/src/distributions/microsoft/installer.ts index 4ceb4285..7cd96a37 100644 --- a/src/distributions/microsoft/installer.ts +++ b/src/distributions/microsoft/installer.ts @@ -51,57 +51,62 @@ export class MicrosoftDistributions extends JavaBase { const availableVersionsRaw = await this.getAvailableVersions(); - const opts = this.getPlatformOption(); - const availableVersions = availableVersionsRaw.map(item => ({ - url: `https://aka.ms/download-jdk/microsoft-jdk-${item.version.join('.')}-${opts.os}-${ - this.architecture - }.${opts.archive}`, - version: this.convertVersionToSemver(item) - })); + if (!availableVersionsRaw) { + throw new Error('Could not load manifest for Microsoft Build of OpenJDK'); + } - const satisfiedVersion = availableVersions - .filter(item => isVersionSatisfies(range, item.version)) - .sort((a, b) => -semver.compareBuild(a.version, b.version))[0]; + const foundRelease = await tc.findFromManifest( + range, + true, + availableVersionsRaw, + this.architecture + ); - if (!satisfiedVersion) { - const availableOptions = availableVersions.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; + // const opts = this.getPlatformOption(); + // const availableVersions = availableVersionsRaw.map(item => ({ + // url: `https://aka.ms/download-jdk/microsoft-jdk-${item.version.join('.')}-${opts.os}-${ + // this.architecture // https://aka.ms/download-jdk/microsoft-jdk-17.0.3-linux-aarch64.tar.gz + // }.${opts.archive}`, + // version: this.convertVersionToSemver(item) + // })); + + // const satisfiedVersion = availableVersions + // .filter(item => isVersionSatisfies(range, item.version)) + // .sort((a, b) => -semver.compareBuild(a.version, b.version))[0]; + + // if (!satisfiedVersion) { + // const availableOptions = availableVersions.map(item => item.version).join(', '); + // const availableOptionsMessage = availableOptions + // ? `\nAvailable versions: ${availableOptions}` + // : ''; + // throw new Error( + // `Could not find satisfied version for SemVer ${range}. ${availableOptionsMessage}` + // ); + // } + + if (!foundRelease) { throw new Error( - `Could not find satisfied version for SemVer ${range}. ${availableOptionsMessage}` + `Could not find satisfied version for SemVer ${range}. ${availableVersionsRaw + .map(item => item.version) + .join(', ')}` ); } - return satisfiedVersion; + return { url: foundRelease.release_url, version: foundRelease.version }; } - private async getAvailableVersions(): Promise { + private async getAvailableVersions(): Promise { // TODO get these dynamically! // We will need Microsoft to add an endpoint where we can query for versions. - const jdkVersions = [ - { - version: [17, 0, 3] - }, - { - version: [17, 0, 1, 12, 1] - }, - { - version: [16, 0, 2, 7, 1] - }, - { - version: [11, 0, 15] - } - ]; + const token = core.getInput('token'); + const manifest = ( + await this.http.getJson( + 'https://github.com/dmitry-shibanov/setup-java/tree/main', + { authorization: token } + ) + ).result; - // M1 is only supported for Java 16 & 17 - if (process.platform !== 'darwin' || this.architecture !== 'aarch64') { - jdkVersions.push({ - version: [11, 0, 13, 8, 1] - }); - } - - return jdkVersions; + return manifest; } private getPlatformOption(