Compare commits

..

68 Commits

Author SHA1 Message Date
Fabio Niephaus
7f488cf82a Bump version to 1.3.5. 2025-07-23 10:14:35 +02:00
Fabio Niephaus
372a8049d7 Use @actions/github instead of @octokit/core. 2025-07-23 10:08:20 +02:00
Fabio Niephaus
356b5a68f4 Avoid a warning during testing. 2025-07-23 10:08:20 +02:00
Fabio Niephaus
6d95698f76 Upgrade packages. 2025-07-23 10:08:20 +02:00
Fabio Niephaus
c7293b6abd Ensure tests run with token. 2025-07-23 10:08:20 +02:00
dependabot[bot]
a13b7392fb Bump form-data from 2.5.3 to 2.5.5
Bumps [form-data](https://github.com/form-data/form-data) from 2.5.3 to 2.5.5.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/v2.5.5/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v2.5.3...v2.5.5)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 2.5.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-23 10:08:20 +02:00
dependabot[bot]
7de2d094ec Bump eslint-plugin-jest from 28.12.0 to 29.0.1
---
updated-dependencies:
- dependency-name: eslint-plugin-jest
  dependency-version: 29.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-01 23:33:15 +02:00
dependabot[bot]
d7feb9d031 Bump the npm-development group with 10 updates
Bumps the npm-development group with 10 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/compat](https://github.com/eslint/rewrite/tree/HEAD/packages/compat) | `1.2.9` | `1.3.1` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.17.57` | `20.19.4` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.33.0` | `8.35.1` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.33.0` | `8.35.1` |
| [eslint](https://github.com/eslint/eslint) | `9.28.0` | `9.30.1` |
| [eslint-import-resolver-typescript](https://github.com/import-js/eslint-import-resolver-typescript) | `4.4.2` | `4.4.4` |
| [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | `2.31.0` | `2.32.0` |
| [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) | `5.4.1` | `5.5.1` |
| [prettier](https://github.com/prettier/prettier) | `3.5.3` | `3.6.2` |
| [ts-jest](https://github.com/kulshekhar/ts-jest) | `29.3.4` | `29.4.0` |


Updates `@eslint/compat` from 1.2.9 to 1.3.1
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/packages/compat/CHANGELOG.md)
- [Commits](https://github.com/eslint/rewrite/commits/compat-v1.3.1/packages/compat)

Updates `@types/node` from 20.17.57 to 20.19.4
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@typescript-eslint/eslint-plugin` from 8.33.0 to 8.35.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.35.1/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.33.0 to 8.35.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.35.1/packages/parser)

Updates `eslint` from 9.28.0 to 9.30.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.28.0...v9.30.1)

Updates `eslint-import-resolver-typescript` from 4.4.2 to 4.4.4
- [Release notes](https://github.com/import-js/eslint-import-resolver-typescript/releases)
- [Changelog](https://github.com/import-js/eslint-import-resolver-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-import-resolver-typescript/compare/v4.4.2...v4.4.4)

Updates `eslint-plugin-import` from 2.31.0 to 2.32.0
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.31.0...v2.32.0)

Updates `eslint-plugin-prettier` from 5.4.1 to 5.5.1
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.4.1...v5.5.1)

Updates `prettier` from 3.5.3 to 3.6.2
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.3...3.6.2)

Updates `ts-jest` from 29.3.4 to 29.4.0
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.3.4...v29.4.0)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-version: 1.3.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@types/node"
  dependency-version: 20.19.4
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.35.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.35.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint
  dependency-version: 9.30.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-import-resolver-typescript
  dependency-version: 4.4.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: eslint-plugin-import
  dependency-version: 2.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: prettier
  dependency-version: 3.6.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: ts-jest
  dependency-version: 29.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-01 23:22:15 +02:00
Fabio Niephaus
63e0340562 Revise README.md. (#169)
Co-authored-by: Olga Gupalo <olga.gupalo@oracle.com>
2025-06-26 08:46:11 +02:00
Fabio Niephaus
8ea6c1f538 Update dependencies 2025-06-24 17:44:38 +02:00
Fabio Niephaus
01ed3ea8d4 Update dist files. 2025-06-24 16:58:58 +02:00
dependabot[bot]
e46a5025da Bump the npm-production group with 2 updates
Bumps the npm-production group with 2 updates: [@actions/github](https://github.com/actions/toolkit/tree/HEAD/packages/github) and [semver](https://github.com/npm/node-semver).


Updates `@actions/github` from 6.0.0 to 6.0.1
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/github/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/github)

Updates `semver` from 7.7.1 to 7.7.2
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.7.1...v7.7.2)

---
updated-dependencies:
- dependency-name: "@actions/github"
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-production
- dependency-name: semver
  dependency-version: 7.7.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-24 16:58:58 +02:00
dependabot[bot]
4daf9d25d0 Bump undici from 5.28.5 to 5.29.0
Bumps [undici](https://github.com/nodejs/undici) from 5.28.5 to 5.29.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.28.5...v5.29.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 5.29.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-24 16:58:58 +02:00
Fabio Niephaus
6249097607 Update java-version in README.md.
Fixes #166
2025-06-24 16:45:27 +02:00
Fabio Niephaus
99513f43da Update dist files. 2025-06-24 16:45:27 +02:00
dependabot[bot]
70cc29044a Bump the npm-development group with 11 updates
Bumps the npm-development group with 11 updates:

| Package | From | To |
| --- | --- | --- |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.17.32` | `20.17.57` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.31.1` | `8.33.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.31.1` | `8.33.0` |
| [eslint](https://github.com/eslint/eslint) | `9.25.1` | `9.28.0` |
| [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) | `10.1.2` | `10.1.5` |
| [eslint-import-resolver-typescript](https://github.com/import-js/eslint-import-resolver-typescript) | `4.3.4` | `4.4.2` |
| [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) | `28.11.0` | `28.12.0` |
| [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc) | `2.20.0` | `2.20.1` |
| [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) | `5.2.6` | `5.4.1` |
| [prettier-eslint](https://github.com/prettier/prettier-eslint) | `16.4.1` | `16.4.2` |
| [ts-jest](https://github.com/kulshekhar/ts-jest) | `29.3.2` | `29.3.4` |


Updates `@types/node` from 20.17.32 to 20.17.57
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@typescript-eslint/eslint-plugin` from 8.31.1 to 8.33.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.33.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.31.1 to 8.33.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.33.0/packages/parser)

Updates `eslint` from 9.25.1 to 9.28.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.25.1...v9.28.0)

Updates `eslint-config-prettier` from 10.1.2 to 10.1.5
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.2...v10.1.5)

Updates `eslint-import-resolver-typescript` from 4.3.4 to 4.4.2
- [Release notes](https://github.com/import-js/eslint-import-resolver-typescript/releases)
- [Changelog](https://github.com/import-js/eslint-import-resolver-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-import-resolver-typescript/compare/v4.3.4...v4.4.2)

Updates `eslint-plugin-jest` from 28.11.0 to 28.12.0
- [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases)
- [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v28.11.0...v28.12.0)

Updates `eslint-plugin-jsonc` from 2.20.0 to 2.20.1
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.20.0...v2.20.1)

Updates `eslint-plugin-prettier` from 5.2.6 to 5.4.1
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.6...v5.4.1)

Updates `prettier-eslint` from 16.4.1 to 16.4.2
- [Release notes](https://github.com/prettier/prettier-eslint/releases)
- [Changelog](https://github.com/prettier/prettier-eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier-eslint/compare/v16.4.1...v16.4.2)

Updates `ts-jest` from 29.3.2 to 29.3.4
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.3.2...v29.3.4)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 20.17.57
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.33.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.33.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint
  dependency-version: 9.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: eslint-import-resolver-typescript
  dependency-version: 4.4.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-plugin-jest
  dependency-version: 28.12.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-plugin-jsonc
  dependency-version: 2.20.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.4.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: prettier-eslint
  dependency-version: 16.4.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: ts-jest
  dependency-version: 29.3.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-24 16:45:27 +02:00
dependabot[bot]
547a84f872 Bump @octokit/types from 14.0.0 to 14.1.0
Bumps [@octokit/types](https://github.com/octokit/types.ts) from 14.0.0 to 14.1.0.
- [Release notes](https://github.com/octokit/types.ts/releases)
- [Commits](https://github.com/octokit/types.ts/compare/v14.0.0...v14.1.0)

---
updated-dependencies:
- dependency-name: "@octokit/types"
  dependency-version: 14.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 10:17:37 +02:00
dependabot[bot]
21af6a0ef7 Bump @octokit/types from 13.10.0 to 14.0.0
Bumps [@octokit/types](https://github.com/octokit/types.ts) from 13.10.0 to 14.0.0.
- [Release notes](https://github.com/octokit/types.ts/releases)
- [Commits](https://github.com/octokit/types.ts/compare/v13.10.0...v14.0.0)

---
updated-dependencies:
- dependency-name: "@octokit/types"
  dependency-version: 14.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 11:25:31 +02:00
dependabot[bot]
1086d2a1b4 Bump the npm-development group with 11 updates
Bumps the npm-development group with 11 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/compat](https://github.com/eslint/rewrite) | `1.2.8` | `1.2.9` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.17.30` | `20.17.32` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.29.0` | `8.31.1` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.29.0` | `8.31.1` |
| [eslint](https://github.com/eslint/eslint) | `9.23.0` | `9.25.1` |
| [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) | `10.1.1` | `10.1.2` |
| [eslint-import-resolver-typescript](https://github.com/import-js/eslint-import-resolver-typescript) | `4.3.1` | `4.3.4` |
| [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) | `5.2.5` | `5.2.6` |
| [prettier-eslint](https://github.com/prettier/prettier-eslint) | `16.3.0` | `16.4.1` |
| [ts-jest](https://github.com/kulshekhar/ts-jest) | `29.3.1` | `29.3.2` |
| [typescript](https://github.com/microsoft/TypeScript) | `5.8.2` | `5.8.3` |


Updates `@eslint/compat` from 1.2.8 to 1.2.9
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.8...compat-v1.2.9)

Updates `@types/node` from 20.17.30 to 20.17.32
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@typescript-eslint/eslint-plugin` from 8.29.0 to 8.31.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.31.1/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.29.0 to 8.31.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.31.1/packages/parser)

Updates `eslint` from 9.23.0 to 9.25.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.23.0...v9.25.1)

Updates `eslint-config-prettier` from 10.1.1 to 10.1.2
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.1...v10.1.2)

Updates `eslint-import-resolver-typescript` from 4.3.1 to 4.3.4
- [Release notes](https://github.com/import-js/eslint-import-resolver-typescript/releases)
- [Changelog](https://github.com/import-js/eslint-import-resolver-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-import-resolver-typescript/compare/v4.3.1...v4.3.4)

Updates `eslint-plugin-prettier` from 5.2.5 to 5.2.6
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.5...v5.2.6)

Updates `prettier-eslint` from 16.3.0 to 16.4.1
- [Release notes](https://github.com/prettier/prettier-eslint/releases)
- [Changelog](https://github.com/prettier/prettier-eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier-eslint/compare/v16.3.0...v16.4.1)

Updates `ts-jest` from 29.3.1 to 29.3.2
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.3.1...v29.3.2)

Updates `typescript` from 5.8.2 to 5.8.3
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.2...v5.8.3)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-version: 1.2.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@types/node"
  dependency-version: 20.17.32
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.31.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.31.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint
  dependency-version: 9.25.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: eslint-import-resolver-typescript
  dependency-version: 4.3.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.2.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: prettier-eslint
  dependency-version: 16.4.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: ts-jest
  dependency-version: 29.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: typescript
  dependency-version: 5.8.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 11:24:18 +02:00
dependabot[bot]
7f61f4917e Bump eslint-import-resolver-typescript from 3.8.3 to 4.3.1
Bumps [eslint-import-resolver-typescript](https://github.com/import-js/eslint-import-resolver-typescript) from 3.8.3 to 4.3.1.
- [Release notes](https://github.com/import-js/eslint-import-resolver-typescript/releases)
- [Changelog](https://github.com/import-js/eslint-import-resolver-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-import-resolver-typescript/compare/v3.8.3...v4.3.1)

---
updated-dependencies:
- dependency-name: eslint-import-resolver-typescript
  dependency-version: 4.3.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-02 08:57:39 +02:00
dependabot[bot]
f3662e4b72 Bump @octokit/types from 13.8.0 to 13.10.0
Bumps [@octokit/types](https://github.com/octokit/types.ts) from 13.8.0 to 13.10.0.
- [Release notes](https://github.com/octokit/types.ts/releases)
- [Commits](https://github.com/octokit/types.ts/compare/v13.8.0...v13.10.0)

---
updated-dependencies:
- dependency-name: "@octokit/types"
  dependency-version: 13.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-02 08:57:39 +02:00
Fabio Niephaus
b19c2851fd Update dist files. 2025-04-02 08:57:39 +02:00
dependabot[bot]
0027121302 Bump the npm-production group with 2 updates
Bumps the npm-production group with 2 updates: [@actions/cache](https://github.com/actions/toolkit/tree/HEAD/packages/cache) and [@github/dependency-submission-toolkit](https://github.com/github/dependency-submission-toolkit).


Updates `@actions/cache` from 4.0.2 to 4.0.3
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/cache/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/cache)

Updates `@github/dependency-submission-toolkit` from 2.0.4 to 2.0.5
- [Release notes](https://github.com/github/dependency-submission-toolkit/releases)
- [Commits](https://github.com/github/dependency-submission-toolkit/compare/v2.0.4...v2.0.5)

---
updated-dependencies:
- dependency-name: "@actions/cache"
  dependency-version: 4.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-production
- dependency-name: "@github/dependency-submission-toolkit"
  dependency-version: 2.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-02 08:57:39 +02:00
Fabio Niephaus
0568ccefb6 Upgrade from ubuntu-20.04 to ubuntu-22.04.
Context: https://github.com/actions/runner-images/issues/11101
2025-04-02 08:50:21 +02:00
dependabot[bot]
a4c8415508 Bump the npm-development group with 11 updates
Bumps the npm-development group with 11 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/compat](https://github.com/eslint/rewrite) | `1.2.7` | `1.2.8` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.17.22` | `20.17.30` |
| [@types/semver](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/semver) | `7.5.8` | `7.7.0` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.25.0` | `8.29.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.25.0` | `8.29.0` |
| [eslint](https://github.com/eslint/eslint) | `9.21.0` | `9.23.0` |
| [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) | `10.0.2` | `10.1.1` |
| [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc) | `2.19.1` | `2.20.0` |
| [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) | `5.2.3` | `5.2.5` |
| [ts-jest](https://github.com/kulshekhar/ts-jest) | `29.2.6` | `29.3.1` |
| [typescript](https://github.com/microsoft/TypeScript) | `5.7.3` | `5.8.2` |


Updates `@eslint/compat` from 1.2.7 to 1.2.8
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.7...compat-v1.2.8)

Updates `@types/node` from 20.17.22 to 20.17.30
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/semver` from 7.5.8 to 7.7.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/semver)

Updates `@typescript-eslint/eslint-plugin` from 8.25.0 to 8.29.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.29.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.25.0 to 8.29.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.29.0/packages/parser)

Updates `eslint` from 9.21.0 to 9.23.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.21.0...v9.23.0)

Updates `eslint-config-prettier` from 10.0.2 to 10.1.1
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.0.2...v10.1.1)

Updates `eslint-plugin-jsonc` from 2.19.1 to 2.20.0
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.19.1...v2.20.0)

Updates `eslint-plugin-prettier` from 5.2.3 to 5.2.5
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.3...v5.2.5)

Updates `ts-jest` from 29.2.6 to 29.3.1
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.2.6...v29.3.1)

Updates `typescript` from 5.7.3 to 5.8.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.3...v5.8.2)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-version: 1.2.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@types/node"
  dependency-version: 20.17.30
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@types/semver"
  dependency-version: 7.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint
  dependency-version: 9.23.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-plugin-jsonc
  dependency-version: 2.20.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.2.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: ts-jest
  dependency-version: 29.3.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: typescript
  dependency-version: 5.8.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-02 08:50:21 +02:00
Fabio Niephaus
aef1f09405 Test against GraalVM for JDK 24 and 25 EA builds. 2025-03-18 17:03:35 +01:00
Alina Yurenko
26a86e7135 add about arm runners 2025-03-04 14:57:10 +01:00
Fabio Niephaus
01ed653ac8 Bump version to 1.3.3. 2025-03-03 14:23:11 +01:00
Joel Rudsberg
3ca6fc3a8a SBOM: Ensure 'java-version' is persisted to post-run phase 2025-03-03 12:56:54 +01:00
Fabio Niephaus
271a696e78 Bump version to 1.3.2. 2025-03-03 10:22:04 +01:00
Fabio Niephaus
2063b36b79 Update dist files. 2025-03-03 09:12:04 +01:00
Fabio Niephaus
44d0c2f19b Downgrade typescript back to 5.7.3.
eslint-plugin is not yet compatible with version `5.8.2` of typescript.
2025-03-03 09:12:04 +01:00
dependabot[bot]
26e3dc36fc Bump the npm-development group across 1 directory with 10 updates
Bumps the npm-development group with 10 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@eslint/compat](https://github.com/eslint/rewrite) | `1.2.6` | `1.2.7` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.17.17` | `20.17.22` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.24.0` | `8.25.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.24.0` | `8.25.0` |
| [eslint](https://github.com/eslint/eslint) | `9.20.1` | `9.21.0` |
| [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) | `10.0.1` | `10.0.2` |
| [eslint-import-resolver-typescript](https://github.com/import-js/eslint-import-resolver-typescript) | `3.7.0` | `3.8.3` |
| [prettier](https://github.com/prettier/prettier) | `3.5.0` | `3.5.3` |
| [ts-jest](https://github.com/kulshekhar/ts-jest) | `29.2.5` | `29.2.6` |
| [typescript](https://github.com/microsoft/TypeScript) | `5.7.3` | `5.8.2` |



Updates `@eslint/compat` from 1.2.6 to 1.2.7
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.6...compat-v1.2.7)

Updates `@types/node` from 20.17.17 to 20.17.22
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@typescript-eslint/eslint-plugin` from 8.24.0 to 8.25.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.25.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.24.0 to 8.25.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.25.0/packages/parser)

Updates `eslint` from 9.20.1 to 9.21.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.20.1...v9.21.0)

Updates `eslint-config-prettier` from 10.0.1 to 10.0.2
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.0.1...v10.0.2)

Updates `eslint-import-resolver-typescript` from 3.7.0 to 3.8.3
- [Release notes](https://github.com/import-js/eslint-import-resolver-typescript/releases)
- [Changelog](https://github.com/import-js/eslint-import-resolver-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-import-resolver-typescript/compare/v3.7.0...v3.8.3)

Updates `prettier` from 3.5.0 to 3.5.3
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.0...3.5.3)

Updates `ts-jest` from 29.2.5 to 29.2.6
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.2.5...v29.2.6)

Updates `typescript` from 5.7.3 to 5.8.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.3...v5.8.2)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: eslint-import-resolver-typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: ts-jest
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 09:12:04 +01:00
Fabio Niephaus
e6854f2a7c Update dist files. 2025-03-03 09:06:06 +01:00
dependabot[bot]
a1c06b5535 Bump @octokit/plugin-paginate-rest from 9.2.1 to 9.2.2
Bumps [@octokit/plugin-paginate-rest](https://github.com/octokit/plugin-paginate-rest.js) from 9.2.1 to 9.2.2.
- [Release notes](https://github.com/octokit/plugin-paginate-rest.js/releases)
- [Commits](https://github.com/octokit/plugin-paginate-rest.js/compare/v9.2.1...v9.2.2)

---
updated-dependencies:
- dependency-name: "@octokit/plugin-paginate-rest"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 09:06:06 +01:00
Fabio Niephaus
e4bdac3847 Update dist files. 2025-03-03 08:52:38 +01:00
dependabot[bot]
00f0f13934 Bump uuid from 11.0.5 to 11.1.0
Bumps [uuid](https://github.com/uuidjs/uuid) from 11.0.5 to 11.1.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v11.0.5...v11.1.0)

---
updated-dependencies:
- dependency-name: uuid
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 08:52:38 +01:00
dependabot[bot]
63ca6fe724 Bump @actions/cache from 4.0.0 to 4.0.2 in the npm-production group
Bumps the npm-production group with 1 update: [@actions/cache](https://github.com/actions/toolkit/tree/HEAD/packages/cache).


Updates `@actions/cache` from 4.0.0 to 4.0.2
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/cache/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/cache)

---
updated-dependencies:
- dependency-name: "@actions/cache"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 08:52:38 +01:00
dependabot[bot]
5b85983c0a Bump @octokit/request from 8.4.0 to 8.4.1
Bumps [@octokit/request](https://github.com/octokit/request.js) from 8.4.0 to 8.4.1.
- [Release notes](https://github.com/octokit/request.js/releases)
- [Commits](https://github.com/octokit/request.js/compare/v8.4.0...v8.4.1)

---
updated-dependencies:
- dependency-name: "@octokit/request"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 08:52:38 +01:00
Fabio Niephaus
f4c22e2c3f Update dist files. 2025-02-17 10:50:53 +01:00
dependabot[bot]
2ea5788b37 Bump @octokit/endpoint from 9.0.5 to 9.0.6
Bumps [@octokit/endpoint](https://github.com/octokit/endpoint.js) from 9.0.5 to 9.0.6.
- [Release notes](https://github.com/octokit/endpoint.js/releases)
- [Commits](https://github.com/octokit/endpoint.js/compare/v9.0.5...v9.0.6)

---
updated-dependencies:
- dependency-name: "@octokit/endpoint"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 10:50:53 +01:00
Fabio Niephaus
b5709ab80d Run SBOM test on ubuntu-22.04-arm. 2025-02-17 10:43:44 +01:00
Fabio Niephaus
6e1c9cebb5 Update dist files. 2025-02-17 10:43:44 +01:00
dependabot[bot]
601e3a4caa Bump @octokit/request-error from 5.1.0 to 5.1.1
Bumps [@octokit/request-error](https://github.com/octokit/request-error.js) from 5.1.0 to 5.1.1.
- [Release notes](https://github.com/octokit/request-error.js/releases)
- [Commits](https://github.com/octokit/request-error.js/compare/v5.1.0...v5.1.1)

---
updated-dependencies:
- dependency-name: "@octokit/request-error"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 10:43:44 +01:00
Fabio Niephaus
b0cb26a8da Bump version to 1.3.1. 2025-02-12 21:31:35 +01:00
Fabio Niephaus
30b157ff45 Ensure cache: 'maven' is tested. 2025-02-12 21:31:35 +01:00
Fabio Niephaus
0f761465f7 Convert back to CJS and use ncc. 2025-02-12 21:31:35 +01:00
Fabio Niephaus
f07b5bfaef Update dist files. 2025-02-12 14:38:09 +01:00
dependabot[bot]
fcc01ed19b Bump semver from 7.6.3 to 7.7.1
Dependabot couldn't find the original pull request head commit, d99c250780f60ae25820f76a799d34572762727f.
2025-02-12 14:38:09 +01:00
dependabot[bot]
c65e623881 Bump @octokit/types from 12.6.0 to 13.8.0
Bumps [@octokit/types](https://github.com/octokit/types.ts) from 12.6.0 to 13.8.0.
- [Release notes](https://github.com/octokit/types.ts/releases)
- [Commits](https://github.com/octokit/types.ts/compare/v12.6.0...v13.8.0)

---
updated-dependencies:
- dependency-name: "@octokit/types"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-12 14:23:45 +01:00
dependabot[bot]
3040d71541 Bump eslint-config-prettier from 9.1.0 to 10.0.1
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 9.1.0 to 10.0.1.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v9.1.0...v10.0.1)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-12 14:19:07 +01:00
Fabio Niephaus
70a5974953 Fix PASSES_GDS_TOKEN_CHECK. 2025-02-12 12:55:33 +01:00
dependabot[bot]
aa331906a0 Bump the npm-development group with 5 updates
Bumps the npm-development group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.17.14` | `20.17.17` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.22.0` | `8.24.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.22.0` | `8.24.0` |
| [eslint](https://github.com/eslint/eslint) | `9.19.0` | `9.20.1` |
| [prettier](https://github.com/prettier/prettier) | `3.4.2` | `3.5.0` |


Updates `@types/node` from 20.17.14 to 20.17.17
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@typescript-eslint/eslint-plugin` from 8.22.0 to 8.24.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.24.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.22.0 to 8.24.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.24.0/packages/parser)

Updates `eslint` from 9.19.0 to 9.20.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.19.0...v9.20.1)

Updates `prettier` from 3.4.2 to 3.5.0
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.4.2...3.5.0)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-12 12:55:33 +01:00
Fabio Niephaus
dea0e3da95 Bump version to 1.3.0. 2025-02-12 10:54:00 +01:00
Fabio Niephaus
300d65ee39 Fix cleanup invocation. 2025-02-12 10:54:00 +01:00
Fabio Niephaus
9d4a7232c4 Add ignore rule for @types/node. 2025-02-12 10:54:00 +01:00
Fabio Niephaus
9b77b7e1c6 Adjust printWidth to 120. 2025-02-12 10:54:00 +01:00
Fabio Niephaus
93a3b57d30 Convert to ESM and use rollup. 2025-02-12 10:54:00 +01:00
Fabio Niephaus
ebd520e252 Update imports. 2025-02-12 10:54:00 +01:00
Fabio Niephaus
02f9160735 Fix GDS_TOKEN check. 2025-02-10 08:11:51 +01:00
dependabot[bot]
ef3ebf8051 Bump the npm-development group with 5 updates
Bumps the npm-development group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/compat](https://github.com/eslint/rewrite) | `1.2.5` | `1.2.6` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.21.0` | `8.22.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.21.0` | `8.22.0` |
| [eslint](https://github.com/eslint/eslint) | `9.18.0` | `9.19.0` |
| [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc) | `2.18.2` | `2.19.1` |


Updates `@eslint/compat` from 1.2.5 to 1.2.6
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.5...compat-v1.2.6)

Updates `@typescript-eslint/eslint-plugin` from 8.21.0 to 8.22.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.22.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.21.0 to 8.22.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.22.0/packages/parser)

Updates `eslint` from 9.18.0 to 9.19.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.18.0...v9.19.0)

Updates `eslint-plugin-jsonc` from 2.18.2 to 2.19.1
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.18.2...v2.19.1)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint-plugin-jsonc
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 08:11:51 +01:00
Fabio Niephaus
ae07e6cc51 Start testing on ubuntu-22.04-arm. 2025-01-22 16:22:52 +01:00
Fabio Niephaus
49622345c8 Fix badge. 2025-01-21 13:35:31 +01:00
Fabio Niephaus
a0ea0f7a0a Bump version to 1.2.8. 2025-01-21 13:25:39 +01:00
Fabio Niephaus
d0b11c9136 Update ci.yml workflow with template. 2025-01-21 13:25:39 +01:00
Fabio Niephaus
eb58450822 Update check-dist.yml workflow with template. 2025-01-21 13:25:39 +01:00
Fabio Niephaus
af56e29ad9 Address eslint errors and warnings. 2025-01-21 13:25:39 +01:00
Fabio Niephaus
bc541ab008 Upgrade to eslint 9. 2025-01-21 13:25:39 +01:00
39 changed files with 3450 additions and 8071 deletions

View File

@@ -14,6 +14,10 @@ updates:
directory: /
schedule:
interval: monthly
ignore:
- dependency-name: '@types/node'
update-types:
- 'version-update:semver-major'
groups:
npm-development:
dependency-type: development

View File

@@ -32,16 +32,22 @@ jobs:
run: npm run lint
- name: Test
run: npm run test
env:
INPUT_GITHUB_TOKEN: ${{ github.token }} # for core.getInput()
test-action:
name: GraalVM
runs-on: ${{ matrix.os }}
env:
# Skip builds that require a GDS token but have no access to one (e.g., secrets are unavailable in PR runs)
PASSES_GDS_TOKEN_CHECK: ${{ !matrix.set-gds-token || secrets.GDS_TOKEN != '' }}
strategy:
matrix:
java-version: ['23', '21', '17', '20', 'dev']
java-version: ['24', '21', '17', '20', 'dev']
distribution: ['graalvm', 'graalvm-community']
os: [
ubuntu-latest,
ubuntu-latest, # Linux on Intel
ubuntu-22.04-arm, # Linux on arm64
macos-latest, # macOS on Apple silicon
macos-13, # macOS on Intel
windows-latest
@@ -52,7 +58,7 @@ jobs:
- java-version: 'latest-ea'
distribution: 'graalvm'
os: ubuntu-latest
- java-version: '24-ea'
- java-version: '25-ea'
distribution: 'graalvm'
os: ubuntu-latest
- java-version: '21'
@@ -86,8 +92,7 @@ jobs:
github-token: ${{ secrets.GITHUB_TOKEN }}
components: ${{ matrix.components }}
gds-token: ${{ matrix.set-gds-token && secrets.GDS_TOKEN || '' }}
# Skip in PR builds that require a GDS token (secrets are not available in PR runs)
if: github.event_name != 'pull_request' || !matrix.set-gds-token
if: ${{ env.PASSES_GDS_TOKEN_CHECK == 'true' }}
- name: Check environment
run: |
echo "GRAALVM_HOME: $GRAALVM_HOME"
@@ -100,14 +105,14 @@ jobs:
java --version
java --version | grep "GraalVM" || exit 34
native-image --version
if: runner.os != 'Windows' && (github.event_name != 'pull_request' || !matrix.set-gds-token)
if: ${{ env.PASSES_GDS_TOKEN_CHECK == 'true' && runner.os != 'Windows' }}
- name: Check Windows environment
run: |
echo "GRAALVM_HOME: $env:GRAALVM_HOME"
echo "JAVA_HOME: $env:JAVA_HOME"
java --version
native-image --version
if: runner.os == 'Windows'
if: ${{ env.PASSES_GDS_TOKEN_CHECK == 'true' && runner.os == 'Windows' }}
test-action-ce: # make sure the action works on a clean machine without building
needs: test-action
@@ -128,7 +133,7 @@ jobs:
- version: '22.2.0' # for update notifications
java-version: '17'
components: 'native-image'
os: ubuntu-20.04
os: ubuntu-22.04
- version: '21.2.0'
java-version: '8' # for JDK 8 notification
components: 'native-image'
@@ -169,7 +174,7 @@ jobs:
if [[ "${{ matrix.java-version }}" != "dev" ]]; then
gu list
fi
if: runner.os != 'Windows'
if: ${{ runner.os != 'Windows' }}
- name: Check Windows environment
run: |
echo "GRAALVM_HOME: $env:GRAALVM_HOME"
@@ -177,13 +182,16 @@ jobs:
java -version
native-image --version
gu.cmd remove native-image
if: runner.os == 'Windows'
if: ${{ runner.os == 'Windows' }}
test-action-ee:
needs: test-action
name: EE ${{ matrix.version }} + JDK${{ matrix.java-version }} on ${{ matrix.os }}
if: github.event_name != 'pull_request'
runs-on: ${{ matrix.os }}
env:
# Skip builds that require a GDS token but have no access to one (e.g., secrets are unavailable in PR runs)
PASSES_GDS_TOKEN_CHECK: ${{ secrets.GDS_TOKEN != '' }}
strategy:
matrix:
version: ['latest']
@@ -209,6 +217,7 @@ jobs:
java-version: ${{ matrix.java-version }}
components: ${{ matrix.components }}
github-token: ${{ secrets.GITHUB_TOKEN }}
if: ${{ env.PASSES_GDS_TOKEN_CHECK == 'true' }}
- name: Check environment
run: |
echo "GRAALVM_HOME: $GRAALVM_HOME"
@@ -218,7 +227,7 @@ jobs:
java --version | grep -e "GraalVM EE" -e "Oracle GraalVM" || exit 23
native-image --version
gu list
if: runner.os != 'Windows'
if: ${{ env.PASSES_GDS_TOKEN_CHECK == 'true' && runner.os != 'Windows' }}
- name: Check Windows environment
run: |
echo "GRAALVM_HOME: $env:GRAALVM_HOME"
@@ -226,7 +235,7 @@ jobs:
java --version
native-image --version
gu.cmd remove native-image
if: runner.os == 'Windows'
if: ${{ env.PASSES_GDS_TOKEN_CHECK == 'true' && runner.os == 'Windows' }}
test-action-mandrel:
needs: test-action
@@ -264,14 +273,14 @@ jobs:
java --version
java --version | grep "Temurin" || exit 23
native-image --version
if: runner.os != 'Windows'
if: ${{ runner.os != 'Windows' }}
- name: Check Windows environment
run: |
echo "GRAALVM_HOME: $env:GRAALVM_HOME"
echo "JAVA_HOME: $env:JAVA_HOME"
java --version
native-image --version
if: runner.os == 'Windows'
if: ${{ runner.os == 'Windows' }}
test-action-liberica:
needs: test-action
@@ -300,7 +309,7 @@ jobs:
java --version | fgrep -qw ${{ matrix.java-version }} || exit 23
native-image --version
native-image --version | fgrep -qw ${{ matrix.java-version }} || exit 24
if: runner.os != 'Windows'
if: ${{ runner.os != 'Windows' }}
- name: Check Windows environment
shell: pwsh
run: |
@@ -314,7 +323,7 @@ jobs:
if (!(native-image --version | findstr \<${{ matrix.java-version }}\>)) {
exit 24
}
if: runner.os == 'Windows'
if: ${{ runner.os == 'Windows' }}
test-action-native-image-windows:
name: native-image on windows-latest
@@ -451,8 +460,7 @@ jobs:
matrix:
java-version: ['24-ea', 'latest-ea']
distribution: ['graalvm']
os: [macos-latest, windows-latest, ubuntu-latest]
set-gds-token: [false]
os: [macos-latest, windows-latest, ubuntu-latest, ubuntu-22.04-arm]
components: ['']
steps:
- uses: actions/checkout@v4
@@ -463,19 +471,19 @@ jobs:
distribution: ${{ matrix.distribution }}
github-token: ${{ secrets.GITHUB_TOKEN }}
components: ${{ matrix.components }}
gds-token: ${{ matrix.set-gds-token && secrets.GDS_TOKEN || '' }}
native-image-enable-sbom: 'true'
cache: 'maven'
- name: Build Maven project and verify that SBOM was generated and its contents
run: |
cd __tests__/sbom/main-test-app
mvn --no-transfer-progress -Pnative package
bash verify-sbom.sh
shell: bash
if: runner.os != 'Windows'
if: ${{ runner.os != 'Windows' }}
- name: Build Maven project and verify that SBOM was generated and its contents (Windows)
run: |
cd __tests__\sbom\main-test-app
mvn --no-transfer-progress -Pnative package
cmd /c verify-sbom.cmd
shell: cmd
if: runner.os == 'Windows'
if: ${{ runner.os == 'Windows' }}

View File

@@ -1,10 +0,0 @@
{
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"singleQuote": true,
"trailingComma": "none",
"bracketSpacing": false,
"arrowParens": "avoid"
}

View File

@@ -1,6 +1,6 @@
# See: https://prettier.io/docs/en/configuration
printWidth: 80
printWidth: 120
tabWidth: 2
useTabs: false
semi: false

View File

@@ -1,5 +1,7 @@
# GitHub Action for GraalVM [![build-test](https://github.com/graalvm/setup-graalvm/actions/workflows/test.yml/badge.svg)](https://github.com/graalvm/setup-graalvm/actions/workflows/test.yml)
This GitHub action sets up [Oracle GraalVM][graalvm-medium], GraalVM [Community Edition (CE)][repo], [Enterprise Edition (EE)][graalvm-ee], [Mandrel][mandrel], or [Liberica Native Image Kit][liberica] as well as [Native Image][native-image] and GraalVM components such as [Truffle languages][truffle-languages].
# GitHub Action for GraalVM [![CI](https://github.com/graalvm/setup-graalvm/actions/workflows/ci.yml/badge.svg)](https://github.com/graalvm/setup-graalvm/actions/workflows/ci.yml)
Set up your GitHub Actions workflow with a specific [GraalVM][graalvm] distribution, and use it both as your JDK and for [ahead-of-time Native Image compilation][graalvm].
## Key Features
@@ -7,12 +9,10 @@ This action:
- supports Oracle GraalVM [releases][graalvm-dl], [EA builds][ea-builds], GraalVM Community Edition (CE) [releases], [dev builds][dev-builds], GraalVM Enterprise Edition (EE) [releases][graalvm-ee] (set [`gds-token`](#options)) 22.1.0 and later, [Mandrel][mandrel], and [Liberica Native Image Kit][liberica] (see [Options](#options))
- exports a `$GRAALVM_HOME` environment variable
- adds `$GRAALVM_HOME/bin` to the `$PATH` environment variable<br>(Native Image, Truffle languages, and tools can be invoked directly)
- adds `$GRAALVM_HOME/bin` to the `$PATH` environment variable<br>(`native-image`, `javac`, and other JDK tools can be invoked directly)
- sets `$JAVA_HOME` to `$GRAALVM_HOME` by default<br>(can be disabled via `set-java-home: 'false'`, see [Options](#options))
- supports `x64` and `aarch64` (selected automatically, `aarch64` requires a [self-hosted runner][gha-self-hosted-runners])
- supports `x64` and `aarch64/arm64` (see how to use [Linux arm64 runners](https://github.blog/changelog/2025-01-16-linux-arm64-hosted-runners-now-available-for-free-in-public-repositories-public-preview/))
- supports dependency caching for Apache Maven, Gradle, and sbt (see [`cache` option](#options))
- sets up Windows environments with build tools using [vcvarsall.bat][vcvarsall]
- has built-in support for GraalVM components and the [GraalVM Updater][gu]
## Templates
@@ -194,7 +194,7 @@ This actions can be configured with the following options:
| Name | Default | Description |
|-----------------|:--------:|-------------|
| `java-version`<br>*(required)* | n/a | Java version <ul><li>major versions: `'23'`, `'21'`, `'17'`, `'11'`, `'8'`</li><li>specific versions: `'21.0.3'`, `'17.0.11'`</li><li>early access (EA) builds: `'24-ea'` *(requires `distribution: 'graalvm'`)*</li><li>latest EA build: `'latest-ea'` *(requires `distribution: 'graalvm'`)*</li><li>dev builds: `'dev'`</li></ul> |
| `java-version`<br>*(required)* | n/a | Java version <ul><li>major versions: `'24'`, `'21'`, `'17'`, `'11'`, `'8'`</li><li>specific versions: `'21.0.3'`, `'17.0.11'`</li><li>early access (EA) builds: `'25-ea'` *(requires `distribution: 'graalvm'`)*</li><li>latest EA build: `'latest-ea'` *(requires `distribution: 'graalvm'`)*</li><li>dev builds: `'dev'`</li></ul> |
| `distribution` | `'graalvm'` | GraalVM distribution (see [supported distributions](#supported-distributions)) |
| `java-package` | `'jdk'` | The package type (`'jdk'` or `'jdk+fx'`). Currently applies to Liberica only. |
| `github-token` | `'${{ github.token }}'` | Token for communication with the GitHub API. Please set this to `${{ secrets.GITHUB_TOKEN }}` (see [templates](#templates)) to allow the action to authenticate with the GitHub API, which helps reduce rate-limiting issues. |
@@ -270,21 +270,16 @@ Only pull requests from committers that can be verified as having signed the OCA
[gha-self-hosted-runners]: https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners
[gu]: https://www.graalvm.org/reference-manual/graalvm-updater/
[graalvm]: https://www.graalvm.org/
[graalvm-dl]: https://www.oracle.com/java/technologies/downloads/
[graalvm-medium]: https://medium.com/graalvm/a-new-graalvm-release-and-new-free-license-4aab483692f5
[graalvm-dl]: https://www.graalvm.org/downloads/
[graalvm-ee]: https://www.oracle.com/downloads/graalvm-downloads.html
[liberica]: https://bell-sw.com/liberica-native-image-kit/
[mandrel]: https://github.com/graalvm/mandrel
[mandrel-releases]: https://github.com/graalvm/mandrel/releases
[mandrel-stable]: https://github.com/graalvm/mandrel/releases/latest
[musl]: https://musl.libc.org/
[native-image]: https://www.graalvm.org/native-image/
[native-image-musl-build]: https://github.com/graalvm/setup-graalvm/blob/778131f1d6837ccd4b2e91382c31830896a2d56e/.github/workflows/test.yml#L74-L92
[native-image-static]: https://github.com/oracle/graal/blob/fa6f4a974dedacf4688dcc430dd100849d9882f2/docs/reference-manual/native-image/StaticImages.md
[oca]: https://oca.opensource.oracle.com
[releases]: https://github.com/graalvm/graalvm-ce-builds/releases
[repo]: https://github.com/oracle/graal
[setup-java-caching]: https://github.com/actions/setup-java/tree/5b36705a13905facb447b6812d613a06a07e371d#caching-packages-dependencies
[stable]: https://github.com/graalvm/graalvm-ce-builds/releases/latest
[truffle-languages]: https://www.graalvm.org/reference-manual/languages/
[vcvarsall]: https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line

View File

@@ -24,10 +24,10 @@
* Forked from https://github.com/actions/setup-java/blob/5b36705a13905facb447b6812d613a06a07e371d/__tests__/cache.test.ts
*/
import {mkdtempSync} from 'fs'
import {tmpdir} from 'os'
import {join} from 'path'
import {restore, save} from '../src/features/cache'
import { mkdtempSync } from 'fs'
import { tmpdir } from 'os'
import { join } from 'path'
import { restore, save } from '../src/features/cache'
import * as fs from 'fs'
import * as os from 'os'
import * as core from '@actions/core'
@@ -86,24 +86,17 @@ describe('dependency cache', () => {
})
describe('restore', () => {
let spyCacheRestore: jest.SpyInstance<
ReturnType<typeof cache.restoreCache>,
Parameters<typeof cache.restoreCache>
>
let spyCacheRestore: jest.SpyInstance<ReturnType<typeof cache.restoreCache>, Parameters<typeof cache.restoreCache>>
beforeEach(() => {
spyCacheRestore = jest
.spyOn(cache, 'restoreCache')
.mockImplementation((_paths: string[], _primaryKey: string) =>
Promise.resolve(undefined)
)
.mockImplementation((_paths: string[], _primaryKey: string) => Promise.resolve(undefined))
spyWarning.mockImplementation(() => null)
})
it('throws error if unsupported package manager specified', () => {
return expect(restore('ant')).rejects.toThrow(
'unknown package manager specified: ant'
)
return expect(restore('ant')).rejects.toThrow('unknown package manager specified: ant')
})
describe('for maven', () => {
@@ -176,24 +169,17 @@ describe('dependency cache', () => {
})
})
describe('save', () => {
let spyCacheSave: jest.SpyInstance<
ReturnType<typeof cache.saveCache>,
Parameters<typeof cache.saveCache>
>
let spyCacheSave: jest.SpyInstance<ReturnType<typeof cache.saveCache>, Parameters<typeof cache.saveCache>>
beforeEach(() => {
spyCacheSave = jest
.spyOn(cache, 'saveCache')
.mockImplementation((_paths: string[], _key: string) =>
Promise.resolve(0)
)
.mockImplementation((_paths: string[], _key: string) => Promise.resolve(0))
spyWarning.mockImplementation(() => null)
})
it('throws error if unsupported package manager specified', () => {
return expect(save('ant')).rejects.toThrow(
'unknown package manager specified: ant'
)
return expect(save('ant')).rejects.toThrow('unknown package manager specified: ant')
})
it('save with -1 cacheId , should not fail workflow', async () => {
@@ -204,21 +190,15 @@ describe('dependency cache', () => {
expect(spyCacheSave).toHaveBeenCalled()
expect(spyWarning).not.toHaveBeenCalled()
expect(spyInfo).toHaveBeenCalled()
expect(spyInfo).toHaveBeenCalledWith(
expect.stringMatching(/^Cache saved with the key:.*/)
)
expect(spyInfo).toHaveBeenCalledWith(expect.stringMatching(/^Cache saved with the key:.*/))
})
it('saves with error from toolkit, should fail workflow', async () => {
spyCacheSave.mockImplementation(() =>
Promise.reject(new cache.ValidationError('Validation failed'))
)
spyCacheSave.mockImplementation(() => Promise.reject(new cache.ValidationError('Validation failed')))
createStateForMissingBuildFile()
expect.assertions(1)
await expect(save('maven')).rejects.toEqual(
new cache.ValidationError('Validation failed')
)
await expect(save('maven')).rejects.toEqual(new cache.ValidationError('Validation failed'))
})
describe('for maven', () => {
@@ -233,9 +213,7 @@ describe('dependency cache', () => {
await save('maven')
expect(spyCacheSave).not.toHaveBeenCalled()
expect(spyWarning).toHaveBeenCalledWith(
'Error retrieving key from state.'
)
expect(spyWarning).toHaveBeenCalledWith('Error retrieving key from state.')
})
it('uploads cache', async () => {
createFile(join(workspace, 'pom.xml'))
@@ -244,9 +222,7 @@ describe('dependency cache', () => {
await save('maven')
expect(spyCacheSave).toHaveBeenCalled()
expect(spyWarning).not.toHaveBeenCalled()
expect(spyInfo).toHaveBeenCalledWith(
expect.stringMatching(/^Cache saved with the key:.*/)
)
expect(spyInfo).toHaveBeenCalledWith(expect.stringMatching(/^Cache saved with the key:.*/))
})
})
describe('for gradle', () => {
@@ -262,9 +238,7 @@ describe('dependency cache', () => {
await save('gradle')
expect(spyCacheSave).not.toHaveBeenCalled()
expect(spyWarning).toHaveBeenCalledWith(
'Error retrieving key from state.'
)
expect(spyWarning).toHaveBeenCalledWith('Error retrieving key from state.')
})
it('uploads cache based on build.gradle', async () => {
createFile(join(workspace, 'build.gradle'))
@@ -273,9 +247,7 @@ describe('dependency cache', () => {
await save('gradle')
expect(spyCacheSave).toHaveBeenCalled()
expect(spyWarning).not.toHaveBeenCalled()
expect(spyInfo).toHaveBeenCalledWith(
expect.stringMatching(/^Cache saved with the key:.*/)
)
expect(spyInfo).toHaveBeenCalledWith(expect.stringMatching(/^Cache saved with the key:.*/))
})
it('uploads cache based on build.gradle.kts', async () => {
createFile(join(workspace, 'build.gradle.kts'))
@@ -284,9 +256,7 @@ describe('dependency cache', () => {
await save('gradle')
expect(spyCacheSave).toHaveBeenCalled()
expect(spyWarning).not.toHaveBeenCalled()
expect(spyInfo).toHaveBeenCalledWith(
expect.stringMatching(/^Cache saved with the key:.*/)
)
expect(spyInfo).toHaveBeenCalledWith(expect.stringMatching(/^Cache saved with the key:.*/))
})
it('uploads cache based on buildSrc/Versions.kt', async () => {
createDirectory(join(workspace, 'buildSrc'))
@@ -296,9 +266,7 @@ describe('dependency cache', () => {
await save('gradle')
expect(spyCacheSave).toHaveBeenCalled()
expect(spyWarning).not.toHaveBeenCalled()
expect(spyInfo).toHaveBeenCalledWith(
expect.stringMatching(/^Cache saved with the key:.*/)
)
expect(spyInfo).toHaveBeenCalledWith(expect.stringMatching(/^Cache saved with the key:.*/))
})
})
describe('for sbt', () => {
@@ -313,9 +281,7 @@ describe('dependency cache', () => {
await save('sbt')
expect(spyCacheSave).not.toHaveBeenCalled()
expect(spyWarning).toHaveBeenCalledWith(
'Error retrieving key from state.'
)
expect(spyWarning).toHaveBeenCalledWith('Error retrieving key from state.')
})
it('uploads cache', async () => {
createFile(join(workspace, 'build.sbt'))
@@ -324,9 +290,7 @@ describe('dependency cache', () => {
await save('sbt')
expect(spyCacheSave).toHaveBeenCalled()
expect(spyWarning).not.toHaveBeenCalled()
expect(spyInfo).toHaveBeenCalledWith(
expect.stringMatching(/^Cache saved with the key:.*/)
)
expect(spyInfo).toHaveBeenCalledWith(expect.stringMatching(/^Cache saved with the key:.*/))
})
})
})
@@ -340,7 +304,7 @@ function resetState() {
* Create states to emulate a restore process without build file.
*/
function createStateForMissingBuildFile() {
jest.spyOn(core, 'getState').mockImplementation(name => {
jest.spyOn(core, 'getState').mockImplementation((name) => {
switch (name) {
case 'cache-primary-key':
return 'setup-graalvm-cache-'
@@ -354,7 +318,7 @@ function createStateForMissingBuildFile() {
* Create states to emulate a successful restore process.
*/
function createStateForSuccessfulRestore() {
jest.spyOn(core, 'getState').mockImplementation(name => {
jest.spyOn(core, 'getState').mockImplementation((name) => {
switch (name) {
case 'cache-primary-key':
return 'setup-graalvm-cache-primary-key'

View File

@@ -24,17 +24,14 @@
* Forked from https://github.com/actions/setup-java/blob/5b36705a13905facb447b6812d613a06a07e371d/__tests__/cleanup-java.test.ts
*/
import {run as cleanup} from '../src/cleanup'
import { run as cleanup } from '../src/cleanup'
import * as core from '@actions/core'
import * as cache from '@actions/cache'
describe('cleanup', () => {
let spyWarning: jest.SpyInstance<void, Parameters<typeof core.warning>>
let spyInfo: jest.SpyInstance<void, Parameters<typeof core.info>>
let spyCacheSave: jest.SpyInstance<
ReturnType<typeof cache.saveCache>,
Parameters<typeof cache.saveCache>
>
let spyCacheSave: jest.SpyInstance<ReturnType<typeof cache.saveCache>, Parameters<typeof cache.saveCache>>
beforeEach(() => {
spyWarning = jest.spyOn(core, 'warning')
@@ -51,9 +48,7 @@ describe('cleanup', () => {
it('does not fail nor warn even when the save process throws a ReserveCacheError', async () => {
spyCacheSave.mockImplementation((_paths: string[], _key: string) =>
Promise.reject(
new cache.ReserveCacheError(
'Unable to reserve cache with key, another job may be creating this cache.'
)
new cache.ReserveCacheError('Unable to reserve cache with key, another job may be creating this cache.')
)
)
jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
@@ -65,9 +60,7 @@ describe('cleanup', () => {
})
it('does not fail even though the save process throws error', async () => {
spyCacheSave.mockImplementation((_paths: string[], _key: string) =>
Promise.reject(new Error('Unexpected error'))
)
spyCacheSave.mockImplementation((_paths: string[], _key: string) => Promise.reject(new Error('Unexpected error')))
jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
return name === 'cache' ? 'gradle' : ''
})
@@ -84,7 +77,7 @@ function resetState() {
* Create states to emulate a successful restore process.
*/
function createStateForSuccessfulRestore() {
jest.spyOn(core, 'getState').mockImplementation(name => {
jest.spyOn(core, 'getState').mockImplementation((name) => {
switch (name) {
case 'cache-primary-key':
return 'setup-java-cache-primary-key'

View File

@@ -1,11 +1,6 @@
import * as path from 'path'
import {
downloadGraalVM,
downloadGraalVMEELegacy,
fetchArtifact,
fetchArtifactEE
} from '../src/gds'
import {expect, test} from '@jest/globals'
import { downloadGraalVM, downloadGraalVMEELegacy, fetchArtifact, fetchArtifactEE } from '../src/gds'
import { expect, test } from '@jest/globals'
const TEST_USER_AGENT = 'GraalVMGitHubActionTest/1.0.4'
@@ -14,64 +9,42 @@ process.env['RUNNER_TEMP'] = path.join(__dirname, 'TEMP')
test('fetch artifacts', async () => {
let artifact = await fetchArtifact(TEST_USER_AGENT, 'isBase:True', '17.0.12')
expect(artifact.id).toBe('1C351E8F41BB8E9EE0631518000AE5F2')
expect(artifact.checksum).toBe(
'b6f3dace24cf1960ec790216f4c86f00d4f43df64e4e8b548f6382f04894713f'
)
expect(artifact.checksum).toBe('b6f3dace24cf1960ec790216f4c86f00d4f43df64e4e8b548f6382f04894713f')
artifact = await fetchArtifact(TEST_USER_AGENT, 'isBase:True', '17')
expect(artifact.checksum).toHaveLength(
'b6f3dace24cf1960ec790216f4c86f00d4f43df64e4e8b548f6382f04894713f'.length
)
expect(artifact.checksum).toHaveLength('b6f3dace24cf1960ec790216f4c86f00d4f43df64e4e8b548f6382f04894713f'.length)
})
test('errors when downloading artifacts', async () => {
await expect(downloadGraalVM('invalid', '17')).rejects.toThrow(
'The provided "gds-token" was rejected (reason: "Invalid download token", opc-request-id: '
)
await expect(downloadGraalVM('invalid', '1')).rejects.toThrow(
'Unable to find GraalVM for JDK 1'
)
await expect(downloadGraalVM('invalid', '1')).rejects.toThrow('Unable to find GraalVM for JDK 1')
})
test('fetch legacy artifacts', async () => {
let artifact = await fetchArtifactEE(
TEST_USER_AGENT,
'isBase:True',
'22.1.0',
'11'
)
let artifact = await fetchArtifactEE(TEST_USER_AGENT, 'isBase:True', '22.1.0', '11')
expect(artifact.id).toBe('DCECD1C1B0B5B8DBE0536E16000A5C74')
expect(artifact.checksum).toBe(
'4280782f6c7fcabe0ba707e8389cbfaf7bbe6b0cf634d309e6efcd1b172e3ce6'
)
artifact = await fetchArtifactEE(
TEST_USER_AGENT,
'isBase:True',
'22.1.0',
'17'
)
expect(artifact.checksum).toBe('4280782f6c7fcabe0ba707e8389cbfaf7bbe6b0cf634d309e6efcd1b172e3ce6')
artifact = await fetchArtifactEE(TEST_USER_AGENT, 'isBase:True', '22.1.0', '17')
expect(artifact.id).toBe('DCECD2068882A0E9E0536E16000A9504')
expect(artifact.checksum).toBe(
'e897add7d94bc456a61e6f927e831dff759efa3392a4b69c720dd3debc8f947d'
)
expect(artifact.checksum).toBe('e897add7d94bc456a61e6f927e831dff759efa3392a4b69c720dd3debc8f947d')
await expect(
fetchArtifactEE(TEST_USER_AGENT, 'isBase:False', '22.1.0', '11')
).rejects.toThrow('Found more than one GDS artifact')
await expect(
fetchArtifactEE(TEST_USER_AGENT, 'isBase:True', '1.0.0', '11')
).rejects.toThrow('Unable to find JDK11-based GraalVM EE 1.0.0')
await expect(fetchArtifactEE(TEST_USER_AGENT, 'isBase:False', '22.1.0', '11')).rejects.toThrow(
'Found more than one GDS artifact'
)
await expect(fetchArtifactEE(TEST_USER_AGENT, 'isBase:True', '1.0.0', '11')).rejects.toThrow(
'Unable to find JDK11-based GraalVM EE 1.0.0'
)
})
test('errors when downloading legacy artifacts', async () => {
await expect(
downloadGraalVMEELegacy('invalid', '22.1.0', '11')
).rejects.toThrow(
await expect(downloadGraalVMEELegacy('invalid', '22.1.0', '11')).rejects.toThrow(
'The provided "gds-token" was rejected (reason: "Invalid download token", opc-request-id: '
)
await expect(
downloadGraalVMEELegacy('invalid', '1.0.0', '11')
).rejects.toThrow('Unable to find JDK11-based GraalVM EE 1.0.0')
await expect(
downloadGraalVMEELegacy('invalid', '22.1.0', '1')
).rejects.toThrow('Unable to find JDK1-based GraalVM EE 22.1.0')
await expect(downloadGraalVMEELegacy('invalid', '1.0.0', '11')).rejects.toThrow(
'Unable to find JDK11-based GraalVM EE 1.0.0'
)
await expect(downloadGraalVMEELegacy('invalid', '22.1.0', '1')).rejects.toThrow(
'Unable to find JDK1-based GraalVM EE 22.1.0'
)
})

View File

@@ -1,13 +1,9 @@
import * as path from 'path'
import * as graalvm from '../src/graalvm'
import {expect, test} from '@jest/globals'
import {getTaggedRelease} from '../src/utils'
import {
findGraalVMVersion,
findHighestJavaVersion,
findLatestEABuildDownloadUrl
} from '../src/graalvm'
import {GRAALVM_GH_USER, GRAALVM_RELEASES_REPO} from '../src/constants'
import { expect, test } from '@jest/globals'
import { getTaggedRelease } from '../src/utils'
import { findGraalVMVersion, findHighestJavaVersion, findLatestEABuildDownloadUrl } from '../src/graalvm'
import { GRAALVM_GH_USER, GRAALVM_RELEASES_REPO } from '../src/constants'
process.env['RUNNER_TOOL_CACHE'] = path.join(__dirname, 'TOOL_CACHE')
process.env['RUNNER_TEMP'] = path.join(__dirname, 'TEMP')
@@ -52,11 +48,7 @@ test('find version/javaVersion', async () => {
}
expect(error.message).toContain('Unable to find the latest Java version for')
const latestRelease = await getTaggedRelease(
GRAALVM_GH_USER,
GRAALVM_RELEASES_REPO,
'vm-22.3.1'
)
const latestRelease = await getTaggedRelease(GRAALVM_GH_USER, GRAALVM_RELEASES_REPO, 'vm-22.3.1')
const latestVersion = findGraalVMVersion(latestRelease)
expect(latestVersion).not.toBe('')
const latestJavaVersion = findHighestJavaVersion(latestRelease, latestVersion)
@@ -64,7 +56,7 @@ test('find version/javaVersion', async () => {
error = new Error('unexpected')
try {
const invalidRelease = {...latestRelease, tag_name: 'invalid'}
const invalidRelease = { ...latestRelease, tag_name: 'invalid' }
findGraalVMVersion(invalidRelease)
} catch (err) {
if (!(err instanceof Error)) {

View File

@@ -2,7 +2,7 @@ import * as liberica from '../src/liberica'
import * as c from '../src/constants'
import * as path from 'path'
import * as semver from 'semver'
import {expect, test} from '@jest/globals'
import { expect, test } from '@jest/globals'
process.env['RUNNER_TOOL_CACHE'] = path.join(__dirname, 'TOOL_CACHE')
process.env['RUNNER_TEMP'] = path.join(__dirname, 'TEMP')
@@ -43,29 +43,15 @@ test('find asset URL', async () => {
if (!c.IS_LINUX) {
// This check can fail on Linux because there's no `jdk+fx` package for aarch64 and/or musl
await expectURL(
'21.0.2+14',
'jdk+fx',
'bellsoft-liberica-vm-full-openjdk21.0.2'
)
await expectURL('21.0.2+14', 'jdk+fx', 'bellsoft-liberica-vm-full-openjdk21.0.2')
}
}, 10000)
type verifier = (
version: string,
major: number,
minor: number,
patch: number
) => void
type verifier = (version: string, major: number, minor: number, patch: number) => void
function atLeast(expectedMinVersion: string): verifier {
const expectedMajor = semver.major(expectedMinVersion)
return function (
version: string,
major: number,
_minor: number,
_patch: number
) {
return function (version: string, major: number, _minor: number, _patch: number) {
expect(major).toBe(expectedMajor)
if (semver.compareBuild(version, expectedMinVersion) < 0) {
throw new Error(`Version ${version} is older than ${expectedMinVersion}`)
@@ -77,12 +63,7 @@ function upToBuild(expectedMinVersion: string): verifier {
const expectedMinor = semver.minor(expectedMinVersion)
const expectedPatch = semver.patch(expectedMinVersion)
const atLeastVerifier = atLeast(expectedMinVersion)
return function (
version: string,
major: number,
minor: number,
patch: number
) {
return function (version: string, major: number, minor: number, patch: number) {
atLeastVerifier(version, major, minor, patch)
expect(minor).toBe(expectedMinor)
expect(patch).toBe(expectedPatch)
@@ -90,12 +71,7 @@ function upToBuild(expectedMinVersion: string): verifier {
}
function exactly(expectedVersion: string): verifier {
return function (
version: string,
_major: number,
_minor: number,
_patch: number
) {
return function (version: string, _major: number, _minor: number, _patch: number) {
if (semver.compareBuild(version, expectedVersion) != 0) {
throw new Error(`Expected version ${expectedVersion} but got ${version}`)
}
@@ -114,24 +90,16 @@ async function expectLatestToBe(pattern: string, verify: verifier) {
async function expectLatestToFail(pattern: string) {
try {
const result = await liberica.findLatestLibericaJavaVersion(pattern)
throw new Error(
`findLatest(${pattern}) should have failed but returned ${result}`
)
throw new Error(`findLatest(${pattern}) should have failed but returned ${result}`)
} catch (err) {
if (!(err instanceof Error)) {
throw new Error(`Unexpected non-Error: ${err}`)
}
expect(err.message).toContain(
`Unable to find the latest version for JDK${pattern}`
)
expect(err.message).toContain(`Unable to find the latest version for JDK${pattern}`)
}
}
async function expectURL(
javaVersion: string,
javaPackage: string,
expectedPrefix: string
) {
async function expectURL(javaVersion: string, javaPackage: string, expectedPrefix: string) {
const url = await liberica.findLibericaURL(javaVersion, javaPackage)
expect(url).toBeDefined()
const parts = url.split('/')

View File

@@ -1,7 +1,7 @@
import * as path from 'path'
import * as mandrel from '../src/mandrel'
import {expect, test} from '@jest/globals'
import {getLatestRelease} from '../src/utils'
import { expect, test } from '@jest/globals'
import { getLatestRelease } from '../src/utils'
process.env['RUNNER_TOOL_CACHE'] = path.join(__dirname, 'TOOL_CACHE')
process.env['RUNNER_TEMP'] = path.join(__dirname, 'TEMP')

View File

@@ -1,22 +1,13 @@
import * as path from 'path'
import {expect, test} from '@jest/globals'
import {needsWindowsEnvironmentSetup} from '../src/msvc'
import {VERSION_DEV, VERSION_LATEST} from '../src/constants'
import { expect, test } from '@jest/globals'
import { needsWindowsEnvironmentSetup } from '../src/msvc'
import { VERSION_DEV, VERSION_LATEST } from '../src/constants'
process.env['RUNNER_TOOL_CACHE'] = path.join(__dirname, 'TOOL_CACHE')
process.env['RUNNER_TEMP'] = path.join(__dirname, 'TEMP')
test('decide whether Window env must be set up for GraalVM for JDK', async () => {
for (const javaVersion of [
'17',
'17.0.8',
'17.0',
'21',
'22',
'22-ea',
'23-ea',
VERSION_DEV
]) {
for (const javaVersion of ['17', '17.0.8', '17.0', '21', '22', '22-ea', '23-ea', VERSION_DEV]) {
expect(needsWindowsEnvironmentSetup(javaVersion, '', true)).toBe(false)
}
})
@@ -29,8 +20,6 @@ test('decide whether Window env must be set up for legacy GraalVM', async () =>
['7', VERSION_DEV],
['17', VERSION_LATEST]
]) {
expect(
needsWindowsEnvironmentSetup(combination[0], combination[1], false)
).toBe(combination[1] !== VERSION_DEV)
expect(needsWindowsEnvironmentSetup(combination[0], combination[1], false)).toBe(combination[1] !== VERSION_DEV)
}
})

View File

@@ -1,11 +1,11 @@
import * as c from '../src/constants'
import {setUpSBOMSupport, processSBOM} from '../src/features/sbom'
import { setUpSBOMSupport, processSBOM } from '../src/features/sbom'
import * as core from '@actions/core'
import * as github from '@actions/github'
import * as glob from '@actions/glob'
import {join} from 'path'
import {tmpdir} from 'os'
import {mkdtempSync, writeFileSync, rmSync} from 'fs'
import { join } from 'path'
import { tmpdir } from 'os'
import { mkdtempSync, writeFileSync, rmSync } from 'fs'
jest.mock('@actions/glob')
jest.mock('@actions/github', () => ({
@@ -37,9 +37,7 @@ function mockFindSBOM(files: string[]) {
function mockGithubAPIReturnValue(returnValue: Error | undefined = undefined) {
const mockOctokit = {
request:
returnValue === undefined
? jest.fn().mockResolvedValue(returnValue)
: jest.fn().mockRejectedValue(returnValue)
returnValue === undefined ? jest.fn().mockResolvedValue(returnValue) : jest.fn().mockRejectedValue(returnValue)
}
;(github.getOctokit as jest.Mock).mockReturnValue(mockOctokit)
return mockOctokit
@@ -48,10 +46,7 @@ function mockGithubAPIReturnValue(returnValue: Error | undefined = undefined) {
describe('sbom feature', () => {
let spyInfo: jest.SpyInstance<void, Parameters<typeof core.info>>
let spyWarning: jest.SpyInstance<void, Parameters<typeof core.warning>>
let spyExportVariable: jest.SpyInstance<
void,
Parameters<typeof core.exportVariable>
>
let spyExportVariable: jest.SpyInstance<void, Parameters<typeof core.exportVariable>>
let workspace: string
let originalEnv: NodeJS.ProcessEnv
const javaVersion = '24.0.0'
@@ -71,9 +66,7 @@ describe('sbom feature', () => {
spyInfo = jest.spyOn(core, 'info').mockImplementation(() => null)
spyWarning = jest.spyOn(core, 'warning').mockImplementation(() => null)
spyExportVariable = jest
.spyOn(core, 'exportVariable')
.mockImplementation(() => null)
spyExportVariable = jest.spyOn(core, 'exportVariable').mockImplementation(() => null)
jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
if (name === 'native-image-enable-sbom') {
return 'true'
@@ -91,7 +84,7 @@ describe('sbom feature', () => {
spyInfo.mockRestore()
spyWarning.mockRestore()
spyExportVariable.mockRestore()
rmSync(workspace, {recursive: true, force: true})
rmSync(workspace, { recursive: true, force: true })
})
describe('setup', () => {
@@ -128,9 +121,7 @@ describe('sbom feature', () => {
c.NATIVE_IMAGE_OPTIONS_ENV,
expect.stringContaining('--enable-sbom=export')
)
expect(spyInfo).toHaveBeenCalledWith(
'Enabled SBOM generation for Native Image build'
)
expect(spyInfo).toHaveBeenCalledWith('Enabled SBOM generation for Native Image build')
expect(spyWarning).not.toHaveBeenCalled()
})
@@ -154,6 +145,7 @@ describe('sbom feature', () => {
writeFileSync(sbomPath, JSON.stringify(sbom, null, 2))
mockFindSBOM([sbomPath])
jest.spyOn(core, 'getState').mockReturnValue(javaVersion)
await processSBOM()
}
@@ -199,20 +191,18 @@ describe('sbom feature', () => {
]
}
it('should throw an error if setUpSBOMSupport was not called before processSBOM', async () => {
await expect(processSBOM()).rejects.toThrow('setUpSBOMSupport must be called before processSBOM')
})
it('should process SBOM and display components', async () => {
await setUpAndProcessSBOM(sampleSBOM)
expect(spyInfo).toHaveBeenCalledWith(
'Found SBOM: ' + join(workspace, 'test.sbom.json')
)
expect(spyInfo).toHaveBeenCalledWith('Found SBOM: ' + join(workspace, 'test.sbom.json'))
expect(spyInfo).toHaveBeenCalledWith('=== SBOM Content ===')
expect(spyInfo).toHaveBeenCalledWith('- pkg:maven/org.json/json@20241224')
expect(spyInfo).toHaveBeenCalledWith(
'- pkg:maven/com.oracle/main-test-app@1.0-SNAPSHOT'
)
expect(spyInfo).toHaveBeenCalledWith(
' depends on: pkg:maven/org.json/json@20241224'
)
expect(spyInfo).toHaveBeenCalledWith('- pkg:maven/com.oracle/main-test-app@1.0-SNAPSHOT')
expect(spyInfo).toHaveBeenCalledWith(' depends on: pkg:maven/org.json/json@20241224')
expect(spyWarning).not.toHaveBeenCalled()
})
@@ -284,8 +274,7 @@ describe('sbom feature', () => {
dependencies: []
}),
'main-test-app': expect.objectContaining({
package_url:
'pkg:maven/com.oracle/main-test-app@1.0-SNAPSHOT',
package_url: 'pkg:maven/com.oracle/main-test-app@1.0-SNAPSHOT',
dependencies: ['pkg:maven/org.json/json@20241224']
})
})
@@ -293,17 +282,13 @@ describe('sbom feature', () => {
})
})
)
expect(spyInfo).toHaveBeenCalledWith(
'Dependency snapshot submitted successfully.'
)
expect(spyInfo).toHaveBeenCalledWith('Dependency snapshot submitted successfully.')
})
it('should handle GitHub API submission errors gracefully', async () => {
mockGithubAPIReturnValue(new Error('API submission failed'))
await expect(setUpAndProcessSBOM(sampleSBOM)).rejects.toBeInstanceOf(
Error
)
await expect(setUpAndProcessSBOM(sampleSBOM)).rejects.toBeInstanceOf(Error)
})
})
})

View File

@@ -1,5 +1,5 @@
import {expect, test} from '@jest/globals'
import {toSemVer} from '../src/utils'
import { expect, test } from '@jest/globals'
import { toSemVer } from '../src/utils'
test('convert version', async () => {
for (const inputAndExpectedOutput of [

View File

@@ -22,7 +22,8 @@ inputs:
default: ''
github-token:
required: false
description: 'Set it to secrets.GITHUB_TOKEN to increase rate limits when accessing the GitHub API. Defaults to github.token.'
description:
'Set it to secrets.GITHUB_TOKEN to increase rate limits when accessing the GitHub API. Defaults to github.token.'
default: ${{ github.token }}
set-java-home:
required: false
@@ -49,11 +50,14 @@ inputs:
default: 'false'
native-image-pr-reports-update-existing:
required: false
description: 'Instead of posting another comment, update an existing PR comment with the latest Native Image build report.'
description:
'Instead of posting another comment, update an existing PR comment with the latest Native Image build report.'
default: 'false'
native-image-enable-sbom:
required: false
description: 'Automatically generate an SBOM and submit it to the GitHub dependency submission API for vulnerability and dependency tracking.'
description:
'Automatically generate an SBOM and submit it to the GitHub dependency submission API for vulnerability and
dependency tracking.'
default: 'false'
version:
required: false
@@ -61,7 +65,8 @@ inputs:
default: ''
gds-token:
required: false
description: 'Download token for the GraalVM Download Service. If provided, the action will set up GraalVM Enterprise Edition.'
description:
'Download token for the GraalVM Download Service. If provided, the action will set up GraalVM Enterprise Edition.'
outputs:
cache-hit:
description: 'A boolean value to indicate an exact match was found for the primary key'

3604
dist/cleanup/index.js generated vendored

File diff suppressed because it is too large Load Diff

3642
dist/main/index.js generated vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
// See: https://eslint.org/docs/latest/use/configure/configuration-files
import {fixupPluginRules} from '@eslint/compat'
import {FlatCompat} from '@eslint/eslintrc'
import { fixupPluginRules } from '@eslint/compat'
import { FlatCompat } from '@eslint/eslintrc'
import js from '@eslint/js'
import typescriptEslint from '@typescript-eslint/eslint-plugin'
import tsParser from '@typescript-eslint/parser'
@@ -10,7 +10,7 @@ import jest from 'eslint-plugin-jest'
import prettier from 'eslint-plugin-prettier'
import globals from 'globals'
import path from 'node:path'
import {fileURLToPath} from 'node:url'
import { fileURLToPath } from 'node:url'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
@@ -70,7 +70,7 @@ export default [
camelcase: 'off',
'eslint-comments/no-use': 'off',
'eslint-comments/no-unused-disable': 'off',
'@typescript-eslint/no-unused-vars': ['error', {argsIgnorePattern: '^_'}],
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'i18n-text/no-en': 'off',
'import/no-namespace': 'off',
'no-console': 'off',

View File

@@ -1,5 +1,10 @@
module.exports = {
clearMocks: true,
collectCoverage: true,
collectCoverageFrom: ['./src/**'],
coverageDirectory: './coverage',
coveragePathIgnorePatterns: ['/node_modules/', '/dist/'],
coverageReporters: ['json-summary', 'text', 'lcov'],
moduleFileExtensions: ['js', 'ts'],
testMatch: ['**/*.test.ts'],
transform: {

2810
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,67 +1,74 @@
{
"name": "setup-graalvm",
"version": "1.2.8",
"private": true,
"author": "GraalVM Community",
"description": "GitHub Action for GraalVM",
"main": "lib/main.js",
"scripts": {
"bundle": "npm run format:write && npm run package",
"format:write": "npx prettier --write .",
"format:check": "npx prettier --check .",
"lint": "npx eslint .",
"package": "ncc build -o dist/main src/main.ts && ncc build -o dist/cleanup src/cleanup.ts",
"test": "npx jest",
"all": "npm run format:write && npm run lint && npm run test && npm run package"
},
"version": "1.3.5",
"private": true,
"repository": {
"type": "git",
"url": "git+https://github.com/graalvm/setup-graalvm.git"
},
"bugs": {
"url": "https://github.com/graalvm/setup-graalvm/issues"
},
"keywords": [
"graalvm",
"native image",
"actions",
"setup"
],
"author": "GraalVM Community",
"engines": {
"node": ">=20"
},
"scripts": {
"bundle": "npm run format:write && npm run package",
"format:write": "npx prettier --write .",
"format:check": "npx prettier --check .",
"lint": "npx eslint .",
"package": "npm run package:main && npm run package:cleanup",
"package:main": "npx ncc build src/main.ts -o dist/main",
"package:cleanup": "npx ncc build src/cleanup.ts -o dist/cleanup",
"test": "npx jest",
"all": "npm run format:write && npm run lint && npm run test && npm run package"
},
"license": "UPL",
"dependencies": {
"@actions/cache": "^4.0.0",
"@actions/cache": "^4.0.3",
"@actions/core": "^1.11.1",
"@actions/exec": "^1.1.1",
"@actions/github": "^6.0.0",
"@actions/github": "^6.0.1",
"@actions/glob": "^0.5.0",
"@actions/http-client": "^2.2.3",
"@actions/io": "^1.1.3",
"@actions/tool-cache": "^2.0.2",
"@octokit/core": "^5.2.0",
"@octokit/types": "^12.6.0",
"@github/dependency-submission-toolkit": "^2.0.4",
"semver": "^7.6.3",
"uuid": "^11.0.5"
"@octokit/types": "^14.1.0",
"@github/dependency-submission-toolkit": "^2.0.5",
"semver": "^7.7.2",
"uuid": "^11.1.0"
},
"devDependencies": {
"@eslint/compat": "^1.2.5",
"@eslint/compat": "^1.3.1",
"@types/jest": "^29.5.14",
"@types/node": "^20.17.12",
"@types/semver": "^7.5.8",
"@types/node": "^20.19.4",
"@types/semver": "^7.7.0",
"@types/uuid": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^8.19.1",
"@typescript-eslint/parser": "^8.19.1",
"@typescript-eslint/eslint-plugin": "^8.35.1",
"@typescript-eslint/parser": "^8.31.1",
"@vercel/ncc": "^0.38.3",
"eslint": "^9.18.0",
"eslint-config-prettier": "^9.1.0",
"eslint-import-resolver-typescript": "^3.6.3",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.10.0",
"eslint-plugin-jsonc": "^2.18.2",
"eslint": "^9.30.1",
"eslint-config-prettier": "^10.1.5",
"eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jest": "^29.0.1",
"eslint-plugin-jsonc": "^2.20.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.2.3",
"eslint-plugin-prettier": "^5.5.1",
"jest": "^29.7.0",
"js-yaml": "^4.1.0",
"prettier": "^3.4.2",
"prettier-eslint": "^16.3.0",
"ts-jest": "^29.2.5",
"typescript": "^5.7.3"
"prettier": "^3.6.2",
"prettier-eslint": "^16.4.2",
"ts-jest": "^29.4.0",
"ts-node": "^10.9.2",
"typescript": "^5.8.3"
}
}

View File

@@ -26,9 +26,9 @@
import * as core from '@actions/core'
import * as constants from './constants'
import {save} from './features/cache'
import {generateReports} from './features/reports'
import {processSBOM} from './features/sbom'
import { save } from './features/cache'
import { generateReports } from './features/reports'
import { processSBOM } from './features/sbom'
/**
* Check given input and run a save process for the specified package manager
@@ -46,9 +46,9 @@ async function saveCache(): Promise<void> {
* @returns Promise that will ignore error reported by the given promise
*/
async function ignoreErrors(promise: Promise<void>): Promise<unknown> {
return new Promise(resolve => {
return new Promise((resolve) => {
promise
.catch(error => {
.catch((error) => {
core.warning(error)
resolve(void 0)
})
@@ -62,9 +62,4 @@ export async function run(): Promise<void> {
await ignoreErrors(saveCache())
}
if (require.main === module) {
run()
} else {
// https://nodejs.org/api/modules.html#modules_accessing_the_main_module
core.info('the script is loaded as a module, so skipping the execution')
}
run()

View File

@@ -1,6 +1,6 @@
import * as otypes from '@octokit/types'
export const ACTION_VERSION = '1.2.8'
export const ACTION_VERSION = '1.3.5'
export const INPUT_VERSION = 'version'
export const INPUT_GDS_TOKEN = 'gds-token'
@@ -48,23 +48,18 @@ export const GDS_GRAALVM_PRODUCT_ID = 'D53FAE8052773FFAE0530F15000AA6C6'
export const ENV_GITHUB_EVENT_NAME = 'GITHUB_EVENT_NAME'
export const EVENT_NAME_PULL_REQUEST = 'pull_request'
export const ERROR_REQUEST =
'Please file an issue at: https://github.com/graalvm/setup-graalvm/issues.'
export const ERROR_REQUEST = 'Please file an issue at: https://github.com/graalvm/setup-graalvm/issues.'
export const ERROR_HINT =
'If you think this is a mistake, please file an issue at: https://github.com/graalvm/setup-graalvm/issues.'
export type LatestReleaseResponse =
otypes.Endpoints['GET /repos/{owner}/{repo}/releases/latest']['response']
export type LatestReleaseResponse = otypes.Endpoints['GET /repos/{owner}/{repo}/releases/latest']['response']
export type MatchingRefsResponse =
otypes.Endpoints['GET /repos/{owner}/{repo}/git/matching-refs/{ref}']['response']
export type MatchingRefsResponse = otypes.Endpoints['GET /repos/{owner}/{repo}/git/matching-refs/{ref}']['response']
export type ReleasesResponse =
otypes.Endpoints['GET /repos/{owner}/{repo}/releases']['response']
export type ReleasesResponse = otypes.Endpoints['GET /repos/{owner}/{repo}/releases']['response']
export type ContentsResponse =
otypes.Endpoints['GET /repos/{owner}/{repo}/contents/{path}']['response']
export type ContentsResponse = otypes.Endpoints['GET /repos/{owner}/{repo}/contents/{path}']['response']
export interface OracleGraalVMEAFile {
filename: string

View File

@@ -1,6 +1,6 @@
import * as core from '@actions/core'
import {GRAALVM_PLATFORM} from './constants'
import {exec} from './utils'
import { GRAALVM_PLATFORM } from './constants'
import { exec } from './utils'
const APT_GET_INSTALL_BASE = 'sudo apt-get -y --no-upgrade install'
const COMPONENT_TO_DEPS = new Map<string, Map<string, string>>([
@@ -9,10 +9,7 @@ const COMPONENT_TO_DEPS = new Map<string, Map<string, string>>([
new Map<string, string>([
['nodejs', `${APT_GET_INSTALL_BASE} g++ make`],
['ruby', `${APT_GET_INSTALL_BASE} make gcc libssl-dev libz-dev`],
[
'R',
`${APT_GET_INSTALL_BASE} libgomp1 build-essential gfortran libxml2 libc++-dev`
]
['R', `${APT_GET_INSTALL_BASE} libgomp1 build-essential gfortran libxml2 libc++-dev`]
])
],
['darwin', new Map<string, string>([['ruby', 'brew install openssl']])]

View File

@@ -26,7 +26,7 @@
* @fileoverview this file provides methods handling dependency cache
*/
import {join} from 'path'
import { join } from 'path'
import os from 'os'
import * as cache from '@actions/cache'
import * as core from '@actions/core'
@@ -53,17 +53,9 @@ const supportedPackageManager: PackageManager[] = [
},
{
id: 'gradle',
path: [
join(os.homedir(), '.gradle', 'caches'),
join(os.homedir(), '.gradle', 'wrapper')
],
path: [join(os.homedir(), '.gradle', 'caches'), join(os.homedir(), '.gradle', 'wrapper')],
// https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle
pattern: [
'**/*.gradle*',
'**/gradle-wrapper.properties',
'buildSrc/**/Versions.kt',
'buildSrc/**/Dependencies.kt'
]
pattern: ['**/*.gradle*', '**/gradle-wrapper.properties', 'buildSrc/**/Versions.kt', 'buildSrc/**/Dependencies.kt']
},
{
id: 'sbt',
@@ -76,23 +68,18 @@ const supportedPackageManager: PackageManager[] = [
`!${join(os.homedir(), '.sbt', '*.lock')}`,
`!${join(os.homedir(), '**', 'ivydata-*.properties')}`
],
pattern: [
'**/*.sbt',
'**/project/build.properties',
'**/project/**.{scala,sbt}'
]
pattern: ['**/*.sbt', '**/project/build.properties', '**/project/**.{scala,sbt}']
}
]
function getCoursierCachePath(): string {
if (os.type() === 'Linux') return join(os.homedir(), '.cache', 'coursier')
if (os.type() === 'Darwin')
return join(os.homedir(), 'Library', 'Caches', 'Coursier')
if (os.type() === 'Darwin') return join(os.homedir(), 'Library', 'Caches', 'Coursier')
return join(os.homedir(), 'AppData', 'Local', 'Coursier', 'Cache')
}
function findPackageManager(id: string): PackageManager {
const packageManager = supportedPackageManager.find(pm => pm.id === id)
const packageManager = supportedPackageManager.find((pm) => pm.id === id)
if (packageManager === undefined) {
throw new Error(`unknown package manager specified: ${id}`)
}
@@ -105,9 +92,7 @@ function findPackageManager(id: string): PackageManager {
* If there is no file matched to {@link PackageManager.path}, the generated key ends with a dash (-).
* @see {@link https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key|spec of cache key}
*/
async function computeCacheKey(
packageManager: PackageManager
): Promise<string> {
async function computeCacheKey(packageManager: PackageManager): Promise<string> {
const hash = await glob.hashFiles(packageManager.pattern.join('\n'))
return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${hash}`
}
@@ -158,9 +143,7 @@ export async function save(id: string): Promise<void> {
return
} else if (matchedKey === primaryKey) {
// no change in target directories
core.info(
`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`
)
core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`)
return
}
try {
@@ -190,14 +173,8 @@ export async function save(id: string): Promise<void> {
* @returns true if the given error seems related to the {@link https://github.com/actions/cache/issues/454|running Gradle Daemon issue}.
* @see {@link https://github.com/actions/cache/issues/454#issuecomment-840493935|why --no-daemon is necessary}
*/
function isProbablyGradleDaemonProblem(
packageManager: PackageManager,
error: Error
): boolean {
if (
packageManager.id !== 'gradle' ||
process.env['RUNNER_OS'] !== 'Windows'
) {
function isProbablyGradleDaemonProblem(packageManager: PackageManager, error: Error): boolean {
if (packageManager.id !== 'gradle' || process.env['RUNNER_OS'] !== 'Windows') {
return false
}
const message = error.message || ''

View File

@@ -1,19 +1,13 @@
import * as core from '@actions/core'
export function checkForUpdates(
graalVMVersion: string,
javaVersion: string
): void {
export function checkForUpdates(graalVMVersion: string, javaVersion: string): void {
if (javaVersion === '20') {
core.notice(
'A new GraalVM release is available! Please consider upgrading to GraalVM for JDK 21: https://medium.com/graalvm/graalvm-for-jdk-21-is-here-ee01177dd12d'
)
return
}
if (
graalVMVersion.length > 0 &&
(javaVersion === '17' || javaVersion === '19')
) {
if (graalVMVersion.length > 0 && (javaVersion === '17' || javaVersion === '19')) {
const recommendedJDK = javaVersion === '17' ? '17' : '21'
core.notice(
`A new GraalVM release is available! Please consider upgrading to GraalVM for JDK ${recommendedJDK}. Instructions: https://github.com/graalvm/setup-graalvm#migrating-from-graalvm-223-or-earlier-to-the-new-graalvm-for-jdk-17-and-later`

View File

@@ -1,8 +1,8 @@
import * as c from '../constants'
import * as core from '@actions/core'
import * as tc from '@actions/tool-cache'
import {exec} from '../utils'
import {join} from 'path'
import { exec } from '../utils'
import { join } from 'path'
const MUSL_NAME = 'x86_64-linux-musl-native'
const MUSL_VERSION = '10.2.1'
@@ -24,9 +24,7 @@ export async function setUpNativeImageMusl(): Promise<void> {
const muslPath = join(muslExtractPath, MUSL_NAME)
const zlibCommit = 'ec3df00224d4b396e2ac6586ab5d25f673caa4c2'
const zlibDownloadPath = await tc.downloadTool(
`https://github.com/madler/zlib/archive/${zlibCommit}.tar.gz`
)
const zlibDownloadPath = await tc.downloadTool(`https://github.com/madler/zlib/archive/${zlibCommit}.tar.gz`)
const zlibExtractPath = await tc.extractTar(zlibDownloadPath)
const zlibPath = join(zlibExtractPath, `zlib-${zlibCommit}`)
const zlibBuildOptions = {
@@ -36,13 +34,9 @@ export async function setUpNativeImageMusl(): Promise<void> {
CC: join(muslPath, 'bin', 'gcc')
}
}
await exec(
'./configure',
[`--prefix=${muslPath}`, '--static'],
zlibBuildOptions
)
await exec('./configure', [`--prefix=${muslPath}`, '--static'], zlibBuildOptions)
await exec('make', [], zlibBuildOptions)
await exec('make', ['install'], {cwd: zlibPath})
await exec('make', ['install'], { cwd: zlibPath })
core.info(`Adding ${MUSL_NAME} ${MUSL_VERSION} to tool-cache ...`)
toolPath = await tc.cacheDir(muslPath, MUSL_NAME, MUSL_VERSION)

View File

@@ -17,8 +17,7 @@ const BUILD_OUTPUT_JSON_PATH = tmpfile('native-image-build-output.json')
const BYTES_TO_KiB = 1024
const BYTES_TO_MiB = 1024 * 1024
const BYTES_TO_GiB = 1024 * 1024 * 1024
const DOCS_BASE =
'https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md'
const DOCS_BASE = 'https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md'
const INPUT_NI_JOB_REPORTS = 'native-image-job-reports'
const INPUT_NI_PR_REPORTS = 'native-image-pr-reports'
const INPUT_NI_PR_REPORTS_UPDATE = 'native-image-pr-reports-update-existing'
@@ -105,18 +104,14 @@ export async function setUpNativeImageBuildReports(
isGraalVMforJDK17OrLater ||
graalVMVersion === c.VERSION_LATEST ||
graalVMVersion === c.VERSION_DEV ||
(!graalVMVersion.startsWith(c.MANDREL_NAMESPACE) &&
semver.gte(toSemVer(graalVMVersion), '22.2.0'))
(!graalVMVersion.startsWith(c.MANDREL_NAMESPACE) && semver.gte(toSemVer(graalVMVersion), '22.2.0'))
if (!isSupported) {
core.warning(
`Build reports for PRs and job summaries are only available in GraalVM 22.2.0 or later. This build job uses GraalVM ${graalVMVersion}.`
)
return
}
setNativeImageOption(
javaVersionOrDev,
`-H:BuildOutputJSONFile=${BUILD_OUTPUT_JSON_PATH.replace(/\\/g, '\\\\')}`
) // Escape backslashes for Windows
setNativeImageOption(javaVersionOrDev, `-H:BuildOutputJSONFile=${BUILD_OUTPUT_JSON_PATH.replace(/\\/g, '\\\\')}`) // Escape backslashes for Windows
}
export async function generateReports(): Promise<void> {
@@ -127,9 +122,7 @@ export async function generateReports(): Promise<void> {
)
return
}
const buildOutput: BuildOutput = JSON.parse(
fs.readFileSync(BUILD_OUTPUT_JSON_PATH, 'utf8')
)
const buildOutput: BuildOutput = JSON.parse(fs.readFileSync(BUILD_OUTPUT_JSON_PATH, 'utf8'))
const report = createReport(buildOutput)
if (areJobReportsEnabled()) {
core.summary.addRaw(report)
@@ -144,9 +137,7 @@ export async function generateReports(): Promise<void> {
}
return createPRComment(report)
} else if (arePRReportsUpdateEnabled()) {
throw new Error(
`'${INPUT_NI_PR_REPORTS_UPDATE}' option requires '${INPUT_NI_PR_REPORTS}' to be set 'true'`
)
throw new Error(`'${INPUT_NI_PR_REPORTS_UPDATE}' option requires '${INPUT_NI_PR_REPORTS}' to be set 'true'`)
}
}
}
@@ -174,11 +165,7 @@ function createReport(data: BuildOutput): string {
objectCount = `${details.image_heap.objects.count.toLocaleString()} objects, `
}
const debugInfoBytes = details.debug_info ? details.debug_info.bytes : 0
const otherBytes =
details.total_bytes -
details.code_area.bytes -
details.image_heap.bytes -
debugInfoBytes
const otherBytes = details.total_bytes - details.code_area.bytes - details.image_heap.bytes - debugInfoBytes
let debugInfoLine = ''
if (details.debug_info) {
debugInfoLine = `
@@ -210,8 +197,7 @@ function createReport(data: BuildOutput): string {
let graalLine
if (info.graal_compiler) {
let pgoSuffix = ''
const isOracleGraalVM =
info.vendor_version && info.vendor_version.includes('Oracle GraalVM')
const isOracleGraalVM = info.vendor_version && info.vendor_version.includes('Oracle GraalVM')
if (isOracleGraalVM) {
const pgo = info.graal_compiler.pgo
const pgoText = pgo ? pgo.join('+') : 'off'
@@ -233,10 +219,7 @@ function createReport(data: BuildOutput): string {
let gcTotalTimeRatio = ''
if (resources.total_secs) {
totalTime = ` in ${secondsToHuman(resources.total_secs)}`
gcTotalTimeRatio = ` (${toPercent(
resources.garbage_collection.total_secs,
resources.total_secs
)} of total time)`
gcTotalTimeRatio = ` (${toPercent(resources.garbage_collection.total_secs, resources.total_secs)} of total time)`
}
return `${PR_COMMENT_TITLE}
@@ -278,56 +261,29 @@ function createReport(data: BuildOutput): string {
<tr>
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Reachable</a></td>
<td align="right">${analysisTypes.reachable.toLocaleString()}</td>
<td align="right">${toPercent(
analysisTypes.reachable,
analysisTypes.total
)}</td>
<td align="right">${toPercent(analysisTypes.reachable, analysisTypes.total)}</td>
<td align="right">${analysis.fields.reachable.toLocaleString()}</td>
<td align="right">${toPercent(
analysis.fields.reachable,
analysis.fields.total
)}</td>
<td align="right">${toPercent(analysis.fields.reachable, analysis.fields.total)}</td>
<td align="right">${analysis.methods.reachable.toLocaleString()}</td>
<td align="right">${toPercent(
analysis.methods.reachable,
analysis.methods.total
)}</td>
<td align="right">${toPercent(analysis.methods.reachable, analysis.methods.total)}</td>
</tr>
<tr>
<td align="left"><a href="${DOCS_BASE}#glossary-reflection-registrations" target="_blank">Reflection</a></td>
<td align="right">${analysisTypes.reflection.toLocaleString()}</td>
<td align="right">${toPercent(
analysisTypes.reflection,
analysisTypes.total
)}</td>
<td align="right">${toPercent(analysisTypes.reflection, analysisTypes.total)}</td>
<td align="right">${analysis.fields.reflection.toLocaleString()}</td>
<td align="right">${toPercent(
analysis.fields.reflection,
analysis.fields.total
)}</td>
<td align="right">${toPercent(analysis.fields.reflection, analysis.fields.total)}</td>
<td align="right">${analysis.methods.reflection.toLocaleString()}</td>
<td align="right">${toPercent(
analysis.methods.reflection,
analysis.methods.total
)}</td>
<td align="right">${toPercent(analysis.methods.reflection, analysis.methods.total)}</td>
</tr>
<tr>
<td align="left"><a href="${DOCS_BASE}#glossary-jni-access-registrations" target="_blank">JNI</a></td>
<td align="right">${analysisTypes.jni.toLocaleString()}</td>
<td align="right">${toPercent(
analysisTypes.jni,
analysisTypes.total
)}</td>
<td align="right">${toPercent(analysisTypes.jni, analysisTypes.total)}</td>
<td align="right">${analysis.fields.jni.toLocaleString()}</td>
<td align="right">${toPercent(
analysis.fields.jni,
analysis.fields.total
)}</td>
<td align="right">${toPercent(analysis.fields.jni, analysis.fields.total)}</td>
<td align="right">${analysis.methods.jni.toLocaleString()}</td>
<td align="right">${toPercent(
analysis.methods.jni,
analysis.methods.total
)}</td>
<td align="right">${toPercent(analysis.methods.jni, analysis.methods.total)}</td>
</tr>
<tr>
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Loaded</a></td>
@@ -356,19 +312,13 @@ function createReport(data: BuildOutput): string {
<tr>
<td align="left"><a href="${DOCS_BASE}#glossary-code-area" target="_blank">Code area</a></td>
<td align="right">${bytesToHuman(details.code_area.bytes)}</td>
<td align="right">${toPercent(
details.code_area.bytes,
details.total_bytes
)}</td>
<td align="right">${toPercent(details.code_area.bytes, details.total_bytes)}</td>
<td align="left">${details.code_area.compilation_units.toLocaleString()} compilation units</td>
</tr>
<tr>
<td align="left"><a href="${DOCS_BASE}#glossary-image-heap" target="_blank">Image heap</a></td>
<td align="right">${bytesToHuman(details.image_heap.bytes)}</td>
<td align="right">${toPercent(
details.image_heap.bytes,
details.total_bytes
)}</td>
<td align="right">${toPercent(details.image_heap.bytes, details.total_bytes)}</td>
<td align="left">${objectCount}${bytesToHuman(
details.image_heap.resources.bytes
)} for ${details.image_heap.resources.count.toLocaleString()} resources</td>
@@ -381,9 +331,7 @@ function createReport(data: BuildOutput): string {
</tr>
<tr>
<td align="left">Total</td>
<td align="right"><strong>${bytesToHuman(
details.total_bytes
)}</strong></td>
<td align="right"><strong>${bytesToHuman(details.total_bytes)}</strong></td>
<td align="right">100.000%</td>
<td align="left"></td>
</tr>
@@ -402,9 +350,7 @@ function createReport(data: BuildOutput): string {
</tr>
<tr>
<td align="left"><a href="${DOCS_BASE}#glossary-peak-rss" target="_blank">Peak RSS</a></td>
<td align="left">${bytesToHuman(
resources.memory.peak_rss_bytes
)} (${toPercent(
<td align="left">${bytesToHuman(resources.memory.peak_rss_bytes)} (${toPercent(
resources.memory.peak_rss_bytes,
resources.memory.system_total
)} of ${bytesToHuman(resources.memory.system_total)} system memory)</td>

View File

@@ -3,15 +3,14 @@ import * as core from '@actions/core'
import * as fs from 'fs'
import * as github from '@actions/github'
import * as glob from '@actions/glob'
import {basename} from 'path'
import { basename } from 'path'
import * as semver from 'semver'
import {setNativeImageOption} from '../utils'
import { setNativeImageOption } from '../utils'
const INPUT_NI_SBOM = 'native-image-enable-sbom'
const SBOM_FILE_SUFFIX = '.sbom.json'
const MIN_JAVA_VERSION = '24.0.0'
let javaVersionOrLatestEA: string | null = null
const javaVersionKey = 'javaVersionKey'
interface SBOM {
components: Component[]
@@ -67,44 +66,36 @@ interface DependencySnapshot {
>
}
export function setUpSBOMSupport(
javaVersionOrDev: string,
distribution: string
): void {
export function setUpSBOMSupport(javaVersion: string, distribution: string): void {
if (!isFeatureEnabled()) {
return
}
validateJavaVersionAndDistribution(javaVersionOrDev, distribution)
javaVersionOrLatestEA = javaVersionOrDev
setNativeImageOption(javaVersionOrLatestEA, '--enable-sbom=export')
validateJavaVersionAndDistribution(javaVersion, distribution)
core.saveState(javaVersionKey, javaVersion)
setNativeImageOption(javaVersion, '--enable-sbom=export')
core.info('Enabled SBOM generation for Native Image build')
}
function validateJavaVersionAndDistribution(
javaVersionOrDev: string,
distribution: string
): void {
function validateJavaVersionAndDistribution(javaVersion: string, distribution: string): void {
if (distribution !== c.DISTRIBUTION_GRAALVM) {
throw new Error(
`The '${INPUT_NI_SBOM}' option is only supported for Oracle GraalVM (distribution '${c.DISTRIBUTION_GRAALVM}'), but found distribution '${distribution}'.`
)
}
if (javaVersionOrDev === 'dev') {
throw new Error(
`The '${INPUT_NI_SBOM}' option is not supported for java-version 'dev'.`
)
if (javaVersion === 'dev') {
throw new Error(`The '${INPUT_NI_SBOM}' option is not supported for java-version 'dev'.`)
}
if (javaVersionOrDev === 'latest-ea') {
if (javaVersion === 'latest-ea') {
return
}
const coercedJavaVersion = semver.coerce(javaVersionOrDev)
const coercedJavaVersion = semver.coerce(javaVersion)
if (!coercedJavaVersion || semver.gt(MIN_JAVA_VERSION, coercedJavaVersion)) {
throw new Error(
`The '${INPUT_NI_SBOM}' option is only supported for GraalVM for JDK ${MIN_JAVA_VERSION} or later, but found java-version '${javaVersionOrDev}'.`
`The '${INPUT_NI_SBOM}' option is only supported for GraalVM for JDK ${MIN_JAVA_VERSION} or later, but found java-version '${javaVersion}'.`
)
}
}
@@ -114,7 +105,8 @@ export async function processSBOM(): Promise<void> {
return
}
if (javaVersionOrLatestEA === null) {
const javaVersion = core.getState(javaVersionKey)
if (!javaVersion) {
throw new Error('setUpSBOMSupport must be called before processSBOM')
}
@@ -124,7 +116,7 @@ export async function processSBOM(): Promise<void> {
const sbomData = parseSBOM(sbomContent)
const components = mapToComponentsWithDependencies(sbomData)
printSBOMContent(components)
const snapshot = convertSBOMToSnapshot(sbomPath, components)
const snapshot = convertSBOMToSnapshot(javaVersion, sbomPath, components)
await submitDependencySnapshot(snapshot)
} catch (error) {
throw new Error(
@@ -142,15 +134,11 @@ async function findSBOMFilePath(): Promise<string> {
const sbomFiles = await globber.glob()
if (sbomFiles.length === 0) {
throw new Error(
'No SBOM found. Make sure native-image build completed successfully.'
)
throw new Error('No SBOM found. Make sure native-image build completed successfully.')
}
if (sbomFiles.length > 1) {
throw new Error(
`Expected one SBOM but found multiple: ${sbomFiles.join(', ')}.`
)
throw new Error(`Expected one SBOM but found multiple: ${sbomFiles.join(', ')}.`)
}
core.info(`Found SBOM: ${sbomFiles[0]}`)
@@ -162,9 +150,7 @@ function parseSBOM(jsonString: string): SBOM {
const sbomData: SBOM = JSON.parse(jsonString)
return sbomData
} catch (error) {
throw new Error(
`Failed to parse SBOM JSON: ${error instanceof Error ? error.message : String(error)}`
)
throw new Error(`Failed to parse SBOM JSON: ${error instanceof Error ? error.message : String(error)}`)
}
}
@@ -175,10 +161,7 @@ function mapToComponentsWithDependencies(sbom: SBOM): Component[] {
}
return sbom.components.map((component: Component) => {
const dependencies =
sbom.dependencies?.find(
(dep: Dependency) => dep.ref === component['bom-ref']
)?.dependsOn || []
const dependencies = sbom.dependencies?.find((dep: Dependency) => dep.ref === component['bom-ref'])?.dependsOn || []
return {
name: component.name,
@@ -201,17 +184,12 @@ function printSBOMContent(components: Component[]): void {
core.info('==================')
}
function convertSBOMToSnapshot(
sbomPath: string,
components: Component[]
): DependencySnapshot {
function convertSBOMToSnapshot(javaVersion: string, sbomPath: string, components: Component[]): DependencySnapshot {
const context = github.context
const sbomFileName = basename(sbomPath)
if (!sbomFileName.endsWith(SBOM_FILE_SUFFIX)) {
throw new Error(
`Invalid SBOM file name: ${sbomFileName}. Expected a file ending with ${SBOM_FILE_SUFFIX}.`
)
throw new Error(`Invalid SBOM file name: ${sbomFileName}. Expected a file ending with ${SBOM_FILE_SUFFIX}.`)
}
return {
@@ -225,7 +203,7 @@ function convertSBOMToSnapshot(
},
detector: {
name: 'Oracle GraalVM',
version: javaVersionOrLatestEA ?? '',
version: javaVersion,
url: 'https://www.graalvm.org/'
},
scanned: new Date().toISOString(),
@@ -244,18 +222,16 @@ function convertSBOMToSnapshot(
function mapComponentsToGithubAPIFormat(
components: Component[]
): Record<string, {package_url: string; dependencies?: string[]}> {
): Record<string, { package_url: string; dependencies?: string[] }> {
return Object.fromEntries(
components
.filter(component => {
.filter((component) => {
if (!component.purl) {
core.info(
`Component ${component.name} does not have a valid package URL (purl). Skipping.`
)
core.info(`Component ${component.name} does not have a valid package URL (purl). Skipping.`)
}
return component.purl
})
.map(component => [
.map((component) => [
component.name,
{
package_url: component.purl as string,
@@ -265,32 +241,27 @@ function mapComponentsToGithubAPIFormat(
)
}
async function submitDependencySnapshot(
snapshotData: DependencySnapshot
): Promise<void> {
const token = core.getInput(c.INPUT_GITHUB_TOKEN, {required: true})
async function submitDependencySnapshot(snapshotData: DependencySnapshot): Promise<void> {
const token = core.getInput(c.INPUT_GITHUB_TOKEN, { required: true })
const octokit = github.getOctokit(token)
const context = github.context
try {
await octokit.request(
'POST /repos/{owner}/{repo}/dependency-graph/snapshots',
{
owner: context.repo.owner,
repo: context.repo.repo,
version: snapshotData.version,
sha: snapshotData.sha,
ref: snapshotData.ref,
job: snapshotData.job,
detector: snapshotData.detector,
metadata: {},
scanned: snapshotData.scanned,
manifests: snapshotData.manifests,
headers: {
'X-GitHub-Api-Version': '2022-11-28'
}
await octokit.request('POST /repos/{owner}/{repo}/dependency-graph/snapshots', {
owner: context.repo.owner,
repo: context.repo.repo,
version: snapshotData.version,
sha: snapshotData.sha,
ref: snapshotData.ref,
job: snapshotData.job,
detector: snapshotData.detector,
metadata: {},
scanned: snapshotData.scanned,
manifests: snapshotData.manifests,
headers: {
'X-GitHub-Api-Version': '2022-11-28'
}
)
})
core.info('Dependency snapshot submitted successfully.')
} catch (error) {
throw new Error(

View File

@@ -7,11 +7,11 @@ import * as path from 'path'
import * as stream from 'stream'
import * as util from 'util'
import * as semver from 'semver'
import {IncomingHttpHeaders, OutgoingHttpHeaders} from 'http'
import {RetryHelper} from '@actions/tool-cache/lib/retry-helper'
import {calculateSHA256} from './utils'
import {ok} from 'assert'
import {v4 as uuidv4} from 'uuid'
import { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http'
import { RetryHelper } from '@actions/tool-cache/lib/retry-helper'
import { calculateSHA256 } from './utils'
import { ok } from 'assert'
import { v4 as uuidv4 } from 'uuid'
interface GDSArtifactsResponse {
readonly items: GDSArtifact[]
@@ -27,39 +27,19 @@ interface GDSErrorResponse {
readonly message: string
}
export async function downloadGraalVM(
gdsToken: string,
javaVersion: string
): Promise<string> {
export async function downloadGraalVM(gdsToken: string, javaVersion: string): Promise<string> {
const userAgent = `GraalVMGitHubAction/${c.ACTION_VERSION} (arch:${c.GRAALVM_ARCH}; os:${c.GRAALVM_PLATFORM}; java:${javaVersion})`
const baseArtifact = await fetchArtifact(
userAgent,
'isBase:True',
javaVersion
)
const baseArtifact = await fetchArtifact(userAgent, 'isBase:True', javaVersion)
return downloadArtifact(gdsToken, userAgent, baseArtifact)
}
export async function downloadGraalVMEELegacy(
gdsToken: string,
version: string,
javaVersion: string
): Promise<string> {
export async function downloadGraalVMEELegacy(gdsToken: string, version: string, javaVersion: string): Promise<string> {
const userAgent = `GraalVMGitHubAction/${c.ACTION_VERSION} (arch:${c.GRAALVM_ARCH}; os:${c.GRAALVM_PLATFORM}; java:${javaVersion})`
const baseArtifact = await fetchArtifactEE(
userAgent,
'isBase:True',
version,
javaVersion
)
const baseArtifact = await fetchArtifactEE(userAgent, 'isBase:True', version, javaVersion)
return downloadArtifact(gdsToken, userAgent, baseArtifact)
}
export async function fetchArtifact(
userAgent: string,
metadata: string,
javaVersion: string
): Promise<GDSArtifact> {
export async function fetchArtifact(userAgent: string, metadata: string, javaVersion: string): Promise<GDSArtifact> {
const http = new httpClient.HttpClient(userAgent)
let filter
@@ -79,15 +59,13 @@ export async function fetchArtifact(
const catalogOS = c.IS_MACOS ? 'macos' : c.GRAALVM_PLATFORM
const requestUrl = `${c.GDS_BASE}/artifacts?productId=${c.GDS_GRAALVM_PRODUCT_ID}&displayName=Oracle%20GraalVM&${filter}&metadata=java:jdk${majorJavaVersion}&metadata=os:${catalogOS}&metadata=arch:${c.GRAALVM_ARCH}&metadata=${metadata}&status=PUBLISHED&responseFields=id&responseFields=checksum`
core.debug(`Requesting ${requestUrl}`)
const response = await http.get(requestUrl, {accept: 'application/json'})
const response = await http.get(requestUrl, { accept: 'application/json' })
if (response.message.statusCode !== 200) {
throw new Error(
`Unable to find GraalVM for JDK ${javaVersion}. Are you sure java-version: '${javaVersion}' is correct?`
)
}
const artifactResponse = JSON.parse(
await response.readBody()
) as GDSArtifactsResponse
const artifactResponse = JSON.parse(await response.readBody()) as GDSArtifactsResponse
if (artifactResponse.items.length !== 1) {
throw new Error(
artifactResponse.items.length > 1
@@ -116,15 +94,11 @@ export async function fetchArtifactEE(
const catalogOS = c.IS_MACOS ? 'macos' : c.GRAALVM_PLATFORM
const requestUrl = `${c.GDS_BASE}/artifacts?productId=${c.GDS_GRAALVM_PRODUCT_ID}&${filter}&metadata=java:jdk${javaVersion}&metadata=os:${catalogOS}&metadata=arch:${c.GRAALVM_ARCH}&metadata=${metadata}&status=PUBLISHED&responseFields=id&responseFields=checksum`
core.debug(`Requesting ${requestUrl}`)
const response = await http.get(requestUrl, {accept: 'application/json'})
const response = await http.get(requestUrl, { accept: 'application/json' })
if (response.message.statusCode !== 200) {
throw new Error(
`Unable to find JDK${javaVersion}-based GraalVM EE ${version}`
)
throw new Error(`Unable to find JDK${javaVersion}-based GraalVM EE ${version}`)
}
const artifactResponse = JSON.parse(
await response.readBody()
) as GDSArtifactsResponse
const artifactResponse = JSON.parse(await response.readBody()) as GDSArtifactsResponse
if (artifactResponse.items.length !== 1) {
throw new Error(
artifactResponse.items.length > 1
@@ -135,21 +109,13 @@ export async function fetchArtifactEE(
return artifactResponse.items[0]
}
async function downloadArtifact(
gdsToken: string,
userAgent: string,
artifact: GDSArtifact
): Promise<string> {
async function downloadArtifact(gdsToken: string, userAgent: string, artifact: GDSArtifact): Promise<string> {
let downloadPath
try {
downloadPath = await downloadTool(
`${c.GDS_BASE}/artifacts/${artifact.id}/content`,
userAgent,
{
accept: 'application/x-yaml',
'x-download-token': gdsToken
}
)
downloadPath = await downloadTool(`${c.GDS_BASE}/artifacts/${artifact.id}/content`, userAgent, {
accept: 'application/x-yaml',
'x-download-token': gdsToken
})
} catch (err) {
if (err instanceof HTTPError && err.httpStatusCode) {
if (err.httpStatusCode === 401) {
@@ -162,9 +128,7 @@ async function downloadArtifact(
}
const sha256 = calculateSHA256(downloadPath)
if (sha256.toLowerCase() !== artifact.checksum.toLowerCase()) {
throw new Error(
`Checksum does not match (expected: "${artifact.checksum}", got: "${sha256}")`
)
throw new Error(`Checksum does not match (expected: "${artifact.checksum}", got: "${sha256}")`)
}
return downloadPath
}
@@ -185,11 +149,7 @@ class HTTPError extends Error {
}
}
async function downloadTool(
url: string,
userAgent: string,
headers?: OutgoingHttpHeaders
): Promise<string> {
async function downloadTool(url: string, userAgent: string, headers?: OutgoingHttpHeaders): Promise<string> {
const dest = path.join(getTempDirectory(), uuidv4())
await io.mkdirP(path.dirname(dest))
core.debug(`Downloading ${url}`)
@@ -206,11 +166,7 @@ async function downloadTool(
(err: Error) => {
if (err instanceof HTTPError && err.httpStatusCode) {
// Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests
if (
err.httpStatusCode < 500 &&
err.httpStatusCode !== 408 &&
err.httpStatusCode !== 429
) {
if (err.httpStatusCode < 500 && err.httpStatusCode !== 408 && err.httpStatusCode !== 429) {
return false
}
}
@@ -238,14 +194,8 @@ async function downloadToolAttempt(
const response: httpClient.HttpClientResponse = await http.get(url, headers)
if (response.message.statusCode !== 200) {
const errorResponse = JSON.parse(
await response.readBody()
) as GDSErrorResponse
const err = new HTTPError(
response.message.statusCode,
errorResponse,
response.message.headers
)
const errorResponse = JSON.parse(await response.readBody()) as GDSErrorResponse
const err = new HTTPError(response.message.statusCode, errorResponse, response.message.headers)
core.debug(
`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`
)

View File

@@ -9,9 +9,9 @@ import {
getMatchingTags,
getTaggedRelease
} from './utils'
import {downloadGraalVM, downloadGraalVMEELegacy} from './gds'
import {downloadTool} from '@actions/tool-cache'
import {basename} from 'path'
import { downloadGraalVM, downloadGraalVMEELegacy } from './gds'
import { downloadTool } from '@actions/tool-cache'
import { basename } from 'path'
const GRAALVM_DL_BASE = 'https://download.oracle.com/graalvm'
const GRAALVM_CE_DL_BASE = `https://github.com/graalvm/${c.GRAALVM_RELEASES_REPO}/releases/download`
@@ -23,10 +23,7 @@ const GRAALVM_TAG_PREFIX = 'vm-'
// Support for GraalVM for JDK 17 and later
export async function setUpGraalVMJDK(
javaVersionOrDev: string,
gdsToken: string
): Promise<string> {
export async function setUpGraalVMJDK(javaVersionOrDev: string, gdsToken: string): Promise<string> {
if (javaVersionOrDev === c.VERSION_DEV) {
return setUpGraalVMJDKDevBuild()
}
@@ -52,9 +49,7 @@ export async function setUpGraalVMJDK(
const filename = basename(downloadUrl)
const resolvedVersion = semver.valid(semver.coerce(filename))
if (!resolvedVersion) {
throw new Error(
`Unable to determine resolved version based on '${filename}'. ${c.ERROR_REQUEST}`
)
throw new Error(`Unable to determine resolved version based on '${filename}'. ${c.ERROR_REQUEST}`)
}
javaVersion = resolvedVersion
} else if (javaVersion.includes('.')) {
@@ -80,9 +75,7 @@ export async function setUpGraalVMJDK(
return downloadExtractAndCacheJDK(downloader, toolName, javaVersion)
}
export async function findLatestEABuildDownloadUrl(
javaEaVersion: string
): Promise<string> {
export async function findLatestEABuildDownloadUrl(javaEaVersion: string): Promise<string> {
const filePath = `versions/${javaEaVersion}.json`
let response
try {
@@ -92,45 +85,27 @@ export async function findLatestEABuildDownloadUrl(
`Unable to resolve download URL for '${javaEaVersion}' (reason: ${error}). Please make sure the java-version is set correctly. ${c.ERROR_HINT}`
)
}
if (
Array.isArray(response) ||
response.type !== 'file' ||
!response.content
) {
throw new Error(
`Unexpected response when resolving download URL for '${javaEaVersion}'. ${c.ERROR_REQUEST}`
)
if (Array.isArray(response) || response.type !== 'file' || !response.content) {
throw new Error(`Unexpected response when resolving download URL for '${javaEaVersion}'. ${c.ERROR_REQUEST}`)
}
const versionData = JSON.parse(
Buffer.from(response.content, 'base64').toString('utf-8')
)
const versionData = JSON.parse(Buffer.from(response.content, 'base64').toString('utf-8'))
let latestVersion
if (javaEaVersion === ORACLE_GRAALVM_REPO_EA_BUILDS_LATEST_SYMBOL) {
latestVersion = versionData as c.OracleGraalVMEAVersion
} else {
latestVersion = (versionData as c.OracleGraalVMEAVersion[]).find(
v => v.latest
)
latestVersion = (versionData as c.OracleGraalVMEAVersion[]).find((v) => v.latest)
if (!latestVersion) {
throw new Error(
`Unable to find latest version for '${javaEaVersion}'. ${c.ERROR_REQUEST}`
)
throw new Error(`Unable to find latest version for '${javaEaVersion}'. ${c.ERROR_REQUEST}`)
}
}
const file = latestVersion.files.find(
f => f.arch === c.JDK_ARCH && f.platform === c.GRAALVM_PLATFORM
)
const file = latestVersion.files.find((f) => f.arch === c.JDK_ARCH && f.platform === c.GRAALVM_PLATFORM)
if (!file || !file.filename.startsWith('graalvm-jdk-')) {
throw new Error(
`Unable to find file metadata for '${javaEaVersion}'. ${c.ERROR_REQUEST}`
)
throw new Error(`Unable to find file metadata for '${javaEaVersion}'. ${c.ERROR_REQUEST}`)
}
return `${latestVersion.download_base_url}${file.filename}`
}
export async function setUpGraalVMJDKCE(
javaVersionOrDev: string
): Promise<string> {
export async function setUpGraalVMJDKCE(javaVersionOrDev: string): Promise<string> {
if (javaVersionOrDev === c.VERSION_DEV) {
return setUpGraalVMJDKDevBuild()
}
@@ -149,9 +124,7 @@ export async function setUpGraalVMJDKCE(
return downloadExtractAndCacheJDK(downloader, toolName, javaVersion)
}
export async function findLatestGraalVMJDKCEJavaVersion(
majorJavaVersion: string
): Promise<string> {
export async function findLatestGraalVMJDKCEJavaVersion(majorJavaVersion: string): Promise<string> {
const matchingRefs = await getMatchingTags(
c.GRAALVM_GH_USER,
c.GRAALVM_RELEASES_REPO,
@@ -162,10 +135,7 @@ export async function findLatestGraalVMJDKCEJavaVersion(
const versionNumberStartIndex = `refs/tags/${GRAALVM_JDK_TAG_PREFIX}`.length
for (const matchingRef of matchingRefs) {
const currentVersion = matchingRef.ref.substring(versionNumberStartIndex)
if (
semver.valid(currentVersion) &&
semver.gt(currentVersion, highestVersion)
) {
if (semver.valid(currentVersion) && semver.gt(currentVersion, highestVersion)) {
highestVersion = currentVersion
}
}
@@ -178,29 +148,20 @@ export async function findLatestGraalVMJDKCEJavaVersion(
}
function determineToolName(javaVersion: string, isCommunity: boolean) {
return `graalvm${isCommunity ? '-community' : ''}-jdk-${javaVersion}_${
c.JDK_PLATFORM
}-${c.JDK_ARCH}_bin`
return `graalvm${isCommunity ? '-community' : ''}-jdk-${javaVersion}_${c.JDK_PLATFORM}-${c.JDK_ARCH}_bin`
}
async function downloadGraalVMJDK(
downloadUrl: string,
javaVersion: string
): Promise<string> {
async function downloadGraalVMJDK(downloadUrl: string, javaVersion: string): Promise<string> {
try {
return await downloadTool(downloadUrl)
} catch (error) {
if (error instanceof Error && error.message.includes('404')) {
// Not Found
throw new Error(
`Failed to download ${basename(
downloadUrl
)}. Are you sure java-version: '${javaVersion}' is correct?`
`Failed to download ${basename(downloadUrl)}. Are you sure java-version: '${javaVersion}' is correct?`
)
}
throw new Error(
`Failed to download ${basename(downloadUrl)} (error: ${error}).`
)
throw new Error(`Failed to download ${basename(downloadUrl)} (error: ${error}).`)
}
}
@@ -208,28 +169,15 @@ async function downloadGraalVMJDK(
export async function setUpGraalVMJDKDevBuild(): Promise<string> {
const latestDevBuild = await getLatestRelease(GRAALVM_REPO_DEV_BUILDS)
const resolvedJavaVersion = findHighestJavaVersion(
latestDevBuild,
c.VERSION_DEV
)
const resolvedJavaVersion = findHighestJavaVersion(latestDevBuild, c.VERSION_DEV)
const downloadUrl = findDownloadUrl(latestDevBuild, resolvedJavaVersion)
return downloadAndExtractJDK(downloadUrl)
}
export function findHighestJavaVersion(
release: c.LatestReleaseResponse['data'],
version: string
): string {
const graalVMIdentifierPattern = determineGraalVMLegacyIdentifier(
false,
version,
'(\\d+)'
)
export function findHighestJavaVersion(release: c.LatestReleaseResponse['data'], version: string): string {
const graalVMIdentifierPattern = determineGraalVMLegacyIdentifier(false, version, '(\\d+)')
const expectedFileNameRegExp = new RegExp(
`^${graalVMIdentifierPattern}${c.GRAALVM_FILE_EXTENSION.replace(
/\./g,
'\\.'
)}$`
`^${graalVMIdentifierPattern}${c.GRAALVM_FILE_EXTENSION.replace(/\./g, '\\.')}$`
)
let highestJavaVersion = 0
for (const asset of release.assets) {
@@ -252,10 +200,7 @@ export function findHighestJavaVersion(
// Support for GraalVM 22.X releases and earlier
export async function setUpGraalVMLatest_22_X(
gdsToken: string,
javaVersion: string
): Promise<string> {
export async function setUpGraalVMLatest_22_X(gdsToken: string, javaVersion: string): Promise<string> {
const lockedVersion = javaVersion === '19' ? '22.3.1' : '22.3.3'
if (gdsToken.length > 0) {
return setUpGraalVMRelease(gdsToken, lockedVersion, javaVersion)
@@ -277,32 +222,20 @@ export function findGraalVMVersion(release: c.LatestReleaseResponse['data']) {
return tag_name.substring(GRAALVM_TAG_PREFIX.length, tag_name.length)
}
export async function setUpGraalVMRelease(
gdsToken: string,
version: string,
javaVersion: string
): Promise<string> {
export async function setUpGraalVMRelease(gdsToken: string, version: string, javaVersion: string): Promise<string> {
const isEE = gdsToken.length > 0
const toolName = determineLegacyToolName(isEE, version, javaVersion)
let downloader: () => Promise<string>
if (isEE) {
downloader = async () =>
downloadGraalVMEELegacy(gdsToken, version, javaVersion)
downloader = async () => downloadGraalVMEELegacy(gdsToken, version, javaVersion)
} else {
downloader = async () => downloadGraalVMCELegacy(version, javaVersion)
}
return downloadExtractAndCacheJDK(downloader, toolName, version)
}
function findDownloadUrl(
release: c.LatestReleaseResponse['data'],
javaVersion: string
): string {
const graalVMIdentifier = determineGraalVMLegacyIdentifier(
false,
c.VERSION_DEV,
javaVersion
)
function findDownloadUrl(release: c.LatestReleaseResponse['data'], javaVersion: string): string {
const graalVMIdentifier = determineGraalVMLegacyIdentifier(false, c.VERSION_DEV, javaVersion)
const expectedFileName = `${graalVMIdentifier}${c.GRAALVM_FILE_EXTENSION}`
for (const asset of release.assets) {
if (asset.name === expectedFileName) {
@@ -314,34 +247,17 @@ function findDownloadUrl(
)
}
function determineGraalVMLegacyIdentifier(
isEE: boolean,
version: string,
javaVersion: string
): string {
return `${determineLegacyToolName(isEE, version, javaVersion)}-${
c.GRAALVM_ARCH
}-${version}`
function determineGraalVMLegacyIdentifier(isEE: boolean, version: string, javaVersion: string): string {
return `${determineLegacyToolName(isEE, version, javaVersion)}-${c.GRAALVM_ARCH}-${version}`
}
function determineLegacyToolName(
isEE: boolean,
version: string,
javaVersion: string
): string {
function determineLegacyToolName(isEE: boolean, version: string, javaVersion: string): string {
const infix = isEE ? 'ee' : version === c.VERSION_DEV ? 'community' : 'ce'
return `graalvm-${infix}-java${javaVersion}-${c.GRAALVM_PLATFORM}`
}
async function downloadGraalVMCELegacy(
version: string,
javaVersion: string
): Promise<string> {
const graalVMIdentifier = determineGraalVMLegacyIdentifier(
false,
version,
javaVersion
)
async function downloadGraalVMCELegacy(version: string, javaVersion: string): Promise<string> {
const graalVMIdentifier = determineGraalVMLegacyIdentifier(false, version, javaVersion)
const downloadUrl = `${GRAALVM_CE_DL_BASE}/${GRAALVM_TAG_PREFIX}${version}/${graalVMIdentifier}${c.GRAALVM_FILE_EXTENSION}`
try {
return await downloadTool(downloadUrl)
@@ -352,8 +268,6 @@ async function downloadGraalVMCELegacy(
`Failed to download ${graalVMIdentifier}. Are you sure version: '${version}' and java-version: '${javaVersion}' are correct?`
)
}
throw new Error(
`Failed to download ${graalVMIdentifier} (error: ${error}).`
)
throw new Error(`Failed to download ${graalVMIdentifier} (error: ${error}).`)
}
}

View File

@@ -1,9 +1,9 @@
import * as c from './constants'
import * as core from '@actions/core'
import * as semver from 'semver'
import {GRAALVM_PLATFORM} from './constants'
import {exec} from './utils'
import {join} from 'path'
import { GRAALVM_PLATFORM } from './constants'
import { exec } from './utils'
import { join } from 'path'
const BASE_FLAGS = ['--non-interactive', 'install', '--no-progress']
const COMPONENT_TO_POST_INSTALL_HOOK = new Map<string, Map<string, string>>([
@@ -52,19 +52,13 @@ export async function setUpGUComponents(
)
}
} else if (graalVMVersion.startsWith(c.MANDREL_NAMESPACE)) {
core.warning(
`Mandrel does not support GraalVM component(s): '${components.join(',')}'`
)
core.warning(`Mandrel does not support GraalVM component(s): '${components.join(',')}'`)
} else {
await installGUComponents(gdsToken, graalVMHome, components)
}
}
async function installGUComponents(
gdsToken: string,
graalVMHome: string,
components: string[]
): Promise<void> {
async function installGUComponents(gdsToken: string, graalVMHome: string, components: string[]): Promise<void> {
await exec('gu', BASE_FLAGS.concat(components), {
env: {
...process.env,

View File

@@ -1,35 +1,22 @@
import * as c from './constants'
import * as semver from 'semver'
import {
downloadExtractAndCacheJDK,
getTaggedRelease,
getMatchingTags
} from './utils'
import {downloadTool} from '@actions/tool-cache'
import {spawnSync} from 'child_process'
import { downloadExtractAndCacheJDK, getTaggedRelease, getMatchingTags } from './utils'
import { downloadTool } from '@actions/tool-cache'
import { spawnSync } from 'child_process'
const LIBERICA_GH_USER = 'bell-sw'
const LIBERICA_RELEASES_REPO = 'LibericaNIK'
const LIBERICA_JDK_TAG_PREFIX = 'jdk-'
const LIBERICA_VM_PREFIX = 'bellsoft-liberica-vm-'
export async function setUpLiberica(
javaVersion: string,
javaPackage: string
): Promise<string> {
export async function setUpLiberica(javaVersion: string, javaPackage: string): Promise<string> {
const resolvedJavaVersion = await findLatestLibericaJavaVersion(javaVersion)
const downloadUrl = await findLibericaURL(resolvedJavaVersion, javaPackage)
const toolName = determineToolName(javaVersion, javaPackage)
return downloadExtractAndCacheJDK(
async () => downloadTool(downloadUrl),
toolName,
javaVersion
)
return downloadExtractAndCacheJDK(async () => downloadTool(downloadUrl), toolName, javaVersion)
}
export async function findLatestLibericaJavaVersion(
javaVersion: string
): Promise<string> {
export async function findLatestLibericaJavaVersion(javaVersion: string): Promise<string> {
const matchingRefs = await getMatchingTags(
LIBERICA_GH_USER,
LIBERICA_RELEASES_REPO,
@@ -44,8 +31,7 @@ export async function findLatestLibericaJavaVersion(
if (
semver.valid(version) &&
// pattern '17.0.1' should match '17.0.1+12' but not '17.0.10'
(version.length <= patternLength ||
!isDigit(version.charAt(patternLength))) &&
(version.length <= patternLength || !isDigit(version.charAt(patternLength))) &&
semver.compareBuild(version, bestMatch) == 1
) {
bestMatch = version
@@ -59,25 +45,17 @@ export async function findLatestLibericaJavaVersion(
return bestMatch
}
export async function findLibericaURL(
javaVersion: string,
javaPackage: string
): Promise<string> {
export async function findLibericaURL(javaVersion: string, javaPackage: string): Promise<string> {
const release = await getTaggedRelease(
LIBERICA_GH_USER,
LIBERICA_RELEASES_REPO,
LIBERICA_JDK_TAG_PREFIX + javaVersion
)
const platform = determinePlatformPart()
const assetPrefix = `${LIBERICA_VM_PREFIX}${determineVariantPart(
javaPackage
)}openjdk${javaVersion}`
const assetPrefix = `${LIBERICA_VM_PREFIX}${determineVariantPart(javaPackage)}openjdk${javaVersion}`
const assetSuffix = `-${platform}${c.GRAALVM_FILE_EXTENSION}`
for (const asset of release.assets) {
if (
asset.name.startsWith(assetPrefix) &&
asset.name.endsWith(assetSuffix)
) {
if (asset.name.startsWith(assetPrefix) && asset.name.endsWith(assetSuffix)) {
return asset.browser_download_url
}
}

View File

@@ -2,46 +2,37 @@ import * as c from './constants'
import * as core from '@actions/core'
import * as graalvm from './graalvm'
import * as semver from 'semver'
import {isFeatureAvailable as isCacheAvailable} from '@actions/cache'
import {basename, join} from 'path'
import {restore} from './features/cache'
import {setUpDependencies} from './dependencies'
import {setUpGUComponents} from './gu'
import {setUpMandrel} from './mandrel'
import {setUpLiberica} from './liberica'
import {checkForUpdates} from './features/check-for-updates'
import {setUpNativeImageMusl} from './features/musl'
import {setUpWindowsEnvironment} from './msvc'
import {setUpNativeImageBuildReports} from './features/reports'
import {exec} from '@actions/exec'
import {setUpSBOMSupport} from './features/sbom'
import { isFeatureAvailable as isCacheAvailable } from '@actions/cache'
import { basename, join } from 'path'
import { restore } from './features/cache'
import { setUpDependencies } from './dependencies'
import { setUpGUComponents } from './gu'
import { setUpMandrel } from './mandrel'
import { setUpLiberica } from './liberica'
import { checkForUpdates } from './features/check-for-updates'
import { setUpNativeImageMusl } from './features/musl'
import { setUpWindowsEnvironment } from './msvc'
import { setUpNativeImageBuildReports } from './features/reports'
import { exec } from '@actions/exec'
import { setUpSBOMSupport } from './features/sbom'
async function run(): Promise<void> {
try {
const javaVersion = core.getInput(c.INPUT_JAVA_VERSION, {required: true})
const javaVersion = core.getInput(c.INPUT_JAVA_VERSION, { required: true })
const javaPackage = core.getInput(c.INPUT_JAVA_PACKAGE)
const distribution = core.getInput(c.INPUT_DISTRIBUTION)
const graalVMVersion = core.getInput(c.INPUT_VERSION)
const gdsToken = core.getInput(c.INPUT_GDS_TOKEN)
const componentsString: string = core.getInput(c.INPUT_COMPONENTS)
const components: string[] =
componentsString.length > 0
? componentsString.split(',').map(x => x.trim())
: []
const components: string[] = componentsString.length > 0 ? componentsString.split(',').map((x) => x.trim()) : []
const setJavaHome = core.getInput(c.INPUT_SET_JAVA_HOME) === 'true'
const cache = core.getInput(c.INPUT_CACHE)
const enableCheckForUpdates =
core.getInput(c.INPUT_CHECK_FOR_UPDATES) === 'true'
const enableCheckForUpdates = core.getInput(c.INPUT_CHECK_FOR_UPDATES) === 'true'
const enableNativeImageMusl = core.getInput(c.INPUT_NI_MUSL) === 'true'
const isGraalVMforJDK17OrLater =
distribution.length > 0 || graalVMVersion.length == 0
const isGraalVMforJDK17OrLater = distribution.length > 0 || graalVMVersion.length == 0
if (c.IS_WINDOWS) {
setUpWindowsEnvironment(
javaVersion,
graalVMVersion,
isGraalVMforJDK17OrLater
)
setUpWindowsEnvironment(javaVersion, graalVMVersion, isGraalVMforJDK17OrLater)
}
await setUpDependencies(components)
if (enableNativeImageMusl) {
@@ -53,8 +44,7 @@ async function run(): Promise<void> {
if (isGraalVMforJDK17OrLater) {
if (
enableCheckForUpdates &&
(distribution === c.DISTRIBUTION_GRAALVM ||
distribution === c.DISTRIBUTION_GRAALVM_COMMUNITY)
(distribution === c.DISTRIBUTION_GRAALVM || distribution === c.DISTRIBUTION_GRAALVM_COMMUNITY)
) {
checkForUpdates(graalVMVersion, javaVersion)
}
@@ -93,30 +83,21 @@ async function run(): Promise<void> {
case c.VERSION_LATEST:
if (
javaVersion.startsWith('17') ||
(coercedJavaVersion !== null &&
semver.gte(coercedJavaVersion, '20.0.0'))
(coercedJavaVersion !== null && semver.gte(coercedJavaVersion, '20.0.0'))
) {
core.info(
`This build is using the new Oracle GraalVM. To select a specific distribution, use the 'distribution' option (see https://github.com/graalvm/setup-graalvm/tree/main#options).`
)
graalVMHome = await graalvm.setUpGraalVMJDK(javaVersion, gdsToken)
} else {
graalVMHome = await graalvm.setUpGraalVMLatest_22_X(
gdsToken,
javaVersion
)
graalVMHome = await graalvm.setUpGraalVMLatest_22_X(gdsToken, javaVersion)
}
break
case c.VERSION_DEV:
if (gdsToken.length > 0) {
throw new Error(
'Downloading GraalVM EE dev builds is not supported'
)
throw new Error('Downloading GraalVM EE dev builds is not supported')
}
if (
coercedJavaVersion !== null &&
!semver.gte(coercedJavaVersion, '21.0.0')
) {
if (coercedJavaVersion !== null && !semver.gte(coercedJavaVersion, '21.0.0')) {
core.warning(
`GraalVM dev builds are only available for JDK 21. This build is now using a stable release of GraalVM for JDK ${javaVersion}.`
)
@@ -132,11 +113,7 @@ async function run(): Promise<void> {
if (enableCheckForUpdates) {
checkForUpdates(graalVMVersion, javaVersion)
}
graalVMHome = await graalvm.setUpGraalVMRelease(
gdsToken,
graalVMVersion,
javaVersion
)
graalVMHome = await graalvm.setUpGraalVMRelease(gdsToken, graalVMVersion, javaVersion)
}
break
}
@@ -149,22 +126,12 @@ async function run(): Promise<void> {
if (setJavaHome) {
core.exportVariable('JAVA_HOME', graalVMHome)
}
await setUpGUComponents(
javaVersion,
graalVMVersion,
graalVMHome,
components,
gdsToken
)
await setUpGUComponents(javaVersion, graalVMVersion, graalVMHome, components, gdsToken)
if (cache && isCacheAvailable()) {
await restore(cache)
}
setUpNativeImageBuildReports(
isGraalVMforJDK17OrLater,
javaVersion,
graalVMVersion
)
setUpNativeImageBuildReports(isGraalVMforJDK17OrLater, javaVersion, graalVMVersion)
setUpSBOMSupport(javaVersion, distribution)
core.startGroup(`Successfully set up '${basename(graalVMHome)}'`)

View File

@@ -1,8 +1,8 @@
import * as c from './constants'
import * as httpClient from '@actions/http-client'
import {downloadExtractAndCacheJDK} from './utils'
import {downloadTool} from '@actions/tool-cache'
import {basename} from 'path'
import { downloadExtractAndCacheJDK } from './utils'
import { downloadTool } from '@actions/tool-cache'
import { basename } from 'path'
export const MANDREL_REPO = 'mandrel'
export const MANDREL_TAG_PREFIX = c.MANDREL_NAMESPACE
@@ -16,10 +16,7 @@ interface JdkData {
/* eslint-enable @typescript-eslint/no-explicit-any */
}
export async function setUpMandrel(
mandrelVersion: string,
javaVersion: string
): Promise<string> {
export async function setUpMandrel(mandrelVersion: string, javaVersion: string): Promise<string> {
const version = stripMandrelNamespace(mandrelVersion)
let mandrelHome
switch (version) {
@@ -44,11 +41,7 @@ async function setUpMandrelLatest(javaVersion: string): Promise<string> {
const version = stripMandrelNamespace(version_tag)
const toolName = determineToolName(javaVersion)
return downloadExtractAndCacheJDK(
async () => downloadTool(latest_release_url),
toolName,
version
)
return downloadExtractAndCacheJDK(async () => downloadTool(latest_release_url), toolName, version)
}
// Download URIs are of the form https://github.com/graalvm/mandrel/releases/download/<tag>/<archive-name>
@@ -61,29 +54,19 @@ function getTagFromURI(uri: string): string {
}
}
export async function getLatestMandrelReleaseUrl(
javaVersion: string
): Promise<string> {
export async function getLatestMandrelReleaseUrl(javaVersion: string): Promise<string> {
const url = `${DISCO_API_BASE}?jdk_version=${javaVersion}&distribution=${c.DISTRIBUTION_MANDREL}&architecture=${c.JDK_ARCH}&operating_system=${c.JDK_PLATFORM}&latest=per_distro`
const _http = new httpClient.HttpClient()
const response = await _http.getJson<JdkData>(url)
if (response.statusCode !== 200) {
throw new Error(
`Failed to fetch latest Mandrel release for Java ${javaVersion} from DISCO API: ${response.result}`
)
throw new Error(`Failed to fetch latest Mandrel release for Java ${javaVersion} from DISCO API: ${response.result}`)
}
const result = response.result?.result[0]
try {
const pkg_info_uri = result.links.pkg_info_uri
return await getLatestMandrelReleaseUrlHelper(
_http,
javaVersion,
pkg_info_uri
)
return await getLatestMandrelReleaseUrlHelper(_http, javaVersion, pkg_info_uri)
} catch (error) {
throw new Error(
`Failed to get latest Mandrel release for Java ${javaVersion} from DISCO API: ${error}`
)
throw new Error(`Failed to get latest Mandrel release for Java ${javaVersion} from DISCO API: ${error}`)
}
}
@@ -108,22 +91,12 @@ async function getLatestMandrelReleaseUrlHelper(
}
}
async function setUpMandrelRelease(
version: string,
javaVersion: string
): Promise<string> {
async function setUpMandrelRelease(version: string, javaVersion: string): Promise<string> {
const toolName = determineToolName(javaVersion)
return downloadExtractAndCacheJDK(
async () => downloadMandrelJDK(version, javaVersion),
toolName,
version
)
return downloadExtractAndCacheJDK(async () => downloadMandrelJDK(version, javaVersion), toolName, version)
}
async function downloadMandrelJDK(
version: string,
javaVersion: string
): Promise<string> {
async function downloadMandrelJDK(version: string, javaVersion: string): Promise<string> {
const identifier = determineMandrelIdentifier(version, javaVersion)
const downloadUrl = `${MANDREL_DL_BASE}/${MANDREL_TAG_PREFIX}${version}/${identifier}${c.GRAALVM_FILE_EXTENSION}`
try {
@@ -137,16 +110,11 @@ async function downloadMandrelJDK(
)}. Are you sure version: '${version}' and java-version: '${javaVersion}' are correct?`
)
}
throw new Error(
`Failed to download ${basename(downloadUrl)} (error: ${error}).`
)
throw new Error(`Failed to download ${basename(downloadUrl)} (error: ${error}).`)
}
}
function determineMandrelIdentifier(
version: string,
javaVersion: string
): string {
function determineMandrelIdentifier(version: string, javaVersion: string): string {
return `mandrel-java${javaVersion}-${c.GRAALVM_PLATFORM}-${c.GRAALVM_ARCH}-${version}`
}
@@ -156,10 +124,7 @@ function determineToolName(javaVersion: string): string {
export function stripMandrelNamespace(graalVMVersion: string) {
if (graalVMVersion.startsWith(c.MANDREL_NAMESPACE)) {
return graalVMVersion.substring(
c.MANDREL_NAMESPACE.length,
graalVMVersion.length
)
return graalVMVersion.substring(c.MANDREL_NAMESPACE.length, graalVMVersion.length)
} else {
return graalVMVersion
}

View File

@@ -1,7 +1,7 @@
import * as core from '@actions/core'
import {execSync} from 'child_process'
import {existsSync} from 'fs'
import {VERSION_DEV} from './constants'
import { execSync } from 'child_process'
import { existsSync } from 'fs'
import { VERSION_DEV } from './constants'
// Keep in sync with https://github.com/actions/virtual-environments
const KNOWN_VISUAL_STUDIO_INSTALLATIONS = [
@@ -11,9 +11,7 @@ const KNOWN_VISUAL_STUDIO_INSTALLATIONS = [
]
if (process.env['VSINSTALLDIR']) {
// if VSINSTALLDIR is set, make it the first known installation
KNOWN_VISUAL_STUDIO_INSTALLATIONS.unshift(
process.env['VSINSTALLDIR'].replace(/\\$/, '')
)
KNOWN_VISUAL_STUDIO_INSTALLATIONS.unshift(process.env['VSINSTALLDIR'].replace(/\\$/, ''))
}
const VCVARSALL_SUBPATH = 'VC\\Auxiliary\\Build\\vcvarsall.bat'
@@ -45,13 +43,7 @@ export function setUpWindowsEnvironment(
graalVMVersion: string,
isGraalVMforJDK17OrLater: boolean
): void {
if (
!needsWindowsEnvironmentSetup(
javaVersion,
graalVMVersion,
isGraalVMforJDK17OrLater
)
) {
if (!needsWindowsEnvironmentSetup(javaVersion, graalVMVersion, isGraalVMforJDK17OrLater)) {
return
}
@@ -59,10 +51,9 @@ export function setUpWindowsEnvironment(
const vcvarsallPath = findVcvarsallPath()
core.debug(`Calling "${vcvarsallPath}"...`)
const [originalEnv, vcvarsallOutput, updatedEnv] = execSync(
`set && cls && "${vcvarsallPath}" x64 && cls && set`,
{shell: 'cmd'}
)
const [originalEnv, vcvarsallOutput, updatedEnv] = execSync(`set && cls && "${vcvarsallPath}" x64 && cls && set`, {
shell: 'cmd'
})
.toString()
.split('\f') // form feed page break (printed by `cls`)
core.debug(vcvarsallOutput)

View File

@@ -1,47 +1,25 @@
import * as c from './constants'
import * as core from '@actions/core'
import * as github from '@actions/github'
import * as httpClient from '@actions/http-client'
import * as semver from 'semver'
import * as tc from '@actions/tool-cache'
import * as fs from 'fs'
import {ExecOptions, exec as e} from '@actions/exec'
import {readFileSync, readdirSync} from 'fs'
import {Octokit} from '@octokit/core'
import {createHash} from 'crypto'
import {join} from 'path'
import {tmpdir} from 'os'
import { ExecOptions, exec as e } from '@actions/exec'
import { readFileSync, readdirSync } from 'fs'
import { createHash } from 'crypto'
import { join } from 'path'
import { tmpdir } from 'os'
import { GitHub } from '@actions/github/lib/utils'
// Set up Octokit for github.com only and in the same way as @actions/github (see https://git.io/Jy9YP)
const baseUrl = 'https://api.github.com'
const GitHubDotCom = Octokit.defaults({
baseUrl,
request: {
agent: new httpClient.HttpClient().getAgent(baseUrl)
}
})
export async function exec(
commandLine: string,
args?: string[],
options?: ExecOptions | undefined
): Promise<void> {
export async function exec(commandLine: string, args?: string[], options?: ExecOptions | undefined): Promise<void> {
const exitCode = await e(commandLine, args, options)
if (exitCode !== 0) {
throw new Error(
`'${[commandLine]
.concat(args || [])
.join(' ')}' exited with a non-zero code: ${exitCode}`
)
throw new Error(`'${[commandLine].concat(args || []).join(' ')}' exited with a non-zero code: ${exitCode}`)
}
}
export async function getLatestRelease(
repo: string
): Promise<c.LatestReleaseResponse['data']> {
const githubToken = getGitHubToken()
const options = githubToken.length > 0 ? {auth: githubToken} : {}
const octokit = new GitHubDotCom(options)
export async function getLatestRelease(repo: string): Promise<c.LatestReleaseResponse['data']> {
const octokit = getOctokit()
return (
await octokit.request('GET /repos/{owner}/{repo}/releases/latest', {
owner: c.GRAALVM_GH_USER,
@@ -50,13 +28,8 @@ export async function getLatestRelease(
).data
}
export async function getContents(
repo: string,
path: string
): Promise<c.ContentsResponse['data']> {
const githubToken = getGitHubToken()
const options = githubToken.length > 0 ? {auth: githubToken} : {}
const octokit = new GitHubDotCom(options)
export async function getContents(repo: string, path: string): Promise<c.ContentsResponse['data']> {
const octokit = getOctokit()
return (
await octokit.request('GET /repos/{owner}/{repo}/contents/{path}', {
owner: c.GRAALVM_GH_USER,
@@ -71,9 +44,7 @@ export async function getTaggedRelease(
repo: string,
tag: string
): Promise<c.LatestReleaseResponse['data']> {
const githubToken = getGitHubToken()
const options = githubToken.length > 0 ? {auth: githubToken} : {}
const octokit = new GitHubDotCom(options)
const octokit = getOctokit()
return (
await octokit.request('GET /repos/{owner}/{repo}/releases/tags/{tag}', {
owner,
@@ -88,27 +59,18 @@ export async function getMatchingTags(
repo: string,
tagPrefix: string
): Promise<c.MatchingRefsResponse['data']> {
const githubToken = getGitHubToken()
const options = githubToken.length > 0 ? {auth: githubToken} : {}
const octokit = new GitHubDotCom(options)
const octokit = getOctokit()
return (
await octokit.request(
'GET /repos/{owner}/{repo}/git/matching-refs/tags/{tagPrefix}',
{
owner,
repo,
tagPrefix
}
)
await octokit.request('GET /repos/{owner}/{repo}/git/matching-refs/tags/{tagPrefix}', {
owner,
repo,
tagPrefix
})
).data
}
export async function downloadAndExtractJDK(
downloadUrl: string
): Promise<string> {
return findJavaHomeInSubfolder(
await extract(await tc.downloadTool(downloadUrl))
)
export async function downloadAndExtractJDK(downloadUrl: string): Promise<string> {
return findJavaHomeInSubfolder(await extract(await tc.downloadTool(downloadUrl)))
}
export async function downloadExtractAndCacheJDK(
@@ -140,9 +102,7 @@ async function extract(downloadPath: string): Promise<string> {
} else if (c.GRAALVM_FILE_EXTENSION === '.zip') {
return await tc.extractZip(downloadPath)
} else {
throw new Error(
`Unexpected filetype downloaded: ${c.GRAALVM_FILE_EXTENSION}`
)
throw new Error(`Unexpected filetype downloaded: ${c.GRAALVM_FILE_EXTENSION}`)
}
}
@@ -151,9 +111,7 @@ function findJavaHomeInSubfolder(searchPath: string): string {
if (baseContents.length === 1) {
return join(searchPath, baseContents[0], c.JDK_HOME_SUFFIX)
} else {
throw new Error(
`Unexpected amount of directory items found: ${baseContents.length}`
)
throw new Error(`Unexpected amount of directory items found: ${baseContents.length}`)
}
}
@@ -171,9 +129,7 @@ export function toSemVer(version: string): string {
const suffix = versionParts.length === 2 ? '-' + versionParts[1] : ''
const validVersion = semver.valid(semver.coerce(versionParts[0]) + suffix)
if (!validVersion) {
throw new Error(
`Unable to convert '${version}' to semantic version. ${c.ERROR_HINT}`
)
throw new Error(`Unable to convert '${version}' to semantic version. ${c.ERROR_HINT}`)
}
return validVersion
}
@@ -182,25 +138,30 @@ export function isPREvent(): boolean {
return process.env[c.ENV_GITHUB_EVENT_NAME] === c.EVENT_NAME_PULL_REQUEST
}
function getGitHubToken(): string {
return core.getInput(c.INPUT_GITHUB_TOKEN)
function getOctokit(): InstanceType<typeof GitHub> {
/* Set up GitHub instance manually because @actions/github does not allow unauthenticated access */
const GitHubWithPlugins = GitHub.plugin()
const token = core.getInput(c.INPUT_GITHUB_TOKEN)
if (token) {
return new GitHubWithPlugins({ auth: `token ${token}` })
} else {
return new GitHubWithPlugins() /* unauthenticated */
}
}
export async function findExistingPRCommentId(
bodyStartsWith: string
): Promise<number | undefined> {
export async function findExistingPRCommentId(bodyStartsWith: string): Promise<number | undefined> {
if (!isPREvent()) {
throw new Error('Not a PR event.')
}
const context = github.context
const octokit = github.getOctokit(getGitHubToken())
const octokit = getOctokit()
try {
const comments = await octokit.paginate(octokit.rest.issues.listComments, {
...context.repo,
issue_number: context.payload.pull_request?.number as number
})
const matchingComment = comments.reverse().find(comment => {
const matchingComment = comments.reverse().find((comment) => {
return comment.body && comment.body.startsWith(bodyStartsWith)
})
return matchingComment ? matchingComment.id : undefined
@@ -211,16 +172,13 @@ export async function findExistingPRCommentId(
}
}
export async function updatePRComment(
content: string,
commentId: number
): Promise<void> {
export async function updatePRComment(content: string, commentId: number): Promise<void> {
if (!isPREvent()) {
throw new Error('Not a PR event.')
}
try {
await github.getOctokit(getGitHubToken()).rest.issues.updateComment({
await getOctokit().rest.issues.updateComment({
...github.context.repo,
comment_id: commentId,
body: content
@@ -238,7 +196,7 @@ export async function createPRComment(content: string): Promise<void> {
}
const context = github.context
try {
await github.getOctokit(getGitHubToken()).rest.issues.createComment({
await getOctokit().rest.issues.createComment({
...context.repo,
issue_number: context.payload.pull_request?.number as number,
body: content
@@ -254,14 +212,10 @@ export function tmpfile(fileName: string) {
return join(tmpdir(), fileName)
}
export function setNativeImageOption(
javaVersionOrDev: string,
optionValue: string
): void {
export function setNativeImageOption(javaVersionOrDev: string, optionValue: string): void {
const coercedJavaVersionOrDev = semver.coerce(javaVersionOrDev)
if (
(coercedJavaVersionOrDev &&
semver.gte(coercedJavaVersionOrDev, '22.0.0')) ||
(coercedJavaVersionOrDev && semver.gte(coercedJavaVersionOrDev, '22.0.0')) ||
javaVersionOrDev === c.VERSION_DEV ||
javaVersionOrDev.endsWith('-ea')
) {

View File

@@ -6,11 +6,5 @@
"noEmit": true
},
"exclude": ["dist", "node_modules"],
"include": [
"__fixtures__",
"__tests__",
"src",
"eslint.config.mjs",
"jest.config.js"
]
"include": ["__tests__", "src", "eslint.config.mjs", "jest.config.js"]
}

View File

@@ -2,6 +2,7 @@
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "./tsconfig.base.json",
"compilerOptions": {
"isolatedModules": true,
"module": "NodeNext",
"moduleResolution": "NodeNext",
"outDir": "./dist"