Compare commits

..

No commits in common. "7e3fee94eb366cdba625d610b8ea4cf0667fd2ea" and "4776457db037fe3a1c0e28f888b335c1c7dac967" have entirely different histories.

6 changed files with 234 additions and 1024 deletions

View File

@ -71,11 +71,11 @@ jobs:
with: with:
java-version: ${{ matrix.version }} java-version: ${{ matrix.version }}
distribution: ${{ matrix.distribution }} distribution: ${{ matrix.distribution }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Verify Java - name: Verify Java
run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}" run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
shell: bash shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
setup-java-major-minor-versions: setup-java-major-minor-versions:
name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }} name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
@ -283,8 +283,7 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
os: [macos-13, windows-latest, ubuntu-latest] os: [macos-13, windows-latest, ubuntu-latest]
distribution: distribution: ['temurin', 'zulu', 'liberica', 'semeru', 'sapmachine']
['temurin', 'zulu', 'liberica', 'semeru', 'sapmachine', 'jetbrains']
java-package: ['jre'] java-package: ['jre']
version: ['17.0'] version: ['17.0']
include: include:
@ -308,55 +307,6 @@ jobs:
java-package: jre java-package: jre
version: '8' version: '8'
os: windows-latest 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: '11'
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: '11'
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: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,6 @@ import {HttpClient} from '@actions/http-client';
import {JetBrainsDistribution} from '../../src/distributions/jetbrains/installer'; import {JetBrainsDistribution} from '../../src/distributions/jetbrains/installer';
import manifestData from '../data/jetbrains.json'; import manifestData from '../data/jetbrains.json';
import {fstat, writeFileSync} from 'fs';
describe('getAvailableVersions', () => { describe('getAvailableVersions', () => {
let spyHttpClient: jest.SpyInstance; let spyHttpClient: jest.SpyInstance;
@ -51,7 +50,7 @@ describe('getAvailableVersions', () => {
const availableVersions = await distribution['getAvailableVersions'](); const availableVersions = await distribution['getAvailableVersions']();
expect(availableVersions).not.toBeNull(); expect(availableVersions).not.toBeNull();
expect(availableVersions.length).toBe(manifestData.length * 2); expect(availableVersions.length).toBe(manifestData.length * 2);
}, 10_000); });
}); });
describe('findPackageForDownload', () => { describe('findPackageForDownload', () => {

74
dist/setup/index.js vendored
View File

@ -124535,7 +124535,6 @@ const path_1 = __importDefault(__nccwpck_require__(71017));
const semver_1 = __importDefault(__nccwpck_require__(11383)); const semver_1 = __importDefault(__nccwpck_require__(11383));
const base_installer_1 = __nccwpck_require__(59741); const base_installer_1 = __nccwpck_require__(59741);
const util_1 = __nccwpck_require__(92629); const util_1 = __nccwpck_require__(92629);
const http_client_1 = __nccwpck_require__(96255);
class JetBrainsDistribution extends base_installer_1.JavaBase { class JetBrainsDistribution extends base_installer_1.JavaBase {
constructor(installerOptions) { constructor(installerOptions) {
super('JetBrains', installerOptions); super('JetBrains', installerOptions);
@ -124558,7 +124557,7 @@ class JetBrainsDistribution extends base_installer_1.JavaBase {
const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null;
if (!resolvedFullVersion) { if (!resolvedFullVersion) {
const availableOptions = versionsRaw const availableOptions = versionsRaw
.map(item => `${item.tag_name} (${item.semver}+${item.build})`) .map(item => item.tag_name)
.join(', '); .join(', ');
const availableOptionsMessage = availableOptions const availableOptionsMessage = availableOptions
? `\nAvailable versions: ${availableOptions}` ? `\nAvailable versions: ${availableOptions}`
@ -124611,75 +124610,44 @@ class JetBrainsDistribution extends base_installer_1.JavaBase {
rawVersions.push(...paginationPage); rawVersions.push(...paginationPage);
page_index++; page_index++;
} }
const versions0 = rawVersions.map((v) => __awaiter(this, void 0, void 0, function* () { const versions0 = rawVersions.map(v => {
var _a; var _a;
// Release tags look like one of these: // Release tags look like one of these:
// jbr-release-21.0.3b465.3 // jbr-release-21.0.3b465.3
// jbr17-b87.7
// jb11_0_11-b87.7 // jb11_0_11-b87.7
// jbr11_0_15b2043.56 // jbr11_0_15b2043.56
// 11_0_11b1536.2
// 11_0_11-b1522
const tag = v.tag_name; const tag = v.tag_name;
// Extract version string // Extract version string
const vstring = tag let vstring;
.replace('jbr-release-', '') switch ((_a = tag.match(/-/g)) === null || _a === void 0 ? void 0 : _a.length) {
.replace('jbr', '') case 2:
.replace('jb', '') vstring = tag.substring(tag.lastIndexOf('-') + 1);
.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; break;
case 'jdk+jcef': case 1:
type = 'jbrsdk_jcef'; vstring = tag.substring(2).replace(/-/g, '');
break; break;
case 'jre+jcef': case undefined: // 0
type = 'jbr_jcef'; vstring = tag.substring(3);
break;
case 'jdk+ft':
type = 'jbrsdk_ft';
break;
case 'jre+ft':
type = 'jbr_ft';
break; break;
default: default:
type = 'jbrsdk'; throw new Error(`Unrecognized tag_name: ${tag}`);
break;
} }
let url = `https://cache-redirector.jetbrains.com/intellij-jbr/${type}-${semver}-${platform}-${arch}-b${build}.tar.gz`; const vsplit = vstring.split('b');
let include = false; const semver = vsplit[0];
const res = yield this.http.head(url); const build = +vsplit[1];
if (res.message.statusCode === http_client_1.HttpCodes.OK) { // Construct URL
include = true; const url = `https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-${semver}-${platform}-${arch}-b${build}.tar.gz`;
} return {
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, tag_name: tag,
semver: semver.replace(/_/g, '.'), semver: semver.replace(/_/g, '.'),
build: build, build: build,
url: url url: url
}; };
return { });
item: version, const versions = versions0.filter((i) => __awaiter(this, void 0, void 0, function* () {
include: include const res = yield this.http.head(i.url);
}; return res.message.statusCode === 200;
})); }));
const versions = yield Promise.all(versions0).then(res => res.filter(item => item.include).map(item => item.item));
if (core.isDebug()) { if (core.isDebug()) {
core.startGroup('Print information about available versions'); core.startGroup('Print information about available versions');
console.timeEnd('Retrieving available versions for JBR took'); // eslint-disable-line no-console console.timeEnd('Retrieving available versions for JBR took'); // eslint-disable-line no-console

View File

@ -173,8 +173,7 @@ steps:
``` ```
### JetBrains ### JetBrains
**NOTE:** JetBrains only provides jdk and is only available for LTS versions 11 or later. JCEF is not bundled with this distribution.
**NOTE:** JetBrains is only available for LTS versions on 11 or later.
```yaml ```yaml
steps: steps:
@ -195,22 +194,12 @@ steps:
- uses: actions/setup-java@v4 - uses: actions/setup-java@v4
with: with:
distribution: 'jetbrains' distribution: 'jetbrains'
java-version: '17' java-version: '11'
package-type: 'jdk' # optional (jdk, jre, jdk+jcef, jre+jcef, jdk+ft, or jre+ft) - defaults to jdk
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: java -cp java HelloWorldApp - run: java -cp java HelloWorldApp
``` ```
JetBrains Package Types (as shown in the [releases page](https://github.com/JetBrains/JetBrainsRuntime/releases/)):
- `jdk` - JBRSDK
- `jre` - JBR (Vanilla)
- `jdk+jcef` - JBRSDK with JCEF
- `jre+jcef` - JBR with JCEF
- `jdk+ft` - JBRSDK (FreeType)
- `jre+ft` - JBR (FreeType)
### GraalVM ### GraalVM
**NOTE:** Oracle GraalVM is only available for JDK 17 and later. **NOTE:** Oracle GraalVM is only available for JDK 17 and later.

View File

@ -14,7 +14,6 @@ import {
} from '../base-models'; } from '../base-models';
import {extractJdkFile, isVersionSatisfies} from '../../util'; import {extractJdkFile, isVersionSatisfies} from '../../util';
import {OutgoingHttpHeaders} from 'http'; import {OutgoingHttpHeaders} from 'http';
import {HttpCodes} from '@actions/http-client';
export class JetBrainsDistribution extends JavaBase { export class JetBrainsDistribution extends JavaBase {
constructor(installerOptions: JavaInstallerOptions) { constructor(installerOptions: JavaInstallerOptions) {
@ -45,7 +44,7 @@ export class JetBrainsDistribution extends JavaBase {
satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; satisfiedVersions.length > 0 ? satisfiedVersions[0] : null;
if (!resolvedFullVersion) { if (!resolvedFullVersion) {
const availableOptions = versionsRaw const availableOptions = versionsRaw
.map(item => `${item.tag_name} (${item.semver}+${item.build})`) .map(item => item.tag_name)
.join(', '); .join(', ');
const availableOptionsMessage = availableOptions const availableOptionsMessage = availableOptions
? `\nAvailable versions: ${availableOptions}` ? `\nAvailable versions: ${availableOptions}`
@ -123,84 +122,49 @@ export class JetBrainsDistribution extends JavaBase {
page_index++; page_index++;
} }
const versions0 = rawVersions.map(async v => { const versions0 = rawVersions.map(v => {
// Release tags look like one of these: // Release tags look like one of these:
// jbr-release-21.0.3b465.3 // jbr-release-21.0.3b465.3
// jbr17-b87.7
// jb11_0_11-b87.7 // jb11_0_11-b87.7
// jbr11_0_15b2043.56 // jbr11_0_15b2043.56
// 11_0_11b1536.2
// 11_0_11-b1522
const tag = v.tag_name; const tag = v.tag_name;
// Extract version string // Extract version string
const vstring = tag let vstring;
.replace('jbr-release-', '')
.replace('jbr', '')
.replace('jb', '')
.replace('-', '');
const vsplit = vstring.split('b'); switch (tag.match(/-/g)?.length) {
let semver = vsplit[0]; case 2:
const build = +vsplit[1]; vstring = tag.substring(tag.lastIndexOf('-') + 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; break;
case 'jdk+jcef': case 1:
type = 'jbrsdk_jcef'; vstring = tag.substring(2).replace(/-/g, '');
break; break;
case 'jre+jcef': case undefined: // 0
type = 'jbr_jcef'; vstring = tag.substring(3);
break;
case 'jdk+ft':
type = 'jbrsdk_ft';
break;
case 'jre+ft':
type = 'jbr_ft';
break; break;
default: default:
type = 'jbrsdk'; throw new Error(`Unrecognized tag_name: ${tag}`);
break;
} }
let url = `https://cache-redirector.jetbrains.com/intellij-jbr/${type}-${semver}-${platform}-${arch}-b${build}.tar.gz`; const vsplit = vstring.split('b');
let include = false; const semver = vsplit[0];
const build = +vsplit[1];
const res = await this.http.head(url); // Construct URL
if (res.message.statusCode === HttpCodes.OK) { const url = `https://cache-redirector.jetbrains.com/intellij-jbr/jbrsdk-${semver}-${platform}-${arch}-b${build}.tar.gz`;
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 = { return {
tag_name: tag, tag_name: tag,
semver: semver.replace(/_/g, '.'), semver: semver.replace(/_/g, '.'),
build: build, build: build,
url: url url: url
} as IJetBrainsVersion; } as IJetBrainsVersion;
return {
item: version,
include: include
};
}); });
const versions = await Promise.all(versions0).then(res => const versions = versions0.filter(async i => {
res.filter(item => item.include).map(item => item.item) const res = await this.http.head(i.url);
); return res.message.statusCode === 200;
});
if (core.isDebug()) { if (core.isDebug()) {
core.startGroup('Print information about available versions'); core.startGroup('Print information about available versions');