Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions __tests__/distributors/graalvm-installer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1058,6 +1058,20 @@ describe('GraalVMDistribution', () => {
'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
);
});
});
});
});
Expand Down
12 changes: 11 additions & 1 deletion dist/setup/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -79300,7 +79300,17 @@ class GraalVMCommunityDistribution extends GraalVMDistribution {
let releasesUrl = GRAALVM_COMMUNITY_RELEASES_URL;
for (let pageIndex = 0; releasesUrl && pageIndex < util_1.MAX_PAGINATION_PAGES; pageIndex++) {
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) {
break;
}
Expand Down
4 changes: 2 additions & 2 deletions docs/advanced-usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,8 @@ steps:
distribution: 'graalvm-community'
java-version: '21'
- run: |
java -cp java HelloWorldApp
native-image -cp java HelloWorldApp
java --version
native-image --version
```

### JetBrains
Expand Down
15 changes: 14 additions & 1 deletion src/distributions/graalvm/installer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,20 @@ export class GraalVMCommunityDistribution extends GraalVMDistribution {
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) {
break;
}
Expand Down
Loading