diff --git a/__tests__/distributors/microsoft-installer.test.ts b/__tests__/distributors/microsoft-installer.test.ts index bc585603..10335da1 100644 --- a/__tests__/distributors/microsoft-installer.test.ts +++ b/__tests__/distributors/microsoft-installer.test.ts @@ -1,6 +1,7 @@ import { MicrosoftDistributions } from '../../src/distributions/microsoft/installer'; import * as tc from '@actions/tool-cache'; -import data from '../../versions-manifest.json'; +import data from '../../src/distributions/microsoft/microsoft-openjdk-versions.json'; +import * as httpm from '@actions/http-client'; import * as core from '@actions/core'; describe('findPackageForDownload', () => { @@ -16,9 +17,11 @@ describe('findPackageForDownload', () => { checkLatest: false }); - spyGetManifestFromRepo = jest.spyOn(tc, 'getManifestFromRepo'); - spyGetManifestFromRepo.mockImplementation(() => { - return data; + spyGetManifestFromRepo = jest.spyOn(httpm.HttpClient.prototype, 'getJson'); + spyGetManifestFromRepo.mockReturnValue({ + result: JSON.stringify(data), + statusCode: 200, + headers: {} }); spyDebug = jest.spyOn(core, 'debug'); diff --git a/dist/setup/index.js b/dist/setup/index.js index 2ad382e1..4b2f80af 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -104456,8 +104456,38 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { // TODO get these dynamically! // We will need Microsoft to add an endpoint where we can query for versions. const token = core.getInput('token'); - const manifest = yield tc.getManifestFromRepo('dmitry-shibanov', 'setup-java', token, 'add-json-for-microsoft-versions'); - return manifest; + const owner = 'dmitry-shibanov'; + const repository = 'setup-java'; + const branch = 'add-json-for-microsoft-versions'; + const filePath = 'src/distributions/microsoft/microsoft-openjdk-versions.json'; + let releases = []; + const fileUrl = `https://api.github.com/repos/${owner}/${repository}/contents/${filePath}?ref=${branch}`; + const headers = { + authorization: token, + accept: 'application/vnd.github.VERSION.raw' + }; + let response = null; + try { + response = yield this.http.getJson(fileUrl, headers); + if (!response.result) { + return null; + } + } + catch (err) { + core.debug(`Http request for microsoft-openjdk-versions.json failed with status code: ${response === null || response === void 0 ? void 0 : response.statusCode}`); + return null; + } + let versionsRaw = response.result; + if (versionsRaw) { + versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); + try { + releases = JSON.parse(versionsRaw); + } + catch (_a) { + core.debug('Invalid json'); + } + } + return releases; }); } } diff --git a/src/distributions/microsoft/installer.ts b/src/distributions/microsoft/installer.ts index 2745e417..eda3a050 100644 --- a/src/distributions/microsoft/installer.ts +++ b/src/distributions/microsoft/installer.ts @@ -3,14 +3,10 @@ import { JavaDownloadRelease, JavaInstallerOptions, JavaInstallerResults } from import { extractJdkFile, getDownloadArchiveExtension } from '../../util'; import * as core from '@actions/core'; import * as tc from '@actions/tool-cache'; +import { OutgoingHttpHeaders } from 'http'; import fs from 'fs'; import path from 'path'; - -export interface IToolRelease { - version: string; - stable: boolean; - files: tc.IToolReleaseFile[]; -} +import { ITypedResponse } from '@actions/http-client/interfaces'; export class MicrosoftDistributions extends JavaBase { constructor(installerOptions: JavaInstallerOptions) { @@ -76,13 +72,44 @@ export class MicrosoftDistributions extends JavaBase { // TODO get these dynamically! // We will need Microsoft to add an endpoint where we can query for versions. const token = core.getInput('token'); - const manifest = await tc.getManifestFromRepo( - 'dmitry-shibanov', - 'setup-java', - token, - 'add-json-for-microsoft-versions' - ); + const owner = 'dmitry-shibanov'; + const repository = 'setup-java'; + const branch = 'add-json-for-microsoft-versions'; + const filePath = 'src/distributions/microsoft/microsoft-openjdk-versions.json'; - return manifest; + let releases: tc.IToolRelease[] = []; + const fileUrl = `https://api.github.com/repos/${owner}/${repository}/contents/${filePath}?ref=${branch}`; + + const headers: OutgoingHttpHeaders = { + authorization: token, + accept: 'application/vnd.github.VERSION.raw' + }; + + let response: ITypedResponse | null = null; + + try { + response = await this.http.getJson(fileUrl, headers); + if (!response.result) { + return null; + } + } catch (err) { + core.debug( + `Http request for microsoft-openjdk-versions.json failed with status code: ${response?.statusCode}` + ); + return null; + } + + let versionsRaw = response.result; + + if (versionsRaw) { + versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); + try { + releases = JSON.parse(versionsRaw); + } catch { + core.debug('Invalid json'); + } + } + + return releases; } } diff --git a/versions-manifest.json b/src/distributions/microsoft/microsoft-openjdk-versions.json similarity index 100% rename from versions-manifest.json rename to src/distributions/microsoft/microsoft-openjdk-versions.json