dist: Address Copilot review suggestions from PR #1042 (GraalVM Community) (#1059)

- installer: surface a clear error when the GraalVM Community releases
  listing is not a JSON array, instead of silently treating an error
  payload (rate limit, auth failure, etc.) as "no releases" which later
  surfaced as a misleading "version not found" error.
- docs: fix the GraalVM Community advanced-usage example to check the
  installed binary versions (java/native-image --version) rather than
  running a non-existent HelloWorldApp classpath that fails when copied.
- tests: cover the new non-array release listing error path.

Rebuilt dist bundle.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Bruno Borges
2026-06-23 13:37:44 -04:00
committed by GitHub
parent fa2c6508d1
commit 1bcf9fb12c
4 changed files with 41 additions and 4 deletions
@@ -1058,6 +1058,20 @@ describe('GraalVMDistribution', () => {
'GraalVM Community does not provide early access builds' 'GraalVM Community does not provide early access builds'
); );
}); });
it('should surface an error when the releases listing is not an array', async () => {
mockHttpClient.getJson.mockResolvedValue({
result: {message: 'API rate limit exceeded'},
statusCode: 403,
headers: {}
});
await expect(
(communityDistribution as any).findPackageForDownload('21')
).rejects.toThrow(
/Unexpected response while listing GraalVM Community releases.*HTTP status code: 403/s
);
});
}); });
}); });
}); });
+11 -1
View File
@@ -79300,7 +79300,17 @@ class GraalVMCommunityDistribution extends GraalVMDistribution {
let releasesUrl = GRAALVM_COMMUNITY_RELEASES_URL; let releasesUrl = GRAALVM_COMMUNITY_RELEASES_URL;
for (let pageIndex = 0; releasesUrl && pageIndex < util_1.MAX_PAGINATION_PAGES; pageIndex++) { for (let pageIndex = 0; releasesUrl && pageIndex < util_1.MAX_PAGINATION_PAGES; pageIndex++) {
const response = yield this.http.getJson(releasesUrl, headers); const response = yield this.http.getJson(releasesUrl, headers);
const releases = Array.isArray(response.result) ? response.result : []; // A successful GitHub releases listing is always a JSON array (possibly
// empty). Anything else indicates an unexpected/error payload (rate
// limiting, auth failure, etc.) that must be surfaced instead of being
// silently treated as "no releases", which would later look like a
// misleading "version not found" error.
if (!Array.isArray(response.result)) {
throw new Error(`Unexpected response while listing GraalVM Community releases from ${releasesUrl} ` +
`(HTTP status code: ${response.statusCode}). Expected a JSON array of releases. ` +
`Please check if the service is available at ${GRAALVM_COMMUNITY_DOWNLOAD_URL}.`);
}
const releases = response.result;
if (releases.length === 0) { if (releases.length === 0) {
break; break;
} }
+2 -2
View File
@@ -186,8 +186,8 @@ steps:
distribution: 'graalvm-community' distribution: 'graalvm-community'
java-version: '21' java-version: '21'
- run: | - run: |
java -cp java HelloWorldApp java --version
native-image -cp java HelloWorldApp native-image --version
``` ```
### JetBrains ### JetBrains
+14 -1
View File
@@ -391,7 +391,20 @@ export class GraalVMCommunityDistribution extends GraalVMDistribution {
headers headers
); );
const releases = Array.isArray(response.result) ? response.result : []; // A successful GitHub releases listing is always a JSON array (possibly
// empty). Anything else indicates an unexpected/error payload (rate
// limiting, auth failure, etc.) that must be surfaced instead of being
// silently treated as "no releases", which would later look like a
// misleading "version not found" error.
if (!Array.isArray(response.result)) {
throw new Error(
`Unexpected response while listing GraalVM Community releases from ${releasesUrl} ` +
`(HTTP status code: ${response.statusCode}). Expected a JSON array of releases. ` +
`Please check if the service is available at ${GRAALVM_COMMUNITY_DOWNLOAD_URL}.`
);
}
const releases = response.result;
if (releases.length === 0) { if (releases.length === 0) {
break; break;
} }