From ebb356cc4e59bcf94f518203228485f5d40e4b58 Mon Sep 17 00:00:00 2001 From: gowridurgad <159780674+gowridurgad@users.noreply.github.com> Date: Mon, 23 Jun 2025 23:02:03 +0530 Subject: [PATCH] Improve Error Handling for Setup-Java Action to Help Debug Intermittent Failures (#848) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * error-handling * Logic update --------- Co-authored-by: “gowridurgad” <“hgowridurgad@github.com> --- dist/setup/index.js | 39 +++++++++++++++++++++++------ src/distributions/base-installer.ts | 38 ++++++++++++++++++++++------ 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index 08107f09..8bf08ef2 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -128793,15 +128793,38 @@ class JavaBase { } else { core.info('Trying to resolve the latest version from remote'); - const javaRelease = yield this.findPackageForDownload(this.version); - core.info(`Resolved latest version as ${javaRelease.version}`); - if ((foundJava === null || foundJava === void 0 ? void 0 : foundJava.version) === javaRelease.version) { - core.info(`Resolved Java ${foundJava.version} from tool-cache`); + try { + const javaRelease = yield this.findPackageForDownload(this.version); + core.info(`Resolved latest version as ${javaRelease.version}`); + if ((foundJava === null || foundJava === void 0 ? void 0 : foundJava.version) === javaRelease.version) { + core.info(`Resolved Java ${foundJava.version} from tool-cache`); + } + else { + core.info('Trying to download...'); + foundJava = yield this.downloadTool(javaRelease); + core.info(`Java ${foundJava.version} was downloaded`); + } } - else { - core.info('Trying to download...'); - foundJava = yield this.downloadTool(javaRelease); - core.info(`Java ${foundJava.version} was downloaded`); + catch (error) { + if (error instanceof tc.HTTPError) { + if (error.httpStatusCode === 403) { + core.error('HTTP 403: Permission denied or access restricted.'); + } + else if (error.httpStatusCode === 429) { + core.warning('HTTP 429: Rate limit exceeded. Please retry later.'); + } + else { + core.error(`HTTP ${error.httpStatusCode}: ${error.message}`); + } + } + else { + const message = error instanceof Error ? error.message : JSON.stringify(error); + core.error(`Java setup failed due to network issue or timeout: ${message}`); + } + if (error instanceof Error && error.stack) { + core.debug(error.stack); + } + throw error; } } // JDK folder may contain postfix "Contents/Home" on macOS diff --git a/src/distributions/base-installer.ts b/src/distributions/base-installer.ts index 258ac9f4..4a83897f 100644 --- a/src/distributions/base-installer.ts +++ b/src/distributions/base-installer.ts @@ -51,14 +51,36 @@ export abstract class JavaBase { core.info(`Resolved Java ${foundJava.version} from tool-cache`); } else { core.info('Trying to resolve the latest version from remote'); - const javaRelease = await this.findPackageForDownload(this.version); - core.info(`Resolved latest version as ${javaRelease.version}`); - if (foundJava?.version === javaRelease.version) { - core.info(`Resolved Java ${foundJava.version} from tool-cache`); - } else { - core.info('Trying to download...'); - foundJava = await this.downloadTool(javaRelease); - core.info(`Java ${foundJava.version} was downloaded`); + try { + const javaRelease = await this.findPackageForDownload(this.version); + core.info(`Resolved latest version as ${javaRelease.version}`); + if (foundJava?.version === javaRelease.version) { + core.info(`Resolved Java ${foundJava.version} from tool-cache`); + } else { + core.info('Trying to download...'); + foundJava = await this.downloadTool(javaRelease); + core.info(`Java ${foundJava.version} was downloaded`); + } + } catch (error: any) { + if (error instanceof tc.HTTPError) { + if (error.httpStatusCode === 403) { + core.error('HTTP 403: Permission denied or access restricted.'); + } else if (error.httpStatusCode === 429) { + core.warning('HTTP 429: Rate limit exceeded. Please retry later.'); + } else { + core.error(`HTTP ${error.httpStatusCode}: ${error.message}`); + } + } else { + const message = + error instanceof Error ? error.message : JSON.stringify(error); + core.error( + `Java setup failed due to network issue or timeout: ${message}` + ); + } + if (error instanceof Error && error.stack) { + core.debug(error.stack); + } + throw error; } }