From 8440fa12afe4d3881bc7060ef4be6df72a32f23b Mon Sep 17 00:00:00 2001 From: Connor G Meehan Date: Wed, 15 May 2024 04:54:14 +1000 Subject: [PATCH] fix: Brittle response parsing from notarytool (#191) * fix: Brittle response parsing from notarytool * fix: Fixes result.code check blocking notarytool log diagnostics * fix: Concat notarytool error with notarytool log result * clean: Cleanup unused import * refact: Simplified notary error handling logic * chore: bump electronjs/node in .circleci/config.yml to 2.2.2 (#195) Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> * fix: ensure status is Accepted --------- Co-authored-by: Connor G Meehan Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: Samuel Attard --- src/notarytool.ts | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/notarytool.ts b/src/notarytool.ts index 6b43431..51ef7d7 100644 --- a/src/notarytool.ts +++ b/src/notarytool.ts @@ -83,24 +83,42 @@ export async function notarizeAndWaitForNotaryTool(opts: NotaryToolStartOptions) ]; const result = await spawn('xcrun', notarizeArgs); - const parsed = JSON.parse(result.output.trim()); + const rawOut = result.output.trim(); - if (result.code !== 0 || !parsed.status || parsed.status !== 'Accepted') { + let parsed: any; + try { + parsed = JSON.parse(rawOut); + } catch (err) { + throw new Error( + `Failed to notarize via notarytool. Failed with unexpected result: \n\n${rawOut}`, + ); + } + + if (result.code === 0 && parsed.status === 'Accepted') { + d('notarization success'); + return; + } + + let logOutput: undefined | string; + if (parsed.id) { try { - if (parsed && parsed.id) { - const logResult = await spawn('xcrun', [ - 'notarytool', - 'log', - parsed.id, - ...authorizationArgs(opts), - ]); - d('notarization log', logResult.output); - } + const logResult = await spawn('xcrun', [ + 'notarytool', + 'log', + parsed.id, + ...authorizationArgs(opts), + ]); + d('notarization log', logResult.output); + logOutput = logResult.output; } catch (e) { d('failed to pull notarization logs', e); } - throw new Error(`Failed to notarize via notarytool\n\n${result.output}`); } - d('notarization success'); + + let message = `Failed to notarize via notarytool\n\n${result.output}`; + if (logOutput) { + message += `\n\nDiagnostics from notarytool log: ${logOutput}`; + } + throw new Error(message); }); }