diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a3fb36e..ae11a04 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,12 +30,12 @@ jobs: components: ['native-image'] os: [macos-latest, windows-latest, ubuntu-latest] include: - - version: '22.3.0' + - version: '22.2.0' # for update notifications java-version: '17' components: 'native-image' os: ubuntu-18.04 - version: '22.3.0' - java-version: '17' + java-version: '11' # for JDK11 notification components: 'native-image' os: macos-11 - version: '22.3.0' diff --git a/README.md b/README.md index 2db34a9..ae6be35 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ jobs: | `github-token` | `''` | Token for communication with the GitHub API. Please set to `${{ secrets.GITHUB_TOKEN }}` (see [templates](#templates)) to allow the action to authenticate with the GitHub API, which helps to reduce rate limiting issues. | | `set-java-home` | `'true'` | If set to `'true'`, instructs the action to set `$JAVA_HOME` to the path of the GraalVM installation. | | `cache` | `''` | Name of the build platform to cache dependencies. It can be `'maven'`, `'gradle'`, or `'sbt'` and works the same way it does in [actions/setup-java][setup-java-caching]. | +| `check-for-updates` | `'true'` | [Annotate jobs][gha-annotations] with update notifications, for example, when a new GraalVM release is available. | | `native-image-musl` | `'false'` | If set to `'true'`, sets up [musl] for building [static images][native-image-static] with GraalVM Native Image *(Linux only)*. [Example usage][native-image-musl-build] (be sure to replace `uses: ./` with `uses: graalvm/setup-graalvm@v1`). | @@ -132,6 +133,7 @@ Only pull requests from committers that can be verified as having signed the OCA [dev-build]: https://github.com/graalvm/graalvm-ce-dev-builds/releases/latest [dev-builds]: https://github.com/graalvm/graalvm-ce-dev-builds +[gha-annotations]: https://github.com/actions/toolkit/tree/main/packages/core#annotations [gha-secrets]: https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository [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/ diff --git a/action.yml b/action.yml index 8c2cac2..0008657 100644 --- a/action.yml +++ b/action.yml @@ -29,6 +29,10 @@ inputs: cache: description: 'Name of the build platform to cache dependencies. It can be "maven", "gradle", or "sbt".' required: false + check-for-updates: + required: false + description: 'Annotate jobs with update notifications, for example, when a new GraalVM release is available' + default: 'true' native-image-musl: required: false description: 'Set up musl for static image building with GraalVM Native Image.' diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index 37d2a80..d8ab0bf 100644 Binary files a/dist/cleanup/index.js and b/dist/cleanup/index.js differ diff --git a/dist/main/index.js b/dist/main/index.js index 506e192..6e3492b 100644 Binary files a/dist/main/index.js and b/dist/main/index.js differ diff --git a/package-lock.json b/package-lock.json index c9103ed..1f773e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,11 +18,13 @@ "@actions/tool-cache": "^1.7.1", "@octokit/core": "^3.5.1", "@octokit/types": "^6.34.0", + "semver": "^7.3.8", "uuid": "^8.3.2" }, "devDependencies": { "@types/jest": "^27.5.2", "@types/node": "^17.0.6", + "@types/semver": "^7.3.13", "@types/uuid": "^8.3.4", "@typescript-eslint/parser": "^5.8.1", "@vercel/ncc": "^0.33.4", @@ -69,6 +71,14 @@ "tunnel": "^0.0.6" } }, + "node_modules/@actions/cache/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@actions/cache/node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -138,6 +148,14 @@ "uuid": "^3.3.2" } }, + "node_modules/@actions/tool-cache/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@actions/tool-cache/node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -406,6 +424,15 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.18.13", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz", @@ -452,6 +479,15 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", @@ -1677,6 +1713,12 @@ "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -1745,21 +1787,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.36.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.36.1.tgz", @@ -1890,21 +1917,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils": { "version": "5.36.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.1.tgz", @@ -3273,6 +3285,15 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-no-only-tests": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", @@ -4338,6 +4359,15 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -4899,21 +4929,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -5268,7 +5283,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5291,6 +5305,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -6076,11 +6099,17 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/shebang-command": { @@ -6478,21 +6507,6 @@ } } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -6919,8 +6933,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { "version": "16.2.0", @@ -6996,6 +7009,11 @@ "tunnel": "^0.0.6" } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -7065,6 +7083,11 @@ "uuid": "^3.3.2" }, "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -7299,6 +7322,14 @@ "gensync": "^1.0.0-beta.2", "json5": "^2.2.1", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/generator": { @@ -7335,6 +7366,14 @@ "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.20.2", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-environment-visitor": { @@ -8324,6 +8363,12 @@ "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", "dev": true }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -8374,17 +8419,6 @@ "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/experimental-utils": { @@ -8449,17 +8483,6 @@ "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/utils": { @@ -9491,6 +9514,14 @@ "language-tags": "^1.0.5", "minimatch": "^3.1.2", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "eslint-plugin-no-only-tests": { @@ -10247,6 +10278,14 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "istanbul-lib-report": { @@ -10685,17 +10724,6 @@ "natural-compare": "^1.4.0", "pretty-format": "^27.5.1", "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "jest-util": { @@ -10984,7 +11012,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -10996,6 +11023,14 @@ "dev": true, "requires": { "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "make-error": { @@ -11562,9 +11597,12 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } }, "shebang-command": { "version": "2.0.0", @@ -11851,17 +11889,6 @@ "make-error": "1.x", "semver": "7.x", "yargs-parser": "20.x" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "tsconfig-paths": { @@ -12179,8 +12206,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index 7246a9e..767bc4a 100644 --- a/package.json +++ b/package.json @@ -35,11 +35,13 @@ "@actions/tool-cache": "^1.7.1", "@octokit/core": "^3.5.1", "@octokit/types": "^6.34.0", + "semver": "^7.3.8", "uuid": "^8.3.2" }, "devDependencies": { "@types/jest": "^27.5.2", "@types/node": "^17.0.6", + "@types/semver": "^7.3.13", "@types/uuid": "^8.3.4", "@typescript-eslint/parser": "^5.8.1", "@vercel/ncc": "^0.33.4", diff --git a/src/constants.ts b/src/constants.ts index bb4119b..147b807 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -7,6 +7,7 @@ export const INPUT_COMPONENTS = 'components' export const INPUT_GITHUB_TOKEN = 'github-token' export const INPUT_SET_JAVA_HOME = 'set-java-home' export const INPUT_CACHE = 'cache' +export const INPUT_CHECK_FOR_UPDATES = 'check-for-updates' export const INPUT_NI_MUSL = 'native-image-musl' export const IS_LINUX = process.platform === 'linux' diff --git a/src/features.ts b/src/features.ts index 38ada00..b67b148 100644 --- a/src/features.ts +++ b/src/features.ts @@ -1,14 +1,42 @@ +import * as c from './constants' import * as core from '@actions/core' import * as tc from '@actions/tool-cache' -import {IS_LINUX} from './constants' -import {exec} from './utils' +import {exec, toSemVer} from './utils' import {join} from 'path' +import {lt, major, minor, valid} from 'semver' +import {getLatestReleaseVersion} from './graalvm' const MUSL_NAME = 'x86_64-linux-musl-native' const MUSL_VERSION = '10.2.1' +export async function checkForUpdates( + graalVMVersion: string, + javaVersion: string +): Promise { + if (graalVMVersion === '22.3.0' && javaVersion === '11') { + core.notice( + 'Please consider upgrading your project to Java 17+. The GraalVM 22.3.0 release is the last to support JDK11: https://github.com/oracle/graal/issues/5063' + ) + return + } + const latestGraalVMVersion = await getLatestReleaseVersion() + const selectedVersion = toSemVer(graalVMVersion) + const latestVersion = toSemVer(latestGraalVMVersion) + if ( + valid(selectedVersion) && + valid(latestVersion) && + lt(selectedVersion, latestVersion) + ) { + core.notice( + `A new GraalVM release is available! Please consider upgrading to GraalVM ${latestGraalVMVersion}. Release notes: https://www.graalvm.org/release-notes/${major( + latestVersion + )}_${minor(latestVersion)}/` + ) + } +} + export async function setUpNativeImageMusl(): Promise { - if (!IS_LINUX) { + if (!c.IS_LINUX) { core.warning('musl is only supported on Linux') return } diff --git a/src/graalvm.ts b/src/graalvm.ts index 48d2d83..d1c5446 100644 --- a/src/graalvm.ts +++ b/src/graalvm.ts @@ -20,14 +20,15 @@ export async function setUpGraalVMLatest( if (gdsToken.length > 0) { return setUpGraalVMRelease(gdsToken, c.VERSION_LATEST, javaVersion) } + const latestReleaseVersion = await getLatestReleaseVersion() + return setUpGraalVMRelease(gdsToken, latestReleaseVersion, javaVersion) +} + +export async function getLatestReleaseVersion(): Promise { const latestRelease = await getLatestRelease(GRAALVM_REPO_RELEASES) const tag_name = latestRelease.tag_name if (tag_name.startsWith(GRAALVM_TAG_PREFIX)) { - const latestVersion = tag_name.substring( - GRAALVM_TAG_PREFIX.length, - tag_name.length - ) - return setUpGraalVMRelease(gdsToken, latestVersion, javaVersion) + return tag_name.substring(GRAALVM_TAG_PREFIX.length, tag_name.length) } throw new Error(`Could not find latest GraalVM release: ${tag_name}`) } diff --git a/src/main.ts b/src/main.ts index 00b070d..9c4e478 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,7 +7,7 @@ import {restore} from './cache' import {setUpDependencies} from './dependencies' import {setUpGUComponents} from './gu' import {setUpMandrel} from './mandrel' -import {setUpNativeImageMusl} from './features' +import {checkForUpdates, setUpNativeImageMusl} from './features' import {setUpWindowsEnvironment} from './msvc' async function run(): Promise { @@ -20,6 +20,8 @@ async function run(): Promise { componentsString.length > 0 ? componentsString.split(',') : [] 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 enableNativeImageMusl = core.getInput(c.INPUT_NI_MUSL) === 'true' if (c.IS_WINDOWS) { @@ -43,6 +45,9 @@ async function run(): Promise { if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) { graalVMHome = await setUpMandrel(graalvmVersion, javaVersion) } else { + if (enableCheckForUpdates) { + await checkForUpdates(graalvmVersion, javaVersion) + } graalVMHome = await graalvm.setUpGraalVMRelease( gdsToken, graalvmVersion, diff --git a/src/utils.ts b/src/utils.ts index 0ded275..0813de3 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -105,7 +105,7 @@ function findJavaHomeInSubfolder(searchPath: string): string { * semver.org versions (e.g., `22.0.0-2`), which is needed because * @actions/tool-cache uses `semver` to validate versions. */ -function toSemVer(version: string): string { +export function toSemVer(version: string): string { const parts = version.split('.') const major = parts[0] const minor = parts.length > 1 ? parts[1] : '0'