From a41474536d8b42ce4d435cca9d7c27d011015162 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Wed, 20 Dec 2023 11:22:42 +0100 Subject: [PATCH 1/6] add arm64 windows microsoft binaries --- .../microsoft/microsoft-openjdk-versions.json | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/src/distributions/microsoft/microsoft-openjdk-versions.json b/src/distributions/microsoft/microsoft-openjdk-versions.json index 9b7e798b1..e1849e98b 100644 --- a/src/distributions/microsoft/microsoft-openjdk-versions.json +++ b/src/distributions/microsoft/microsoft-openjdk-versions.json @@ -33,6 +33,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-21.0.0-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-21.0.0-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-21.0.0-windows-aarch64.zip" } ] }, @@ -70,6 +76,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.7-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.7-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.7-windows-aarch64.zip" } ] }, @@ -107,6 +119,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.6-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.6-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.6-windows-aarch64.zip" } ] }, @@ -144,6 +162,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.5-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.5-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.5-windows-aarch64.zip" } ] }, @@ -181,6 +205,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.4-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.4-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.4-windows-aarch64.zip" } ] }, @@ -218,6 +248,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.3-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.3-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.3-windows-aarch64.zip" } ] }, @@ -255,6 +291,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-17.0.1.12.1-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-windows-aarch64.zip" } ] }, @@ -292,6 +334,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-16.0.2.7.1-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-16.0.2.7.1-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-16.0.2.7.1-windows-aarch64.zip" } ] }, @@ -329,6 +377,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.19-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.19-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.19-windows-aarch64.zip" } ] }, @@ -366,6 +420,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.18-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.18-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.18-windows-aarch64.zip" } ] }, @@ -403,6 +463,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.17-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.17-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.17-windows-aarch64.zip" } ] }, @@ -440,6 +506,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.16-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.16-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.16-windows-aarch64.zip" } ] }, @@ -477,6 +549,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.15-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.15-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.15-windows-aarch64.zip" } ] }, @@ -508,6 +586,12 @@ "arch": "aarch64", "platform": "linux", "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-linux-aarch64.tar.gz" + }, + { + "filename": "microsoft-jdk-11.0.13.8.1-windows-aarch64.zip", + "arch": "aarch64", + "platform": "win32", + "download_url": "https://aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip" } ] } From c000d4c9231d6f4e6227ce97d2db09ae2dd69786 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Wed, 20 Dec 2023 11:43:30 +0100 Subject: [PATCH 2/6] change owner and branch for testing --- dist/setup/index.js | 4 ++-- src/distributions/microsoft/installer.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index 916f488bb..1ff1ae6fa 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -124009,9 +124009,9 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { 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 owner = 'actions'; + const owner = 'dmitry-shibanov'; const repository = 'setup-java'; - const branch = 'main'; + const branch = 'v-dmshib/add-arm64-windows-microsoft'; const filePath = 'src/distributions/microsoft/microsoft-openjdk-versions.json'; let releases = null; const fileUrl = `https://api.github.com/repos/${owner}/${repository}/contents/${filePath}?ref=${branch}`; diff --git a/src/distributions/microsoft/installer.ts b/src/distributions/microsoft/installer.ts index 6feafabc0..3dfc398a9 100644 --- a/src/distributions/microsoft/installer.ts +++ b/src/distributions/microsoft/installer.ts @@ -88,9 +88,9 @@ export class MicrosoftDistributions extends JavaBase { private async getAvailableVersions(): Promise { // TODO get these dynamically! // We will need Microsoft to add an endpoint where we can query for versions. - const owner = 'actions'; + const owner = 'dmitry-shibanov'; const repository = 'setup-java'; - const branch = 'main'; + const branch = 'v-dmshib/add-arm64-windows-microsoft'; const filePath = 'src/distributions/microsoft/microsoft-openjdk-versions.json'; From dbc0c85f6f26b53c534c47fde284209460f51395 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Wed, 20 Dec 2023 12:14:52 +0100 Subject: [PATCH 3/6] add debug line --- dist/setup/index.js | 8 +++++++- src/distributions/microsoft/installer.ts | 9 +++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index 1ff1ae6fa..6f745a631 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -123967,9 +123967,15 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { downloadTool(javaRelease) { return __awaiter(this, void 0, void 0, function* () { core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); - const javaArchivePath = yield tc.downloadTool(javaRelease.url); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); + core.info(`javaArchivePath is ${javaArchivePath}`); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32' && (this.architecture === 'arm64' || this.architecture === 'aarch64')) { + const javaArchivePathRenamed = `${javaArchivePath}.zip`; + yield fs_1.default.renameSync(javaArchivePath, javaArchivePathRenamed); + javaArchivePath = javaArchivePathRenamed; + } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; const archivePath = path_1.default.join(extractedJavaPath, archiveName); diff --git a/src/distributions/microsoft/installer.ts b/src/distributions/microsoft/installer.ts index 3dfc398a9..73bc2e784 100644 --- a/src/distributions/microsoft/installer.ts +++ b/src/distributions/microsoft/installer.ts @@ -26,10 +26,15 @@ export class MicrosoftDistributions extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); - + let javaArchivePath = await tc.downloadTool(javaRelease.url); + core.info(`javaArchivePath is ${javaArchivePath}`); core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); + if (process.platform === 'win32' && (this.architecture === 'arm64' || this.architecture === 'aarch64')) { + const javaArchivePathRenamed = `${javaArchivePath}.zip`; + await fs.renameSync(javaArchivePath, javaArchivePathRenamed); + javaArchivePath = javaArchivePathRenamed; + } const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; From eed97a9597f6feedaa4cb152497a82b034116ee1 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Wed, 20 Dec 2023 16:27:20 +0100 Subject: [PATCH 4/6] remove debug line and revert owner, branch --- dist/setup/index.js | 5 ++--- src/distributions/microsoft/installer.ts | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index 6f745a631..d09d94094 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -123968,7 +123968,6 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { return __awaiter(this, void 0, void 0, function* () { core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); let javaArchivePath = yield tc.downloadTool(javaRelease.url); - core.info(`javaArchivePath is ${javaArchivePath}`); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); if (process.platform === 'win32' && (this.architecture === 'arm64' || this.architecture === 'aarch64')) { @@ -124015,9 +124014,9 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { 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 owner = 'dmitry-shibanov'; + const owner = 'actions'; const repository = 'setup-java'; - const branch = 'v-dmshib/add-arm64-windows-microsoft'; + const branch = 'main'; const filePath = 'src/distributions/microsoft/microsoft-openjdk-versions.json'; let releases = null; const fileUrl = `https://api.github.com/repos/${owner}/${repository}/contents/${filePath}?ref=${branch}`; diff --git a/src/distributions/microsoft/installer.ts b/src/distributions/microsoft/installer.ts index 73bc2e784..22240c0b2 100644 --- a/src/distributions/microsoft/installer.ts +++ b/src/distributions/microsoft/installer.ts @@ -27,7 +27,7 @@ export class MicrosoftDistributions extends JavaBase { `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); let javaArchivePath = await tc.downloadTool(javaRelease.url); - core.info(`javaArchivePath is ${javaArchivePath}`); + core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); if (process.platform === 'win32' && (this.architecture === 'arm64' || this.architecture === 'aarch64')) { @@ -93,9 +93,9 @@ export class MicrosoftDistributions extends JavaBase { private async getAvailableVersions(): Promise { // TODO get these dynamically! // We will need Microsoft to add an endpoint where we can query for versions. - const owner = 'dmitry-shibanov'; + const owner = 'actions'; const repository = 'setup-java'; - const branch = 'v-dmshib/add-arm64-windows-microsoft'; + const branch = 'main'; const filePath = 'src/distributions/microsoft/microsoft-openjdk-versions.json'; From d98fd1728d7a2792d8828320cf6968e749148488 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Wed, 20 Dec 2023 16:31:19 +0100 Subject: [PATCH 5/6] run format and build --- dist/setup/index.js | 3 ++- src/distributions/microsoft/installer.ts | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index d09d94094..d6147377e 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -123970,7 +123970,8 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); - if (process.platform === 'win32' && (this.architecture === 'arm64' || this.architecture === 'aarch64')) { + if (process.platform === 'win32' && + (this.architecture === 'arm64' || this.architecture === 'aarch64')) { const javaArchivePathRenamed = `${javaArchivePath}.zip`; yield fs_1.default.renameSync(javaArchivePath, javaArchivePathRenamed); javaArchivePath = javaArchivePathRenamed; diff --git a/src/distributions/microsoft/installer.ts b/src/distributions/microsoft/installer.ts index 22240c0b2..1b68ef3c7 100644 --- a/src/distributions/microsoft/installer.ts +++ b/src/distributions/microsoft/installer.ts @@ -30,7 +30,10 @@ export class MicrosoftDistributions extends JavaBase { core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); - if (process.platform === 'win32' && (this.architecture === 'arm64' || this.architecture === 'aarch64')) { + if ( + process.platform === 'win32' && + (this.architecture === 'arm64' || this.architecture === 'aarch64') + ) { const javaArchivePathRenamed = `${javaArchivePath}.zip`; await fs.renameSync(javaArchivePath, javaArchivePathRenamed); javaArchivePath = javaArchivePathRenamed; From c2317c094107ab972eb0917ea624b24b38f2662a Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Thu, 21 Dec 2023 15:49:13 +0100 Subject: [PATCH 6/6] add comment --- dist/setup/index.js | 5 +++++ src/distributions/microsoft/installer.ts | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/dist/setup/index.js b/dist/setup/index.js index d6147377e..120da8bdc 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -123970,6 +123970,11 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); + // Rename archive to add extension because after downloading + // archive does not contain extension type and it leads to some issues + // on Windows runners without PowerShell Core. + // + // For default PowerShell Windows it should contain extension type to unpack it. if (process.platform === 'win32' && (this.architecture === 'arm64' || this.architecture === 'aarch64')) { const javaArchivePathRenamed = `${javaArchivePath}.zip`; diff --git a/src/distributions/microsoft/installer.ts b/src/distributions/microsoft/installer.ts index 1b68ef3c7..cc09955d9 100644 --- a/src/distributions/microsoft/installer.ts +++ b/src/distributions/microsoft/installer.ts @@ -30,6 +30,11 @@ export class MicrosoftDistributions extends JavaBase { core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); + // Rename archive to add extension because after downloading + // archive does not contain extension type and it leads to some issues + // on Windows runners without PowerShell Core. + // + // For default PowerShell Windows it should contain extension type to unpack it. if ( process.platform === 'win32' && (this.architecture === 'arm64' || this.architecture === 'aarch64') @@ -38,6 +43,7 @@ export class MicrosoftDistributions extends JavaBase { await fs.renameSync(javaArchivePath, javaArchivePathRenamed); javaArchivePath = javaArchivePathRenamed; } + const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0];