From 429841ab24a08473472957835608c6bff51f612a Mon Sep 17 00:00:00 2001 From: whilefoo Date: Thu, 13 Feb 2025 23:36:22 +0100 Subject: [PATCH 1/2] feat: support AggregateError --- src/actions.ts | 19 +++++++++++-------- src/server.ts | 8 +++++--- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/actions.ts b/src/actions.ts index ca0dcf0..37a871b 100644 --- a/src/actions.ts +++ b/src/actions.ts @@ -96,16 +96,19 @@ export async function createActionsPlugin (err instanceof Error ? err.message : err)).join("\n\n"), { error }); + } else if (error instanceof Error || error instanceof LogReturn) { loggerError = error; } else { - core.setFailed(`Error: ${error}`); - loggerError = context.logger.error(`Error: ${error}`); + loggerError = context.logger.error(String(error)); + } + + if (loggerError instanceof LogReturn) { + core.setFailed(loggerError.logMessage.diff); + } else if (loggerError instanceof Error) { + core.setFailed(loggerError); } if (pluginOptions.postCommentOnError && loggerError) { diff --git a/src/server.ts b/src/server.ts index 65cb55e..f054c71 100644 --- a/src/server.ts +++ b/src/server.ts @@ -101,11 +101,13 @@ export function createPlugin (err instanceof Error ? err.message : err)).join("\n\n"), { error }); + } else if (error instanceof Error || error instanceof LogReturn) { loggerError = error; } else { - loggerError = context.logger.error(`Error: ${error}`); + loggerError = context.logger.error(String(error)); } if (pluginOptions.postCommentOnError && loggerError) { From 8aca1377a4b3003e357386b9c7cab3c0ae5c7db3 Mon Sep 17 00:00:00 2001 From: whilefoo Date: Tue, 18 Feb 2025 20:08:29 +0100 Subject: [PATCH 2/2] fix: refactor into function --- src/actions.ts | 10 ++-------- src/error.ts | 28 ++++++++++++++++++++++++++++ src/server.ts | 12 +++--------- 3 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 src/error.ts diff --git a/src/actions.ts b/src/actions.ts index 37a871b..31b182e 100644 --- a/src/actions.ts +++ b/src/actions.ts @@ -6,6 +6,7 @@ import { LogReturn, Logs } from "@ubiquity-os/ubiquity-os-logger"; import { config } from "dotenv"; import { CommentHandler } from "./comment"; import { Context } from "./context"; +import { transformError } from "./error"; import { customOctokit } from "./octokit"; import { verifySignature } from "./signature"; import { inputSchema } from "./types/input-schema"; @@ -96,14 +97,7 @@ export async function createActionsPlugin (err instanceof Error ? err.message : err)).join("\n\n"), { error }); - } else if (error instanceof Error || error instanceof LogReturn) { - loggerError = error; - } else { - loggerError = context.logger.error(String(error)); - } + const loggerError = transformError(context, error); if (loggerError instanceof LogReturn) { core.setFailed(loggerError.logMessage.diff); diff --git a/src/error.ts b/src/error.ts new file mode 100644 index 0000000..5333ae8 --- /dev/null +++ b/src/error.ts @@ -0,0 +1,28 @@ +import { LogReturn } from "@ubiquity-os/ubiquity-os-logger"; +import { Context } from "./context"; + +export function transformError(context: Context, error: unknown) { + let loggerError: LogReturn | Error; + if (error instanceof AggregateError) { + loggerError = context.logger.error( + error.errors + .map((err) => { + if (err instanceof LogReturn) { + return err.logMessage.raw; + } else if (err instanceof Error) { + return err.message; + } else { + return err; + } + }) + .join("\n\n"), + { error } + ); + } else if (error instanceof Error || error instanceof LogReturn) { + loggerError = error; + } else { + loggerError = context.logger.error(String(error)); + } + + return loggerError; +} diff --git a/src/server.ts b/src/server.ts index f054c71..e9930c3 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,11 +1,12 @@ import { EmitterWebhookEventName as WebhookEventName } from "@octokit/webhooks"; import { Value } from "@sinclair/typebox/value"; -import { LogReturn, Logs } from "@ubiquity-os/ubiquity-os-logger"; +import { Logs } from "@ubiquity-os/ubiquity-os-logger"; import { Hono } from "hono"; import { env as honoEnv } from "hono/adapter"; import { HTTPException } from "hono/http-exception"; import { CommentHandler } from "./comment"; import { Context } from "./context"; +import { transformError } from "./error"; import { PluginRuntimeInfo } from "./helpers/runtime-info"; import { customOctokit } from "./octokit"; import { verifySignature } from "./signature"; @@ -101,14 +102,7 @@ export function createPlugin (err instanceof Error ? err.message : err)).join("\n\n"), { error }); - } else if (error instanceof Error || error instanceof LogReturn) { - loggerError = error; - } else { - loggerError = context.logger.error(String(error)); - } + const loggerError = transformError(context, error); if (pluginOptions.postCommentOnError && loggerError) { await context.commentHandler.postComment(context, loggerError);