From 7a6d8a8234af8eb26422e24e3006232cccaa061b Mon Sep 17 00:00:00 2001
From: Gregory Mitchell <me@gmitch215.xyz>
Date: Thu, 12 Dec 2024 16:21:52 -0600
Subject: [PATCH] Add Support for JetBrains Runtime (#637)

* Add Support for JetBrains Runtime

- Add Installer, Models
- Includes Tests & Test Manifest Data
- Add to `e2e-versions.yml`
- Run `npm run build`
- Update README.md

* Add Docs + Distro Factory

* Fix Runtime Unrecognizable

* `npm run build` (JBR)

* Fix Incorrect JBR Distribution

* Switch to `jbrsdk_jcef`

* Fix Incorrect File Extension

* `npm run build` (JBR)

* Fix Windows Support

* Add `GITHUB_TOKEN` Authentication

* Update Authorization, Add Documentation

* Fix PR Issues

- Fix JDK 11 URL Bug
- Add JDK URL Testing to ensure versions can be downloaded
- Run Prettier

* Change Distribution to \`jbrsdk\`

* Don't Replace Underscores

* Fix `semver` not resolving correctly

* Update e2e-versions.yml

- Add `GITHUB_TOKEN` environment variable for JetBrains requests
- Add `jetbrains` to other E2E tests

* `npm run format`

* Fix Format, Inaccessible URLs

* Update Tests

* Fix Broken URLs, Add Additional Package Types

* `npm run build`

* Fix JetBrains Tests, Issues in `e2e-versions.yml`

* Add Hidden JDK 11 Versions

* Update `jetbrains-installer` Tests

* Add Notices in Documentation

* Fix Documentation

* Run `npm audit fix`

* Fix Tests on Windows
---
 .github/workflows/e2e-versions.yml            |   81 +-
 README.md                                     |    1 +
 __tests__/data/jetbrains.json                 | 1454 +++++++++++++++++
 .../distributors/jetbrains-installer.test.ts  |  120 ++
 dist/setup/index.js                           |  229 +++
 docs/advanced-usage.md                        |   60 +-
 package-lock.json                             |    1 +
 src/distributions/distribution-factory.ts     |    6 +-
 src/distributions/jetbrains/installer.ts      |  233 +++
 src/distributions/jetbrains/models.ts         |   13 +
 10 files changed, 2192 insertions(+), 6 deletions(-)
 create mode 100644 __tests__/data/jetbrains.json
 create mode 100644 __tests__/distributors/jetbrains-installer.test.ts
 create mode 100644 src/distributions/jetbrains/installer.ts
 create mode 100644 src/distributions/jetbrains/models.ts

diff --git a/.github/workflows/e2e-versions.yml b/.github/workflows/e2e-versions.yml
index d80b1c07a..d0476606c 100644
--- a/.github/workflows/e2e-versions.yml
+++ b/.github/workflows/e2e-versions.yml
@@ -31,7 +31,8 @@ jobs:
             'semeru',
             'corretto',
             'dragonwell',
-            'sapmachine'
+            'sapmachine',
+            'jetbrains'
           ] # internally 'adopt-hotspot' is the same as 'adopt'
         version: ['21', '11', '17']
         exclude:
@@ -70,6 +71,8 @@ jobs:
         with:
           java-version: ${{ matrix.version }}
           distribution: ${{ matrix.distribution }}
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: Verify Java
         run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
         shell: bash
@@ -103,6 +106,12 @@ jobs:
           - distribution: sapmachine
             os: ubuntu-latest
             version: '17.0.7'
+          - distribution: jetbrains
+            os: ubuntu-latest
+            version: '11.0.11'
+          - distribution: jetbrains
+            os: ubuntu-latest
+            version: '17.0.7'
     steps:
       - name: Checkout
         uses: actions/checkout@v4
@@ -115,6 +124,8 @@ jobs:
       - name: Verify Java
         run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
         shell: bash
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 
   setup-java-check-latest:
     name: ${{ matrix.distribution }} ${{ matrix.version }} - check-latest flag - ${{ matrix.os }}
@@ -125,7 +136,14 @@ jobs:
       matrix:
         os: [macos-latest, windows-latest, ubuntu-latest]
         distribution:
-          ['temurin', 'zulu', 'liberica', 'dragonwell', 'sapmachine']
+          [
+            'temurin',
+            'zulu',
+            'liberica',
+            'dragonwell',
+            'sapmachine',
+            'jetbrains'
+          ]
         exclude:
           - distribution: dragonwell
             os: macos-latest
@@ -139,6 +157,8 @@ jobs:
           distribution: ${{ matrix.distribution }}
           java-version: 11
           check-latest: true
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: Verify Java
         run: bash __tests__/verify-java.sh "11" "${{ steps.setup-java.outputs.path }}"
         shell: bash
@@ -152,7 +172,14 @@ jobs:
       matrix:
         os: [macos-latest, windows-latest, ubuntu-latest]
         distribution:
-          ['temurin', 'zulu', 'liberica', 'dragonwell', 'sapmachine']
+          [
+            'temurin',
+            'zulu',
+            'liberica',
+            'dragonwell',
+            'sapmachine',
+            'jetbrains'
+          ]
         exclude:
           - distribution: dragonwell
             os: macos-latest
@@ -167,6 +194,8 @@ jobs:
           java-version: |
             11
             17
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: Verify Java env variables
         run: |
           $versionsArr = "11","17"
@@ -258,7 +287,8 @@ jobs:
       fail-fast: false
       matrix:
         os: [macos-13, windows-latest, ubuntu-latest]
-        distribution: ['temurin', 'zulu', 'liberica', 'semeru', 'sapmachine']
+        distribution:
+          ['temurin', 'zulu', 'liberica', 'semeru', 'sapmachine', 'jetbrains']
         java-package: ['jre']
         version: ['17.0']
         include:
@@ -282,6 +312,47 @@ jobs:
             java-package: jre
             version: '8'
             os: windows-latest
+          - distribution: 'jetbrains'
+            java-package: jdk+jcef
+            version: '11'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jdk+jcef
+            version: '17'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jdk+jcef
+            version: '21'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jre+jcef
+            version: '11'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jre+jcef
+            version: '17'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jre+jcef
+            version: '21'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jdk+ft
+            version: '17'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jdk+ft
+            version: '21'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jre+ft
+            version: '17'
+            os: ubuntu-latest
+          - distribution: 'jetbrains'
+            java-package: jre+ft
+            version: '21'
+            os: ubuntu-latest
+
     steps:
       - name: Checkout
         uses: actions/checkout@v4
@@ -292,6 +363,8 @@ jobs:
           java-version: ${{ matrix.version }}
           java-package: ${{ matrix.java-package }}
           distribution: ${{ matrix.distribution }}
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: Verify Java
         run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
         shell: bash
diff --git a/README.md b/README.md
index aaf9cce87..532a78ff8 100644
--- a/README.md
+++ b/README.md
@@ -110,6 +110,7 @@ Currently, the following distributions are supported:
 | `dragonwell` | Alibaba Dragonwell JDK | [Link](https://dragonwell-jdk.io/) | [Link](https://www.aliyun.com/product/dragonwell/)
 | `sapmachine` | SAP SapMachine JDK/JRE | [Link](https://sapmachine.io/) | [Link](https://github.com/SAP/SapMachine/blob/sapmachine/LICENSE)
 | `graalvm` | Oracle GraalVM | [Link](https://www.graalvm.org/) | [Link](https://www.oracle.com/downloads/licenses/graal-free-license.html)
+| `jetbrains` | JetBrains Runtime | [Link](https://github.com/JetBrains/JetBrainsRuntime/) | [Link](https://github.com/JetBrains/JetBrainsRuntime/blob/main/LICENSE)
 
 **NOTE:** The different distributors can provide discrepant list of available versions / supported configurations. Please refer to the official documentation to see the list of supported versions.
 
diff --git a/__tests__/data/jetbrains.json b/__tests__/data/jetbrains.json
new file mode 100644
index 000000000..bf59d620b
--- /dev/null
+++ b/__tests__/data/jetbrains.json
@@ -0,0 +1,1454 @@
+[
+    {
+      "tag_name": "jbr-release-21.0.3b465.3",
+      "semver": "21.0.3",
+      "build": 465.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.3-linux-x64-b465.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.3b458.1",
+      "semver": "21.0.3",
+      "build": 458.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.3-linux-x64-b458.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.3b453.2",
+      "semver": "21.0.3",
+      "build": 453.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.3-linux-x64-b453.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.11b1207.24",
+      "semver": "17.0.11",
+      "build": 1207.24,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.11-linux-x64-b1207.24.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.11b1207.23",
+      "semver": "17.0.11",
+      "build": 1207.23,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.11-linux-x64-b1207.23.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.3b446.1",
+      "semver": "21.0.3",
+      "build": 446.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.3-linux-x64-b446.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1207.14",
+      "semver": "17.0.10",
+      "build": 1207.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1207.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b829.27",
+      "semver": "17.0.10",
+      "build": 829.27,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b829.27.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1087.23",
+      "semver": "17.0.10",
+      "build": 1087.23,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1087.23.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1207.12",
+      "semver": "17.0.10",
+      "build": 1207.12,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1207.12.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1087.21",
+      "semver": "17.0.10",
+      "build": 1087.21,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1087.21.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1207.6",
+      "semver": "17.0.10",
+      "build": 1207.6,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1207.6.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.2b375.1",
+      "semver": "21.0.2",
+      "build": 375.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.2-linux-x64-b375.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1207.1",
+      "semver": "17.0.10",
+      "build": 1207.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1207.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1186.1",
+      "semver": "17.0.10",
+      "build": 1186.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1186.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1171.14",
+      "semver": "17.0.10",
+      "build": 1171.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1171.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b829.26",
+      "semver": "17.0.10",
+      "build": 829.26,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b829.26.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.2b346.3",
+      "semver": "21.0.2",
+      "build": 346.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.2-linux-x64-b346.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1000.48",
+      "semver": "17.0.10",
+      "build": 1000.48,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1000.48.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.2b341.4",
+      "semver": "21.0.2",
+      "build": 341.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.2-linux-x64-b341.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1087.17",
+      "semver": "17.0.10",
+      "build": 1087.17,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1087.17.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1166.2",
+      "semver": "17.0.9",
+      "build": 1166.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1166.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1162.7",
+      "semver": "17.0.9",
+      "build": 1162.7,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1162.7.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1087.11",
+      "semver": "17.0.9",
+      "build": 1087.11,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1087.11.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1087.9",
+      "semver": "17.0.9",
+      "build": 1087.9,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1087.9.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1087.7",
+      "semver": "17.0.9",
+      "build": 1087.7,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1087.7.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1000.47",
+      "semver": "17.0.9",
+      "build": 1000.47,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1000.47.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1000.46",
+      "semver": "17.0.9",
+      "build": 1000.46,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1000.46.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1087.3",
+      "semver": "17.0.9",
+      "build": 1087.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1087.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1080.1",
+      "semver": "17.0.8.1",
+      "build": 1080.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1080.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1072.1",
+      "semver": "17.0.8.1",
+      "build": 1072.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1072.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1070.2",
+      "semver": "17.0.8.1",
+      "build": 1070.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1070.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1063.1",
+      "semver": "17.0.8.1",
+      "build": 1063.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1063.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1000.32",
+      "semver": "17.0.8.1",
+      "build": 1000.32,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1000.32.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1059.3",
+      "semver": "17.0.8.1",
+      "build": 1059.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1059.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8b1000.22",
+      "semver": "17.0.8",
+      "build": 1000.22,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8-linux-x64-b1000.22.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8b1000.8",
+      "semver": "17.0.8",
+      "build": 1000.8,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8-linux-x64-b1000.8.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b1000.6",
+      "semver": "17.0.7",
+      "build": 1000.6,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b1000.6.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b1000.5",
+      "semver": "17.0.7",
+      "build": 1000.5,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b1000.5.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b1000.2",
+      "semver": "17.0.7",
+      "build": 1000.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b1000.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b985.2",
+      "semver": "17.0.7",
+      "build": 985.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b985.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b979.4",
+      "semver": "17.0.7",
+      "build": 979.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b979.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b829.16",
+      "semver": "17.0.7",
+      "build": 829.16,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b829.16.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b966.2",
+      "semver": "17.0.7",
+      "build": 966.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b966.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b964.1",
+      "semver": "17.0.7",
+      "build": 964.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b964.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b829.14",
+      "semver": "17.0.7",
+      "build": 829.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b829.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b953.1",
+      "semver": "17.0.7",
+      "build": 953.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b953.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b829.9",
+      "semver": "17.0.6",
+      "build": 829.9,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b829.9.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b469.82",
+      "semver": "17.0.6",
+      "build": 469.82,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b469.82.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b829.5",
+      "semver": "17.0.6",
+      "build": 829.5,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b829.5.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b653.34",
+      "semver": "17.0.6",
+      "build": 653.34,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b653.34.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b829.4",
+      "semver": "17.0.6",
+      "build": 829.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b829.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b829.1",
+      "semver": "17.0.6",
+      "build": 829.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b829.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b653.32",
+      "semver": "17.0.6",
+      "build": 653.32,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b653.32.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b802.4",
+      "semver": "17.0.6",
+      "build": 802.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b802.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b802.1",
+      "semver": "17.0.6",
+      "build": 802.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b802.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b785.1",
+      "semver": "17.0.6",
+      "build": 785.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b785.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b779.1",
+      "semver": "17.0.6",
+      "build": 779.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b779.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b762.1",
+      "semver": "17.0.5",
+      "build": 762.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b762.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b653.25",
+      "semver": "17.0.5",
+      "build": 653.25,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b653.25.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b759.1",
+      "semver": "17.0.5",
+      "build": 759.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b759.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b653.23",
+      "semver": "17.0.5",
+      "build": 653.23,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b653.23.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b653.14",
+      "semver": "17.0.5",
+      "build": 653.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b653.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b469.71",
+      "semver": "17.0.5",
+      "build": 469.71,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b469.71.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_16b2043.64",
+      "semver": "11.0.16",
+      "build": 2043.64,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk_nomod-11_0_16-linux-x64-b2043.64.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b653.6",
+      "semver": "17.0.5",
+      "build": 653.6,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b653.6.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b469.67",
+      "semver": "17.0.5",
+      "build": 469.67,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b469.67.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b653.1",
+      "semver": "17.0.4.1",
+      "build": 653.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b653.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b646.8",
+      "semver": "17.0.4.1",
+      "build": 646.8,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b646.8.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b629.2",
+      "semver": "17.0.4.1",
+      "build": 629.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b629.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b617.2",
+      "semver": "17.0.4.1",
+      "build": 617.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b617.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b469.62",
+      "semver": "17.0.4.1",
+      "build": 469.62,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b469.62.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b597.1",
+      "semver": "17.0.4.1",
+      "build": 597.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b597.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4b469.53",
+      "semver": "17.0.4",
+      "build": 469.53,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4-linux-x64-b469.53.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4b469.44",
+      "semver": "17.0.4",
+      "build": 469.44,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4-linux-x64-b469.44.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.3b469.37",
+      "semver": "17.0.3",
+      "build": 469.37,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.37.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.32",
+      "semver": "17.0.3",
+      "build": 469.32,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.32.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.30",
+      "semver": "17.0.3",
+      "build": 469.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.19",
+      "semver": "17.0.3",
+      "build": 469.19,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.19.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b498.3",
+      "semver": "17.0.3",
+      "build": 498.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b498.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.16",
+      "semver": "17.0.3",
+      "build": 469.16,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.16.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.12",
+      "semver": "17.0.3",
+      "build": 469.12,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.12.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.3",
+      "semver": "17.0.3",
+      "build": 469.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b463.3",
+      "semver": "17.0.3",
+      "build": 463.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b463.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b423.10",
+      "semver": "17.0.3",
+      "build": 423.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b423.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_15b2043.56",
+      "semver": "11.0.15",
+      "build": 2043.56,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk_nomod-11_0_15-linux-x64-b2043.56.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.45",
+      "semver": "11.0.14.1",
+      "build": 2043.45,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk_nomod-11_0_14_1-linux-x64-b2043.45.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.2b396.4",
+      "semver": "17.0.2",
+      "build": 396.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.2-linux-x64-b396.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.25",
+      "semver": "11.0.14.1",
+      "build": 2043.25,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.25.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.22",
+      "semver": "11.0.14.1",
+      "build": 2043.22,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.22.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.17",
+      "semver": "11.0.14.1",
+      "build": 2043.17,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.17.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.14",
+      "semver": "11.0.14.1",
+      "build": 2043.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.11",
+      "semver": "11.0.14.1",
+      "build": 2043.11,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.11.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14b2043.2",
+      "semver": "11.0.14",
+      "build": 2043.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14-linux-x64-b2043.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b1751.46",
+      "semver": "11.0.14.1",
+      "build": 1751.46,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b1751.46.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14b1993.2",
+      "semver": "11.0.14",
+      "build": 1993.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14-linux-x64-b1993.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr17_0_2b315.1",
+      "semver": "17.0.2",
+      "build": 315.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17_0_2-linux-x64-b315.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14b1982.1",
+      "semver": "11.0.14",
+      "build": 1982.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14-linux-x64-b1982.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1890.3",
+      "semver": "11.0.13",
+      "build": 1890.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1890.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.25",
+      "semver": "11.0.13",
+      "build": 1751.25,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.25.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.24",
+      "semver": "11.0.13",
+      "build": 1751.24,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.24.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.21",
+      "semver": "11.0.13",
+      "build": 1751.21,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.21.tar.gz"
+    },
+    {
+      "tag_name": "jbr17_0_1b164.8",
+      "semver": "17.0.1",
+      "build": 164.8,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17_0_1-linux-x64-b164.8.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.19",
+      "semver": "11.0.13",
+      "build": 1751.19,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.19.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_13-b1504.49",
+      "semver": "11.0.13",
+      "build": 1504.49,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1504.49.tar.gz"
+    },
+    {
+      "tag_name": "jbr17_0_1b164.4",
+      "semver": "17.0.1",
+      "build": 164.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17_0_1-linux-x64-b164.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.16",
+      "semver": "11.0.13",
+      "build": 1751.16,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.16.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1751.11",
+      "semver": "11.0.12",
+      "build": 1751.11,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1751.11.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1729.1",
+      "semver": "11.0.12",
+      "build": 1729.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1729.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1715.4",
+      "semver": "11.0.12",
+      "build": 1715.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1715.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1692.9",
+      "semver": "11.0.12",
+      "build": 1692.9,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1692.9.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_12-b1504.37",
+      "semver": "11.0.12",
+      "build": 1504.37,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1504.37.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1665.1",
+      "semver": "11.0.12",
+      "build": 1665.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1665.1.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_12-b1504.28",
+      "semver": "11.0.12",
+      "build": 1504.28,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1504.28.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_12-b1504.27",
+      "semver": "11.0.12",
+      "build": 1504.27,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1504.27.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1504.16",
+      "semver": "11.0.11",
+      "build": 1504.16,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1504.16.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1504.13",
+      "semver": "11.0.11",
+      "build": 1504.13,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1504.13.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1504.12",
+      "semver": "11.0.11",
+      "build": 1504.12,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1504.12.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1542.1",
+      "semver": "11.0.11",
+      "build": 1542.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1542.1.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1504.8",
+      "semver": "11.0.11",
+      "build": 1504.8,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1504.8.tar.gz"
+    },
+    {
+      "tag_name": "11_0_11b1536.2",
+      "semver": "11.0.11",
+      "build": 1536.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1536.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.3b465.3",
+      "semver": "21.0.3",
+      "build": 465.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.3-linux-x64-b465.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.3b458.1",
+      "semver": "21.0.3",
+      "build": 458.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.3-linux-x64-b458.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.3b453.2",
+      "semver": "21.0.3",
+      "build": 453.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.3-linux-x64-b453.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.11b1207.24",
+      "semver": "17.0.11",
+      "build": 1207.24,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.11-linux-x64-b1207.24.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.11b1207.23",
+      "semver": "17.0.11",
+      "build": 1207.23,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.11-linux-x64-b1207.23.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.3b446.1",
+      "semver": "21.0.3",
+      "build": 446.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.3-linux-x64-b446.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1207.14",
+      "semver": "17.0.10",
+      "build": 1207.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1207.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b829.27",
+      "semver": "17.0.10",
+      "build": 829.27,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b829.27.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1087.23",
+      "semver": "17.0.10",
+      "build": 1087.23,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1087.23.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1207.12",
+      "semver": "17.0.10",
+      "build": 1207.12,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1207.12.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1087.21",
+      "semver": "17.0.10",
+      "build": 1087.21,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1087.21.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1207.6",
+      "semver": "17.0.10",
+      "build": 1207.6,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1207.6.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.2b375.1",
+      "semver": "21.0.2",
+      "build": 375.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.2-linux-x64-b375.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1207.1",
+      "semver": "17.0.10",
+      "build": 1207.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1207.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1186.1",
+      "semver": "17.0.10",
+      "build": 1186.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1186.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1171.14",
+      "semver": "17.0.10",
+      "build": 1171.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1171.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b829.26",
+      "semver": "17.0.10",
+      "build": 829.26,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b829.26.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.2b346.3",
+      "semver": "21.0.2",
+      "build": 346.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.2-linux-x64-b346.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1000.48",
+      "semver": "17.0.10",
+      "build": 1000.48,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1000.48.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-21.0.2b341.4",
+      "semver": "21.0.2",
+      "build": 341.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-21.0.2-linux-x64-b341.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.10b1087.17",
+      "semver": "17.0.10",
+      "build": 1087.17,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.10-linux-x64-b1087.17.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1166.2",
+      "semver": "17.0.9",
+      "build": 1166.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1166.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1162.7",
+      "semver": "17.0.9",
+      "build": 1162.7,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1162.7.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1087.11",
+      "semver": "17.0.9",
+      "build": 1087.11,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1087.11.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1087.9",
+      "semver": "17.0.9",
+      "build": 1087.9,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1087.9.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1087.7",
+      "semver": "17.0.9",
+      "build": 1087.7,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1087.7.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1000.47",
+      "semver": "17.0.9",
+      "build": 1000.47,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1000.47.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1000.46",
+      "semver": "17.0.9",
+      "build": 1000.46,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1000.46.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.9b1087.3",
+      "semver": "17.0.9",
+      "build": 1087.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.9-linux-x64-b1087.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1080.1",
+      "semver": "17.0.8.1",
+      "build": 1080.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1080.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1072.1",
+      "semver": "17.0.8.1",
+      "build": 1072.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1072.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1070.2",
+      "semver": "17.0.8.1",
+      "build": 1070.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1070.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1063.1",
+      "semver": "17.0.8.1",
+      "build": 1063.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1063.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1000.32",
+      "semver": "17.0.8.1",
+      "build": 1000.32,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1000.32.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8.1b1059.3",
+      "semver": "17.0.8.1",
+      "build": 1059.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8.1-linux-x64-b1059.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8b1000.22",
+      "semver": "17.0.8",
+      "build": 1000.22,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8-linux-x64-b1000.22.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.8b1000.8",
+      "semver": "17.0.8",
+      "build": 1000.8,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.8-linux-x64-b1000.8.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b1000.6",
+      "semver": "17.0.7",
+      "build": 1000.6,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b1000.6.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b1000.5",
+      "semver": "17.0.7",
+      "build": 1000.5,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b1000.5.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b1000.2",
+      "semver": "17.0.7",
+      "build": 1000.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b1000.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b985.2",
+      "semver": "17.0.7",
+      "build": 985.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b985.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b979.4",
+      "semver": "17.0.7",
+      "build": 979.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b979.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b829.16",
+      "semver": "17.0.7",
+      "build": 829.16,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b829.16.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b966.2",
+      "semver": "17.0.7",
+      "build": 966.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b966.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b964.1",
+      "semver": "17.0.7",
+      "build": 964.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b964.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b829.14",
+      "semver": "17.0.7",
+      "build": 829.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b829.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.7b953.1",
+      "semver": "17.0.7",
+      "build": 953.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.7-linux-x64-b953.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b829.9",
+      "semver": "17.0.6",
+      "build": 829.9,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b829.9.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b469.82",
+      "semver": "17.0.6",
+      "build": 469.82,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b469.82.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b829.5",
+      "semver": "17.0.6",
+      "build": 829.5,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b829.5.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b653.34",
+      "semver": "17.0.6",
+      "build": 653.34,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b653.34.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b829.4",
+      "semver": "17.0.6",
+      "build": 829.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b829.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b829.1",
+      "semver": "17.0.6",
+      "build": 829.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b829.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b653.32",
+      "semver": "17.0.6",
+      "build": 653.32,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b653.32.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b802.4",
+      "semver": "17.0.6",
+      "build": 802.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b802.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b802.1",
+      "semver": "17.0.6",
+      "build": 802.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b802.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b785.1",
+      "semver": "17.0.6",
+      "build": 785.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b785.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.6b779.1",
+      "semver": "17.0.6",
+      "build": 779.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.6-linux-x64-b779.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b762.1",
+      "semver": "17.0.5",
+      "build": 762.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b762.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b653.25",
+      "semver": "17.0.5",
+      "build": 653.25,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b653.25.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b759.1",
+      "semver": "17.0.5",
+      "build": 759.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b759.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b653.23",
+      "semver": "17.0.5",
+      "build": 653.23,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b653.23.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b653.14",
+      "semver": "17.0.5",
+      "build": 653.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b653.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b469.71",
+      "semver": "17.0.5",
+      "build": 469.71,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b469.71.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_16b2043.64",
+      "semver": "11.0.16",
+      "build": 2043.64,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk_nomod-11_0_16-linux-x64-b2043.64.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b653.6",
+      "semver": "17.0.5",
+      "build": 653.6,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b653.6.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.5b469.67",
+      "semver": "17.0.5",
+      "build": 469.67,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.5-linux-x64-b469.67.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b653.1",
+      "semver": "17.0.4.1",
+      "build": 653.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b653.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b646.8",
+      "semver": "17.0.4.1",
+      "build": 646.8,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b646.8.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b629.2",
+      "semver": "17.0.4.1",
+      "build": 629.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b629.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b617.2",
+      "semver": "17.0.4.1",
+      "build": 617.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b617.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b469.62",
+      "semver": "17.0.4.1",
+      "build": 469.62,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b469.62.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4.1b597.1",
+      "semver": "17.0.4.1",
+      "build": 597.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4.1-linux-x64-b597.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4b469.53",
+      "semver": "17.0.4",
+      "build": 469.53,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4-linux-x64-b469.53.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.4b469.44",
+      "semver": "17.0.4",
+      "build": 469.44,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.4-linux-x64-b469.44.tar.gz"
+    },
+    {
+      "tag_name": "jbr-release-17.0.3b469.37",
+      "semver": "17.0.3",
+      "build": 469.37,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.37.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.32",
+      "semver": "17.0.3",
+      "build": 469.32,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.32.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.30",
+      "semver": "17.0.3",
+      "build": 469.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.19",
+      "semver": "17.0.3",
+      "build": 469.19,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.19.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b498.3",
+      "semver": "17.0.3",
+      "build": 498.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b498.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.16",
+      "semver": "17.0.3",
+      "build": 469.16,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.16.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.12",
+      "semver": "17.0.3",
+      "build": 469.12,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.12.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b469.3",
+      "semver": "17.0.3",
+      "build": 469.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b469.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b463.3",
+      "semver": "17.0.3",
+      "build": 463.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b463.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.3b423.10",
+      "semver": "17.0.3",
+      "build": 423.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.3-linux-x64-b423.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_15b2043.56",
+      "semver": "11.0.15",
+      "build": 2043.56,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk_nomod-11_0_15-linux-x64-b2043.56.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.45",
+      "semver": "11.0.14.1",
+      "build": 2043.45,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk_nomod-11_0_14_1-linux-x64-b2043.45.tar.gz"
+    },
+    {
+      "tag_name": "jbr17.0.2b396.4",
+      "semver": "17.0.2",
+      "build": 396.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17.0.2-linux-x64-b396.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.25",
+      "semver": "11.0.14.1",
+      "build": 2043.25,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.25.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.22",
+      "semver": "11.0.14.1",
+      "build": 2043.22,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.22.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.17",
+      "semver": "11.0.14.1",
+      "build": 2043.17,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.17.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.14",
+      "semver": "11.0.14.1",
+      "build": 2043.14,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.14.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b2043.11",
+      "semver": "11.0.14.1",
+      "build": 2043.11,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b2043.11.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14b2043.2",
+      "semver": "11.0.14",
+      "build": 2043.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14-linux-x64-b2043.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14_1b1751.46",
+      "semver": "11.0.14.1",
+      "build": 1751.46,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14_1-linux-x64-b1751.46.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14b1993.2",
+      "semver": "11.0.14",
+      "build": 1993.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14-linux-x64-b1993.2.tar.gz"
+    },
+    {
+      "tag_name": "jbr17_0_2b315.1",
+      "semver": "17.0.2",
+      "build": 315.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17_0_2-linux-x64-b315.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_14b1982.1",
+      "semver": "11.0.14",
+      "build": 1982.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_14-linux-x64-b1982.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1890.3",
+      "semver": "11.0.13",
+      "build": 1890.3,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1890.3.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.25",
+      "semver": "11.0.13",
+      "build": 1751.25,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.25.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.24",
+      "semver": "11.0.13",
+      "build": 1751.24,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.24.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.21",
+      "semver": "11.0.13",
+      "build": 1751.21,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.21.tar.gz"
+    },
+    {
+      "tag_name": "jbr17_0_1b164.8",
+      "semver": "17.0.1",
+      "build": 164.8,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17_0_1-linux-x64-b164.8.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.19",
+      "semver": "11.0.13",
+      "build": 1751.19,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.19.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_13-b1504.49",
+      "semver": "11.0.13",
+      "build": 1504.49,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1504.49.tar.gz"
+    },
+    {
+      "tag_name": "jbr17_0_1b164.4",
+      "semver": "17.0.1",
+      "build": 164.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-17_0_1-linux-x64-b164.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_13b1751.16",
+      "semver": "11.0.13",
+      "build": 1751.16,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_13-linux-x64-b1751.16.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1751.11",
+      "semver": "11.0.12",
+      "build": 1751.11,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1751.11.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1729.1",
+      "semver": "11.0.12",
+      "build": 1729.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1729.1.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1715.4",
+      "semver": "11.0.12",
+      "build": 1715.4,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1715.4.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1692.9",
+      "semver": "11.0.12",
+      "build": 1692.9,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1692.9.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_12-b1504.37",
+      "semver": "11.0.12",
+      "build": 1504.37,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1504.37.tar.gz"
+    },
+    {
+      "tag_name": "jbr11_0_12b1665.1",
+      "semver": "11.0.12",
+      "build": 1665.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1665.1.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_12-b1504.28",
+      "semver": "11.0.12",
+      "build": 1504.28,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1504.28.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_12-b1504.27",
+      "semver": "11.0.12",
+      "build": 1504.27,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_12-linux-x64-b1504.27.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1504.16",
+      "semver": "11.0.11",
+      "build": 1504.16,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1504.16.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1504.13",
+      "semver": "11.0.11",
+      "build": 1504.13,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1504.13.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1504.12",
+      "semver": "11.0.11",
+      "build": 1504.12,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1504.12.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1542.1",
+      "semver": "11.0.11",
+      "build": 1542.1,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1542.1.tar.gz"
+    },
+    {
+      "tag_name": "jb11_0_11-b1504.8",
+      "semver": "11.0.11",
+      "build": 1504.8,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1504.8.tar.gz"
+    },
+    {
+      "tag_name": "11_0_11b1536.2",
+      "semver": "11.0.11",
+      "build": 1536.2,
+      "url": "https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-11_0_11-linux-x64-b1536.2.tar.gz"
+    }
+  ]
\ No newline at end of file
diff --git a/__tests__/distributors/jetbrains-installer.test.ts b/__tests__/distributors/jetbrains-installer.test.ts
new file mode 100644
index 000000000..02316e44d
--- /dev/null
+++ b/__tests__/distributors/jetbrains-installer.test.ts
@@ -0,0 +1,120 @@
+import https from 'https';
+import {HttpClient} from '@actions/http-client';
+import {JetBrainsDistribution} from '../../src/distributions/jetbrains/installer';
+
+import manifestData from '../data/jetbrains.json';
+import os from 'os';
+
+describe('getAvailableVersions', () => {
+  let spyHttpClient: jest.SpyInstance;
+
+  beforeEach(() => {
+    spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson');
+    spyHttpClient.mockReturnValue({
+      statusCode: 200,
+      headers: {},
+      result: []
+    });
+  });
+
+  afterEach(() => {
+    jest.resetAllMocks();
+    jest.clearAllMocks();
+    jest.restoreAllMocks();
+  });
+
+  it('load available versions', async () => {
+    spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson');
+    spyHttpClient.mockReturnValueOnce({
+      statusCode: 200,
+      headers: {},
+      result: manifestData as any
+    });
+
+    const distribution = new JetBrainsDistribution({
+      version: '17',
+      architecture: 'x64',
+      packageType: 'jdk',
+      checkLatest: false
+    });
+    const availableVersions = await distribution['getAvailableVersions']();
+    expect(availableVersions).not.toBeNull();
+
+    const length =
+      os.platform() === 'win32'
+        ? manifestData.length - 1
+        : manifestData.length + 1;
+    expect(availableVersions.length).toBe(length);
+  }, 10_000);
+});
+
+describe('findPackageForDownload', () => {
+  it.each([
+    ['17', '17.0.11+1207.24'],
+    ['11.0', '11.0.16+2043.64'],
+    ['11.0.11', '11.0.11+1542.1'],
+    ['21.0.2', '21.0.2+375.1'],
+    ['21', '21.0.3+465.3'],
+    ['x', '21.0.3+465.3']
+  ])('version is resolved correctly %s -> %s', async (input, expected) => {
+    const distribution = new JetBrainsDistribution({
+      version: input,
+      architecture: 'x64',
+      packageType: 'jdk',
+      checkLatest: false
+    });
+    distribution['getAvailableVersions'] = async () => manifestData as any;
+    const resolvedVersion = await distribution['findPackageForDownload'](input);
+    expect(resolvedVersion.version).toBe(expected);
+  });
+
+  it.each(['17', '11.0', '11.0.11', '21.0.2', '21'])(
+    'version %s can be downloaded',
+    async input => {
+      const distribution = new JetBrainsDistribution({
+        version: input,
+        architecture: 'x64',
+        packageType: 'jdk',
+        checkLatest: false
+      });
+      distribution['getAvailableVersions'] = async () => manifestData as any;
+      const resolvedVersion = await distribution['findPackageForDownload'](
+        input
+      );
+      const url = resolvedVersion.url;
+      const options = {method: 'HEAD'};
+
+      https.request(url, options, res => {
+        // JetBrains uses 403 for inexistent packages
+        expect(res.statusCode).not.toBe(403);
+        res.resume();
+      });
+    }
+  );
+
+  it('version is not found', async () => {
+    const distribution = new JetBrainsDistribution({
+      version: '8.0.452',
+      architecture: 'x64',
+      packageType: 'jdk',
+      checkLatest: false
+    });
+    distribution['getAvailableVersions'] = async () => manifestData as any;
+    await expect(distribution['findPackageForDownload']('8.x')).rejects.toThrow(
+      /Could not find satisfied version for SemVer */
+    );
+  });
+
+  it('version list is empty', async () => {
+    const distribution = new JetBrainsDistribution({
+      version: '8',
+      architecture: 'x64',
+      packageType: 'jdk',
+      checkLatest: false
+    });
+    distribution['getAvailableVersions'] = async () => [];
+    await expect(distribution['findPackageForDownload']('8')).rejects.toThrow(
+      /Could not find satisfied version for SemVer */
+    );
+  });
+});
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 9dc658d8f..927cd626b 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -124058,6 +124058,7 @@ const installer_9 = __nccwpck_require__(64298);
 const installer_10 = __nccwpck_require__(16132);
 const installer_11 = __nccwpck_require__(52869);
 const installer_12 = __nccwpck_require__(55644);
+const installer_13 = __nccwpck_require__(12634);
 var JavaDistribution;
 (function (JavaDistribution) {
     JavaDistribution["Adopt"] = "adopt";
@@ -124074,6 +124075,7 @@ var JavaDistribution;
     JavaDistribution["Dragonwell"] = "dragonwell";
     JavaDistribution["SapMachine"] = "sapmachine";
     JavaDistribution["GraalVM"] = "graalvm";
+    JavaDistribution["JetBrains"] = "jetbrains";
 })(JavaDistribution || (JavaDistribution = {}));
 function getJavaDistribution(distributionName, installerOptions, jdkFile) {
     switch (distributionName) {
@@ -124104,6 +124106,8 @@ function getJavaDistribution(distributionName, installerOptions, jdkFile) {
             return new installer_11.SapMachineDistribution(installerOptions);
         case JavaDistribution.GraalVM:
             return new installer_12.GraalVMDistribution(installerOptions);
+        case JavaDistribution.JetBrains:
+            return new installer_13.JetBrainsDistribution(installerOptions);
         default:
             return null;
     }
@@ -124494,6 +124498,231 @@ class GraalVMDistribution extends base_installer_1.JavaBase {
 exports.GraalVMDistribution = GraalVMDistribution;
 
 
+/***/ }),
+
+/***/ 12634:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.JetBrainsDistribution = void 0;
+const core = __importStar(__nccwpck_require__(42186));
+const tc = __importStar(__nccwpck_require__(27784));
+const fs_1 = __importDefault(__nccwpck_require__(57147));
+const path_1 = __importDefault(__nccwpck_require__(71017));
+const semver_1 = __importDefault(__nccwpck_require__(11383));
+const base_installer_1 = __nccwpck_require__(59741);
+const util_1 = __nccwpck_require__(92629);
+const http_client_1 = __nccwpck_require__(96255);
+class JetBrainsDistribution extends base_installer_1.JavaBase {
+    constructor(installerOptions) {
+        super('JetBrains', installerOptions);
+    }
+    findPackageForDownload(range) {
+        return __awaiter(this, void 0, void 0, function* () {
+            const versionsRaw = yield this.getAvailableVersions();
+            const versions = versionsRaw.map(v => {
+                const formattedVersion = `${v.semver}+${v.build}`;
+                return {
+                    version: formattedVersion,
+                    url: v.url
+                };
+            });
+            const satisfiedVersions = versions
+                .filter(item => (0, util_1.isVersionSatisfies)(range, item.version))
+                .sort((a, b) => {
+                return -semver_1.default.compareBuild(a.version, b.version);
+            });
+            const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null;
+            if (!resolvedFullVersion) {
+                const availableOptions = versionsRaw
+                    .map(item => `${item.tag_name} (${item.semver}+${item.build})`)
+                    .join(', ');
+                const availableOptionsMessage = availableOptions
+                    ? `\nAvailable versions: ${availableOptions}`
+                    : '';
+                throw new Error(`Could not find satisfied version for SemVer '${range}'. ${availableOptionsMessage}`);
+            }
+            return resolvedFullVersion;
+        });
+    }
+    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);
+            core.info(`Extracting Java archive...`);
+            const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, 'tar.gz');
+            const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0];
+            const archivePath = path_1.default.join(extractedJavaPath, archiveName);
+            const version = this.getToolcacheVersionName(javaRelease.version);
+            const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture);
+            return { version: javaRelease.version, path: javaPath };
+        });
+    }
+    getAvailableVersions() {
+        return __awaiter(this, void 0, void 0, function* () {
+            const platform = this.getPlatformOption();
+            const arch = this.distributionArchitecture();
+            if (core.isDebug()) {
+                console.time('Retrieving available versions for JBR took'); // eslint-disable-line no-console
+            }
+            // need to iterate through all pages to retrieve the list of all versions
+            // GitHub API doesn't provide way to retrieve the count of pages to iterate so infinity loop
+            let page_index = 1;
+            const rawVersions = [];
+            const bearerToken = process.env.GITHUB_TOKEN;
+            while (true) {
+                const requestArguments = `per_page=100&page=${page_index}`;
+                const requestHeaders = {};
+                if (bearerToken) {
+                    requestHeaders['Authorization'] = `Bearer ${bearerToken}`;
+                }
+                const rawUrl = `https://api.github.com/repos/JetBrains/JetBrainsRuntime/releases?${requestArguments}`;
+                if (core.isDebug() && page_index === 1) {
+                    // url is identical except page_index so print it once for debug
+                    core.debug(`Gathering available versions from '${rawUrl}'`);
+                }
+                const paginationPage = (yield this.http.getJson(rawUrl, requestHeaders)).result;
+                if (!paginationPage || paginationPage.length === 0) {
+                    // break infinity loop because we have reached end of pagination
+                    break;
+                }
+                rawVersions.push(...paginationPage);
+                page_index++;
+            }
+            // Add versions not available from the API but are downloadable
+            const hidden = ['11_0_10b1145.115', '11_0_11b1341.60'];
+            rawVersions.push(...hidden.map(tag => ({ tag_name: tag, name: tag })));
+            const versions0 = rawVersions.map((v) => __awaiter(this, void 0, void 0, function* () {
+                var _a;
+                // Release tags look like one of these:
+                // jbr-release-21.0.3b465.3
+                // jbr17-b87.7
+                // jb11_0_11-b87.7
+                // jbr11_0_15b2043.56
+                // 11_0_11b1536.2
+                // 11_0_11-b1522
+                const tag = v.tag_name;
+                // Extract version string
+                const vstring = tag
+                    .replace('jbr-release-', '')
+                    .replace('jbr', '')
+                    .replace('jb', '')
+                    .replace('-', '');
+                const vsplit = vstring.split('b');
+                let semver = vsplit[0];
+                const build = +vsplit[1];
+                // Normalize semver
+                if (!semver.includes('.') && !semver.includes('_'))
+                    semver = `${semver}.0.0`;
+                // Construct URL
+                let type;
+                switch ((_a = this.packageType) !== null && _a !== void 0 ? _a : '') {
+                    case 'jre':
+                        type = 'jbr';
+                        break;
+                    case 'jdk+jcef':
+                        type = 'jbrsdk_jcef';
+                        break;
+                    case 'jre+jcef':
+                        type = 'jbr_jcef';
+                        break;
+                    case 'jdk+ft':
+                        type = 'jbrsdk_ft';
+                        break;
+                    case 'jre+ft':
+                        type = 'jbr_ft';
+                        break;
+                    default:
+                        type = 'jbrsdk';
+                        break;
+                }
+                let url = `https://cache-redirector.jetbrains.com/intellij-jbr/${type}-${semver}-${platform}-${arch}-b${build}.tar.gz`;
+                let include = false;
+                const res = yield this.http.head(url);
+                if (res.message.statusCode === http_client_1.HttpCodes.OK) {
+                    include = true;
+                }
+                else {
+                    url = `https://cache-redirector.jetbrains.com/intellij-jbr/${type}_nomod-${semver}-${platform}-${arch}-b${build}.tar.gz`;
+                    const res2 = yield this.http.head(url);
+                    if (res2.message.statusCode === http_client_1.HttpCodes.OK) {
+                        include = true;
+                    }
+                }
+                const version = {
+                    tag_name: tag,
+                    semver: semver.replace(/_/g, '.'),
+                    build: build,
+                    url: url
+                };
+                return {
+                    item: version,
+                    include: include
+                };
+            }));
+            const versions = yield Promise.all(versions0).then(res => res.filter(item => item.include).map(item => item.item));
+            if (core.isDebug()) {
+                core.startGroup('Print information about available versions');
+                console.timeEnd('Retrieving available versions for JBR took'); // eslint-disable-line no-console
+                core.debug(`Available versions: [${versions.length}]`);
+                core.debug(versions.map(item => item.semver).join(', '));
+                core.endGroup();
+            }
+            return versions;
+        });
+    }
+    getPlatformOption() {
+        // Jetbrains has own platform names so need to map them
+        switch (process.platform) {
+            case 'darwin':
+                return 'osx';
+            case 'win32':
+                return 'windows';
+            default:
+                return process.platform;
+        }
+    }
+}
+exports.JetBrainsDistribution = JetBrainsDistribution;
+
+
 /***/ }),
 
 /***/ 40883:
diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md
index efc443b08..c868e653e 100644
--- a/docs/advanced-usage.md
+++ b/docs/advanced-usage.md
@@ -10,6 +10,7 @@
   - [Alibaba Dragonwell](#Alibaba-Dragonwell)
   - [SapMachine](#SapMachine)
   - [GraalVM](#GraalVM)
+  - [JetBrains](#JetBrains)
 - [Installing custom Java package type](#Installing-custom-Java-package-type)
 - [Installing custom Java architecture](#Installing-custom-Java-architecture)
 - [Installing custom Java distribution from local file](#Installing-Java-from-local-file)
@@ -171,6 +172,64 @@ steps:
     native-image -cp java HelloWorldApp
 ```
 
+### JetBrains
+
+**NOTE:** JetBrains is only available for LTS versions on 11 or later (11, 17, 21, etc.).
+
+Not all minor LTS versions are guarenteed to be available, since JetBrains considers what to ship IntelliJ IDEA with, most commonly on JDK 11.
+For example, `11.0.24` is not available but `11.0.16` is.
+
+```yaml
+steps:
+- uses: actions/checkout@v4
+- uses: actions/setup-java@v4
+  with:
+    distribution: 'jetbrains'
+    java-version: '11'
+- run: java -cp java HelloWorldApp
+```
+
+The JetBrains installer uses the GitHub API to fetch the latest version. If you believe your project is going to be running into rate limits, you can provide a
+GitHub token to the action to increase the rate limit. Set the `GITHUB_TOKEN` environment variable to the value of your GitHub token in the workflow file.
+
+```yaml
+steps:
+- uses: actions/checkout@v4
+- uses: actions/setup-java@v4
+  with:
+    distribution: 'jetbrains'
+    java-version: '17'
+    java-package: 'jdk' # optional (jdk, jre, jdk+jcef, jre+jcef, jdk+ft, or jre+ft) - defaults to jdk
+  env:
+    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+- run: java -cp java HelloWorldApp
+```
+
+You can specify your package type (as shown in the [releases page](https://github.com/JetBrains/JetBrainsRuntime/releases/)) in the `java-package` parameter. 
+The available package types are:
+
+- `jdk` - JBRSDK
+- `jre` - JBR (Vanilla)
+- `jdk+jcef` - JBRSDK with JCEF
+- `jre+jcef` - JBR with JCEF
+- `jdk+ft` - JBRSDK (FreeType)
+- `jre+ft` - JBR (FreeType)
+
+### GraalVM
+**NOTE:** Oracle GraalVM is only available for JDK 17 and later.
+
+```yaml
+steps:
+- uses: actions/checkout@v4
+- uses: actions/setup-java@v4
+  with:
+    distribution: 'graalvm'
+    java-version: '21'
+- run: |
+    java -cp java HelloWorldApp
+    native-image -cp java HelloWorldApp
+```
+
 ## Installing custom Java package type
 ```yaml
 steps:
@@ -183,7 +242,6 @@ steps:
 - run: java -cp java HelloWorldApp
 ```
 
-
 ## Installing custom Java architecture
 
 ```yaml
diff --git a/package-lock.json b/package-lock.json
index fd4dfc6cf..b3a3c931e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4327,6 +4327,7 @@
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
       "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "braces": "^3.0.3",
         "picomatch": "^2.3.1"
diff --git a/src/distributions/distribution-factory.ts b/src/distributions/distribution-factory.ts
index 563c9a890..9cd459e65 100644
--- a/src/distributions/distribution-factory.ts
+++ b/src/distributions/distribution-factory.ts
@@ -12,6 +12,7 @@ import {OracleDistribution} from './oracle/installer';
 import {DragonwellDistribution} from './dragonwell/installer';
 import {SapMachineDistribution} from './sapmachine/installer';
 import {GraalVMDistribution} from './graalvm/installer';
+import {JetBrainsDistribution} from './jetbrains/installer';
 
 enum JavaDistribution {
   Adopt = 'adopt',
@@ -27,7 +28,8 @@ enum JavaDistribution {
   Oracle = 'oracle',
   Dragonwell = 'dragonwell',
   SapMachine = 'sapmachine',
-  GraalVM = 'graalvm'
+  GraalVM = 'graalvm',
+  JetBrains = 'jetbrains'
 }
 
 export function getJavaDistribution(
@@ -72,6 +74,8 @@ export function getJavaDistribution(
       return new SapMachineDistribution(installerOptions);
     case JavaDistribution.GraalVM:
       return new GraalVMDistribution(installerOptions);
+    case JavaDistribution.JetBrains:
+      return new JetBrainsDistribution(installerOptions);
     default:
       return null;
   }
diff --git a/src/distributions/jetbrains/installer.ts b/src/distributions/jetbrains/installer.ts
new file mode 100644
index 000000000..ed0b49fe0
--- /dev/null
+++ b/src/distributions/jetbrains/installer.ts
@@ -0,0 +1,233 @@
+import * as core from '@actions/core';
+import * as tc from '@actions/tool-cache';
+
+import fs from 'fs';
+import path from 'path';
+import semver from 'semver';
+
+import {JavaBase} from '../base-installer';
+import {IJetBrainsRawVersion, IJetBrainsVersion} from './models';
+import {
+  JavaDownloadRelease,
+  JavaInstallerOptions,
+  JavaInstallerResults
+} from '../base-models';
+import {extractJdkFile, isVersionSatisfies} from '../../util';
+import {OutgoingHttpHeaders} from 'http';
+import {HttpCodes} from '@actions/http-client';
+
+export class JetBrainsDistribution extends JavaBase {
+  constructor(installerOptions: JavaInstallerOptions) {
+    super('JetBrains', installerOptions);
+  }
+
+  protected async findPackageForDownload(
+    range: string
+  ): Promise<JavaDownloadRelease> {
+    const versionsRaw = await this.getAvailableVersions();
+
+    const versions = versionsRaw.map(v => {
+      const formattedVersion = `${v.semver}+${v.build}`;
+
+      return {
+        version: formattedVersion,
+        url: v.url
+      } as JavaDownloadRelease;
+    });
+
+    const satisfiedVersions = versions
+      .filter(item => isVersionSatisfies(range, item.version))
+      .sort((a, b) => {
+        return -semver.compareBuild(a.version, b.version);
+      });
+
+    const resolvedFullVersion =
+      satisfiedVersions.length > 0 ? satisfiedVersions[0] : null;
+    if (!resolvedFullVersion) {
+      const availableOptions = versionsRaw
+        .map(item => `${item.tag_name} (${item.semver}+${item.build})`)
+        .join(', ');
+      const availableOptionsMessage = availableOptions
+        ? `\nAvailable versions: ${availableOptions}`
+        : '';
+      throw new Error(
+        `Could not find satisfied version for SemVer '${range}'. ${availableOptionsMessage}`
+      );
+    }
+
+    return resolvedFullVersion;
+  }
+
+  protected async downloadTool(
+    javaRelease: JavaDownloadRelease
+  ): Promise<JavaInstallerResults> {
+    core.info(
+      `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`
+    );
+
+    const javaArchivePath = await tc.downloadTool(javaRelease.url);
+
+    core.info(`Extracting Java archive...`);
+    const extractedJavaPath = await extractJdkFile(javaArchivePath, 'tar.gz');
+
+    const archiveName = fs.readdirSync(extractedJavaPath)[0];
+    const archivePath = path.join(extractedJavaPath, archiveName);
+    const version = this.getToolcacheVersionName(javaRelease.version);
+
+    const javaPath = await tc.cacheDir(
+      archivePath,
+      this.toolcacheFolderName,
+      version,
+      this.architecture
+    );
+
+    return {version: javaRelease.version, path: javaPath};
+  }
+
+  private async getAvailableVersions(): Promise<IJetBrainsVersion[]> {
+    const platform = this.getPlatformOption();
+    const arch = this.distributionArchitecture();
+
+    if (core.isDebug()) {
+      console.time('Retrieving available versions for JBR took'); // eslint-disable-line no-console
+    }
+
+    // need to iterate through all pages to retrieve the list of all versions
+    // GitHub API doesn't provide way to retrieve the count of pages to iterate so infinity loop
+    let page_index = 1;
+    const rawVersions: IJetBrainsRawVersion[] = [];
+    const bearerToken = process.env.GITHUB_TOKEN;
+
+    while (true) {
+      const requestArguments = `per_page=100&page=${page_index}`;
+      const requestHeaders: OutgoingHttpHeaders = {};
+
+      if (bearerToken) {
+        requestHeaders['Authorization'] = `Bearer ${bearerToken}`;
+      }
+
+      const rawUrl = `https://api.github.com/repos/JetBrains/JetBrainsRuntime/releases?${requestArguments}`;
+
+      if (core.isDebug() && page_index === 1) {
+        // url is identical except page_index so print it once for debug
+        core.debug(`Gathering available versions from '${rawUrl}'`);
+      }
+
+      const paginationPage = (
+        await this.http.getJson<IJetBrainsRawVersion[]>(rawUrl, requestHeaders)
+      ).result;
+      if (!paginationPage || paginationPage.length === 0) {
+        // break infinity loop because we have reached end of pagination
+        break;
+      }
+
+      rawVersions.push(...paginationPage);
+      page_index++;
+    }
+
+    // Add versions not available from the API but are downloadable
+    const hidden = ['11_0_10b1145.115', '11_0_11b1341.60'];
+    rawVersions.push(...hidden.map(tag => ({tag_name: tag, name: tag})));
+
+    const versions0 = rawVersions.map(async v => {
+      // Release tags look like one of these:
+      // jbr-release-21.0.3b465.3
+      // jbr17-b87.7
+      // jb11_0_11-b87.7
+      // jbr11_0_15b2043.56
+      // 11_0_11b1536.2
+      // 11_0_11-b1522
+      const tag = v.tag_name;
+
+      // Extract version string
+      const vstring = tag
+        .replace('jbr-release-', '')
+        .replace('jbr', '')
+        .replace('jb', '')
+        .replace('-', '');
+
+      const vsplit = vstring.split('b');
+      let semver = vsplit[0];
+      const build = +vsplit[1];
+
+      // Normalize semver
+      if (!semver.includes('.') && !semver.includes('_'))
+        semver = `${semver}.0.0`;
+
+      // Construct URL
+      let type: string;
+      switch (this.packageType ?? '') {
+        case 'jre':
+          type = 'jbr';
+          break;
+        case 'jdk+jcef':
+          type = 'jbrsdk_jcef';
+          break;
+        case 'jre+jcef':
+          type = 'jbr_jcef';
+          break;
+        case 'jdk+ft':
+          type = 'jbrsdk_ft';
+          break;
+        case 'jre+ft':
+          type = 'jbr_ft';
+          break;
+        default:
+          type = 'jbrsdk';
+          break;
+      }
+
+      let url = `https://cache-redirector.jetbrains.com/intellij-jbr/${type}-${semver}-${platform}-${arch}-b${build}.tar.gz`;
+      let include = false;
+
+      const res = await this.http.head(url);
+      if (res.message.statusCode === HttpCodes.OK) {
+        include = true;
+      } else {
+        url = `https://cache-redirector.jetbrains.com/intellij-jbr/${type}_nomod-${semver}-${platform}-${arch}-b${build}.tar.gz`;
+        const res2 = await this.http.head(url);
+        if (res2.message.statusCode === HttpCodes.OK) {
+          include = true;
+        }
+      }
+
+      const version = {
+        tag_name: tag,
+        semver: semver.replace(/_/g, '.'),
+        build: build,
+        url: url
+      } as IJetBrainsVersion;
+
+      return {
+        item: version,
+        include: include
+      };
+    });
+
+    const versions = await Promise.all(versions0).then(res =>
+      res.filter(item => item.include).map(item => item.item)
+    );
+
+    if (core.isDebug()) {
+      core.startGroup('Print information about available versions');
+      console.timeEnd('Retrieving available versions for JBR took'); // eslint-disable-line no-console
+      core.debug(`Available versions: [${versions.length}]`);
+      core.debug(versions.map(item => item.semver).join(', '));
+      core.endGroup();
+    }
+
+    return versions;
+  }
+
+  private getPlatformOption(): string {
+    // Jetbrains has own platform names so need to map them
+    switch (process.platform) {
+      case 'darwin':
+        return 'osx';
+      case 'win32':
+        return 'windows';
+      default:
+        return process.platform;
+    }
+  }
+}
diff --git a/src/distributions/jetbrains/models.ts b/src/distributions/jetbrains/models.ts
new file mode 100644
index 000000000..7daaea06f
--- /dev/null
+++ b/src/distributions/jetbrains/models.ts
@@ -0,0 +1,13 @@
+// Raw Model from https://api.github.com/repos/JetBrains/JetBrainsRuntime/releases
+
+export interface IJetBrainsRawVersion {
+  tag_name: string;
+  name: string;
+}
+
+export interface IJetBrainsVersion {
+  tag_name: string;
+  semver: string;
+  build: number;
+  url: string;
+}