diff --git a/packages/nodejs/.changesets/report-parse-errors-in-diagnose-report.md b/packages/nodejs/.changesets/report-parse-errors-in-diagnose-report.md new file mode 100644 index 00000000..2a93231c --- /dev/null +++ b/packages/nodejs/.changesets/report-parse-errors-in-diagnose-report.md @@ -0,0 +1,5 @@ +--- +bump: "patch" +--- + +The diagnose report will report parsing errors on reading or parsing the installation report. Previously, a missing installation report file would crash the diagnose tool. diff --git a/packages/nodejs/src/cli/diagnose.ts b/packages/nodejs/src/cli/diagnose.ts index 59f29939..44c04c4c 100644 --- a/packages/nodejs/src/cli/diagnose.ts +++ b/packages/nodejs/src/cli/diagnose.ts @@ -32,50 +32,62 @@ export class Diagnose { this.print_newline() console.log(`Extension installation report`) - console.log(` Installation result`) const installReport = data["installation"] - console.log(` Status: ${installReport["result"]["status"]}`) - const resultMessage = data["installation"]["result"]["message"] - if (resultMessage) { - console.log(` Message: ${resultMessage}`) - } - const resultError = data["installation"]["result"]["error"] - if (resultError) { - console.log(` Error: ${resultError}`) + const parsingError = installReport["parsing_error"] + if (parsingError) { + console.log(` Error found while parsing the report.`) + console.log(` Error: ${parsingError["error"]}`) + if (parsingError["raw"]) { + console.log(` Raw report:`) + console.log(parsingError["raw"]) + } + } else { + console.log(` Installation result`) + console.log(` Status: ${installReport["result"]["status"]}`) + const resultMessage = data["installation"]["result"]["message"] + if (resultMessage) { + console.log(` Message: ${resultMessage}`) + } + const resultError = data["installation"]["result"]["error"] + if (resultError) { + console.log(` Error: ${resultError}`) + } + + console.log(` Language details`) + console.log( + ` Node.js version: ${data["installation"]["language"]["version"]}` + ) + console.log(` Download details`) + console.log( + ` Download URL: ${data["installation"]["download"]["download_url"]}` + ) + console.log( + ` Checksum: ${data["installation"]["download"]["checksum"]}` + ) + console.log(` Build details`) + console.log(` Install time: ${data["installation"]["build"]["time"]}`) + console.log( + ` Architecture: ${data["installation"]["build"]["architecture"]}` + ) + console.log(` Target: ${data["installation"]["build"]["target"]}`) + console.log( + ` Musl override: ${data["installation"]["build"]["musl_override"]}` + ) + console.log( + ` Linux ARM override: ${data["installation"]["build"]["linux_arm_override"]}` + ) + console.log( + ` Library type: ${data["installation"]["build"]["library_type"]}` + ) + console.log(` Host details`) + console.log(` Root user: ${data["installation"]["host"]["root_user"]}`) + console.log( + ` Dependencies: ${this.format_value( + data["installation"]["host"]["dependencies"] + )}` + ) } - console.log(` Language details`) - console.log( - ` Node.js version: ${data["installation"]["language"]["version"]}` - ) - console.log(` Download details`) - console.log( - ` Download URL: ${data["installation"]["download"]["download_url"]}` - ) - console.log(` Checksum: ${data["installation"]["download"]["checksum"]}`) - console.log(` Build details`) - console.log(` Install time: ${data["installation"]["build"]["time"]}`) - console.log( - ` Architecture: ${data["installation"]["build"]["architecture"]}` - ) - console.log(` Target: ${data["installation"]["build"]["target"]}`) - console.log( - ` Musl override: ${data["installation"]["build"]["musl_override"]}` - ) - console.log( - ` Linux ARM override: ${data["installation"]["build"]["linux_arm_override"]}` - ) - console.log( - ` Library type: ${data["installation"]["build"]["library_type"]}` - ) - console.log(` Host details`) - console.log(` Root user: ${data["installation"]["host"]["root_user"]}`) - console.log( - ` Dependencies: ${this.format_value( - data["installation"]["host"]["dependencies"] - )}` - ) - this.print_newline() console.log(`Host information`) diff --git a/packages/nodejs/src/diagnose.ts b/packages/nodejs/src/diagnose.ts index 522b0557..faaed1c1 100644 --- a/packages/nodejs/src/diagnose.ts +++ b/packages/nodejs/src/diagnose.ts @@ -22,6 +22,12 @@ interface FileMetadata { writable?: boolean } +interface ParsingError { + error: string + backtrace: [] + raw?: string +} + export class DiagnoseTool { #config: Configuration #extension: Extension @@ -84,11 +90,21 @@ export class DiagnoseTool { } private getInstallationReport() { + let rawReport try { - const rawReport = fs.readFileSync(reportPath(), "utf8") - return rawReport ? JSON.parse(rawReport) : {} - } catch (e) { - return {} + rawReport = fs.readFileSync(reportPath(), "utf8") + return JSON.parse(rawReport) + } catch (error) { + const report = { + parsing_error: { + error: `${error.name}: ${error.message}`, + backtrace: error.stack.split("\n") + } as ParsingError + } + if (rawReport) { + report.parsing_error.raw = rawReport + } + return report } } diff --git a/test/integration/diagnose b/test/integration/diagnose index a2f513fd..a39f97a0 160000 --- a/test/integration/diagnose +++ b/test/integration/diagnose @@ -1 +1 @@ -Subproject commit a2f513fd7e158a6e194a7e90a9636f065963cfce +Subproject commit a39f97a08a8f7a87682a1c6f724156257caa5f3b