From 1c449b9ad21d0df6bccdbb7efa4d2f35a523cd2f Mon Sep 17 00:00:00 2001
From: Pawel Palucha <pawel.palucha@starburstdata.com>
Date: Tue, 7 Jun 2022 22:03:10 +0200
Subject: [PATCH] Fix support for Zulu arm64 architecture

Azul API stopped to support arm64 architecture, the only supported
option for ARM cpus is now 'arm'. This requires to set up hw_bitness
properly to get 64 bits version. 32 bits version can be obtained by
using 'arm' as an architecture.
---
 README.md                                     | 2 ++
 __tests__/distributors/zulu-installer.test.ts | 8 ++++++++
 dist/setup/index.js                           | 3 +++
 src/distributions/zulu/installer.ts           | 2 ++
 4 files changed, 15 insertions(+)

diff --git a/README.md b/README.md
index 0e8d744f..9dcd0fad 100644
--- a/README.md
+++ b/README.md
@@ -66,6 +66,8 @@ Currently, the following distributions are supported:
 
 **NOTE:** Adopt OpenJDK got moved to Eclipse Temurin and won't be updated anymore. It is highly recommended to migrate workflows from `adopt` to `temurin` to keep receiving software and security updates. See more details in the [Good-bye AdoptOpenJDK post](https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/).
 
+**NOTE:** For Zulu OpenJDK architectures x64 and arm64 are mapped to x86 / arm with proper hw_bitness.
+
 ### Caching packages dependencies
 The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under hood for caching dependencies but requires less configuration settings. Supported package managers are gradle, maven and sbt. The format of the used cache key is `setup-java-${{ platform }}-${{ packageManager }}-${{ fileHash }}`, where the hash is based on the following files:
 - gradle: `**/*.gradle*`, `**/gradle-wrapper.properties`
diff --git a/__tests__/distributors/zulu-installer.test.ts b/__tests__/distributors/zulu-installer.test.ts
index 79a3389f..49d71d4a 100644
--- a/__tests__/distributors/zulu-installer.test.ts
+++ b/__tests__/distributors/zulu-installer.test.ts
@@ -52,6 +52,14 @@ describe('getAvailableVersions', () => {
     [
       { version: '8', architecture: 'x64', packageType: 'jre+fx', checkLatest: false },
       '?os=macos&ext=tar.gz&bundle_type=jre&javafx=true&arch=x86&hw_bitness=64&release_status=ga&features=fx'
+    ],
+    [
+      { version: '11', architecture: 'arm64', packageType: 'jdk', checkLatest: false },
+      '?os=macos&ext=tar.gz&bundle_type=jdk&javafx=false&arch=arm&hw_bitness=64&release_status=ga'
+    ],
+    [
+      { version: '11', architecture: 'arm', packageType: 'jdk', checkLatest: false },
+      '?os=macos&ext=tar.gz&bundle_type=jdk&javafx=false&arch=arm&hw_bitness=&release_status=ga'
     ]
   ])('build correct url for %s -> %s', async (input, parsedUrl) => {
     const distribution = new ZuluDistribution(input);
diff --git a/dist/setup/index.js b/dist/setup/index.js
index f2a2170f..745b4386 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -102070,6 +102070,9 @@ class ZuluDistribution extends base_installer_1.JavaBase {
         else if (this.architecture == 'x86') {
             return { arch: 'x86', hw_bitness: '32', abi: '' };
         }
+        else if (this.architecture == 'arm64') {
+            return { arch: 'arm', hw_bitness: '64', abi: '' };
+        }
         else {
             return { arch: this.architecture, hw_bitness: '', abi: '' };
         }
diff --git a/src/distributions/zulu/installer.ts b/src/distributions/zulu/installer.ts
index 7cb32704..34679bbd 100644
--- a/src/distributions/zulu/installer.ts
+++ b/src/distributions/zulu/installer.ts
@@ -133,6 +133,8 @@ export class ZuluDistribution extends JavaBase {
       return { arch: 'x86', hw_bitness: '64', abi: '' };
     } else if (this.architecture == 'x86') {
       return { arch: 'x86', hw_bitness: '32', abi: '' };
+    } else if (this.architecture == 'arm64') {
+      return { arch: 'arm', hw_bitness: '64', abi: '' };
     } else {
       return { arch: this.architecture, hw_bitness: '', abi: '' };
     }