From b87f4cad9106ae802ce6407dd58b2221264e8554 Mon Sep 17 00:00:00 2001 From: Mentlegen <9807008+gentlementlegen@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:52:12 +0900 Subject: [PATCH 01/15] fix(sdk): add postComment function for structured metadata Introduce postComment function to embed structured metadata in comments. --- src/sdk/actions.ts | 54 ++++++++++++++++++++++++++++++++++++++++++---- src/sdk/index.ts | 2 +- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/sdk/actions.ts b/src/sdk/actions.ts index 577d71d..54f471f 100644 --- a/src/sdk/actions.ts +++ b/src/sdk/actions.ts @@ -1,7 +1,7 @@ import * as core from "@actions/core"; import * as github from "@actions/github"; import { EmitterWebhookEventName as WebhookEventName } from "@octokit/webhooks"; -import { Type as T, TAnySchema } from "@sinclair/typebox"; +import { TAnySchema, Type as T } from "@sinclair/typebox"; import { Value } from "@sinclair/typebox/value"; import { LOG_LEVEL, LogLevel, LogReturn, Logs } from "@ubiquity-os/ubiquity-os-logger"; import { config } from "dotenv"; @@ -31,6 +31,8 @@ const inputSchema = T.Object({ signature: T.String(), }); +const HEADER_NAME = "Ubiquity"; + export async function createActionsPlugin( handler: (context: Context) => Promise | undefined>, options?: Options @@ -96,12 +98,12 @@ export async function createActionsPlugin`, }); } else { - context.logger.info("Cannot post comment because issue is not found in the payload"); + context.logger.info("Cannot post error comment because issue is not found in the payload"); } } @@ -130,3 +132,47 @@ async function returnDataToKernel(repoToken: string, stateId: string, output: ob }, }); } + +function createStructuredMetadata(className: string | undefined, logReturn: LogReturn) { + let logMessage, metadata; + if (logReturn) { + logMessage = logReturn.logMessage; + metadata = logReturn.metadata; + } + + const jsonPretty = sanitizeMetadata(metadata); + const stackLine = new Error().stack?.split("\n")[2] ?? ""; + const caller = stackLine.match(/at (\S+)/)?.[1] ?? ""; + const ubiquityMetadataHeader = `"].join("\n"); + + if (logMessage?.type === "fatal") { + // if the log message is fatal, then we want to show the metadata + metadataSerialized = [metadataSerializedVisible, metadataSerializedHidden].join("\n"); + } else { + // otherwise we want to hide it + metadataSerialized = metadataSerializedHidden; + } + + return metadataSerialized; +} + +/** + * Posts a comment on a GitHub issue if the issue exists in the context payload, embedding structured metadata to it. + */ +export async function postComment(context: Context, message: LogReturn) { + if ("issue" in context.payload && context.payload.repository?.owner?.login) { + const metadata = createStructuredMetadata(message.metadata?.name, message); + await context.octokit.rest.issues.createComment({ + owner: context.payload.repository.owner.login, + repo: context.payload.repository.name, + issue_number: context.payload.issue.number, + body: [message.logMessage.raw, metadata].join("\n"), + }); + } else { + context.logger.info("Cannot post comment because issue is not found in the payload"); + } +} diff --git a/src/sdk/index.ts b/src/sdk/index.ts index 4339ddf..b28d108 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -1,4 +1,4 @@ export { createPlugin } from "./server"; -export { createActionsPlugin } from "./actions"; +export { createActionsPlugin, postComment } from "./actions"; export type { Context } from "./context"; export * from "./constants"; From 2b090cd26d8be7938ca9f33f8152e05506ce143e Mon Sep 17 00:00:00 2001 From: Mentlegen <9807008+gentlementlegen@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:56:12 +0900 Subject: [PATCH 02/15] fix: export Manifest type from SDK Added export for Manifest type to facilitate type usage in SDK implementations. --- src/sdk/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sdk/index.ts b/src/sdk/index.ts index b28d108..add6fbf 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -2,3 +2,4 @@ export { createPlugin } from "./server"; export { createActionsPlugin, postComment } from "./actions"; export type { Context } from "./context"; export * from "./constants"; +export type { Manifest } from "../types/manifest"; From a3e1202beb2fd55f5ff79e33fbc4f538ff145dfb Mon Sep 17 00:00:00 2001 From: Mentlegen <9807008+gentlementlegen@users.noreply.github.com> Date: Fri, 25 Oct 2024 12:16:58 +0900 Subject: [PATCH 03/15] fix: add paginateGraphQL plugin to customOctokit Introduced the paginateGraphQL plugin to enhance API request handling. --- bun.lockb | Bin 434509 -> 434956 bytes package.json | 7 ++++--- src/sdk/octokit.ts | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bun.lockb b/bun.lockb index 26de14f8e4e60fe8eabb621dbc082e9404b01495..6473eb26ad2dbdfa9e5db1e465c83fb10b04b19a 100755 GIT binary patch delta 84128 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

EN3ET~bA;2G>BBylhVS+12kf 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 { +export const customOctokit = Octokit.plugin(throttling, retry, paginateRest, restEndpointMethods, paginateGraphQL).defaults((instanceOptions: object) => { return Object.assign({}, defaultOptions, instanceOptions); }); From c9b92bc3a5d44f7a3b1e7625d02e3b349cdc067d Mon Sep 17 00:00:00 2001 From: Mentlegen <9807008+gentlementlegen@users.noreply.github.com> Date: Fri, 25 Oct 2024 13:00:18 +0900 Subject: [PATCH 04/15] chore(deps): update @sinclair/typebox to ^0.33.17 Updated @sinclair/typebox dependency version for compatibility. --- bun.lockb | Bin 434956 -> 434956 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 6473eb26ad2dbdfa9e5db1e465c83fb10b04b19a..98c3ed00d10b2d881fb12e177943c39f038a46aa 100755 GIT binary patch delta 199 zcmV;&0671Q#u|*q8jvm^01n-9zO3*}XORy)gQd+=68qejCrVA5aD9*WG+Zdyu};=Y z0U?*6L;)+4kVFWBSWLHAOaaAJK<}Nm*kp0v3U@!VPx~i0of5ZQKqqMgp~WyWYM3TM zxGd2N(yLGAIFYDjbZH-6TofX*%Fno!ppR@D9+skc0*76q0f$|p0=HeF19aR60bVsO zGA=Zi*nR}$2wpHQGcztRH@C!p1g6^oGnX;$1tOQgUIhu4&|C!xho4&ox1U=EZAYy< BQhopc delta 200 zcmV;(05|`P#u|*q8jvm^t!@l$;D-}x0d1=$sWwt*cwkGs?wFKYI5hh3rphh3rqw_TzGble9500000 z005WRegxzQFfKDPE;BU%x5R%0rrQHDE;E<0wFM!UU}Xgem(W}V35TCs1-GAD25m Date: Fri, 25 Oct 2024 16:35:03 +0900 Subject: [PATCH 05/15] fix: add error handling to schema decoding Introduce try-catch blocks for schema decoding to handle errors gracefully. --- src/sdk/actions.ts | 14 ++++++++++++-- src/sdk/server.ts | 15 +++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/sdk/actions.ts b/src/sdk/actions.ts index 54f471f..20bd1ab 100644 --- a/src/sdk/actions.ts +++ b/src/sdk/actions.ts @@ -57,14 +57,24 @@ export async function createActionsPlugin Date: Fri, 25 Oct 2024 16:37:59 +0900 Subject: [PATCH 06/15] chore: fix compile error --- src/github/handlers/push-event.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/github/handlers/push-event.ts b/src/github/handlers/push-event.ts index 2cf8f77..7ceea65 100644 --- a/src/github/handlers/push-event.ts +++ b/src/github/handlers/push-event.ts @@ -98,6 +98,7 @@ async function checkPluginConfigurations(context: GitHubContext<"push">, config: value: JSON.stringify(plugin), type: 0, schema: configSchema, + errors: [], }); } else { const validator = new Validator(manifest.configuration, "7", false); @@ -113,6 +114,7 @@ async function checkPluginConfigurations(context: GitHubContext<"push">, config: value: JSON.stringify(value), type: 0, schema: configSchema, + errors: [], }); } } From 99ef8abba967c7e3cfd93692d72af50d78cd15a7 Mon Sep 17 00:00:00 2001 From: Mentlegen <9807008+gentlementlegen@users.noreply.github.com> Date: Mon, 28 Oct 2024 11:56:45 +0900 Subject: [PATCH 07/15] refactor: simplify createStructuredMetadata function Consolidated variable initialization and improved error stack handling. --- src/sdk/actions.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/sdk/actions.ts b/src/sdk/actions.ts index 20bd1ab..518d809 100644 --- a/src/sdk/actions.ts +++ b/src/sdk/actions.ts @@ -144,14 +144,12 @@ async function returnDataToKernel(repoToken: string, stateId: string, output: ob } function createStructuredMetadata(className: string | undefined, logReturn: LogReturn) { - let logMessage, metadata; - if (logReturn) { - logMessage = logReturn.logMessage; - metadata = logReturn.metadata; - } + const logMessage = logReturn.logMessage; + const metadata = logReturn.metadata; const jsonPretty = sanitizeMetadata(metadata); - const stackLine = new Error().stack?.split("\n")[2] ?? ""; + const stack = logReturn.metadata?.stack; + const stackLine = (Array.isArray(stack) ? stack.join("\n") : stack)?.split("\n")[2] ?? ""; const caller = stackLine.match(/at (\S+)/)?.[1] ?? ""; const ubiquityMetadataHeader = `"].join("\n"); - - if (logMessage?.type === "fatal") { - // if the log message is fatal, then we want to show the metadata - metadataSerialized = [metadataSerializedVisible, metadataSerializedHidden].join("\n"); - } else { - // otherwise we want to hide it - metadataSerialized = metadataSerializedHidden; - } - - return metadataSerialized; -} - -/** - * Posts a comment on a GitHub issue if the issue exists in the context payload, embedding structured metadata to it. - */ -export async function postComment(context: Context, message: LogReturn) { - if ("issue" in context.payload && context.payload.repository?.owner?.login) { - const metadata = createStructuredMetadata(message.metadata?.name, message); - await context.octokit.rest.issues.createComment({ - owner: context.payload.repository.owner.login, - repo: context.payload.repository.name, - issue_number: context.payload.issue.number, - body: [message.logMessage.raw, metadata].join("\n"), - }); - } else { - context.logger.info("Cannot post comment because issue is not found in the payload"); - } -} diff --git a/src/sdk/comment.ts b/src/sdk/comment.ts new file mode 100644 index 0000000..d7dadd4 --- /dev/null +++ b/src/sdk/comment.ts @@ -0,0 +1,47 @@ +import { Context } from "./context"; +import { LogReturn } from "@ubiquity-os/ubiquity-os-logger"; +import { sanitizeMetadata } from "./util"; + +const HEADER_NAME = "Ubiquity"; + +/** + * Posts a comment on a GitHub issue if the issue exists in the context payload, embedding structured metadata to it. + */ +export async function postComment(context: Context, message: LogReturn) { + if ("issue" in context.payload && context.payload.repository?.owner?.login) { + const metadata = createStructuredMetadata(message.metadata?.name, message); + await context.octokit.rest.issues.createComment({ + owner: context.payload.repository.owner.login, + repo: context.payload.repository.name, + issue_number: context.payload.issue.number, + body: [message.logMessage.raw, metadata].join("\n"), + }); + } else { + context.logger.info("Cannot post comment because issue is not found in the payload"); + } +} + +function createStructuredMetadata(className: string | undefined, logReturn: LogReturn) { + const logMessage = logReturn.logMessage; + const metadata = logReturn.metadata; + + const jsonPretty = sanitizeMetadata(metadata); + const stack = logReturn.metadata?.stack; + const stackLine = (Array.isArray(stack) ? stack.join("\n") : stack)?.split("\n")[2] ?? ""; + const caller = stackLine.match(/at (\S+)/)?.[1] ?? ""; + const ubiquityMetadataHeader = `"].join("\n"); + + if (logMessage?.type === "fatal") { + // if the log message is fatal, then we want to show the metadata + metadataSerialized = [metadataSerializedVisible, metadataSerializedHidden].join("\n"); + } else { + // otherwise we want to hide it + metadataSerialized = metadataSerializedHidden; + } + + return metadataSerialized; +} diff --git a/src/sdk/index.ts b/src/sdk/index.ts index add6fbf..4e05ca0 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -1,5 +1,6 @@ export { createPlugin } from "./server"; -export { createActionsPlugin, postComment } from "./actions"; +export { createActionsPlugin } from "./actions"; +export { postComment } from "./comment"; export type { Context } from "./context"; export * from "./constants"; export type { Manifest } from "../types/manifest"; diff --git a/src/sdk/server.ts b/src/sdk/server.ts index 26d17d5..f1eabb8 100644 --- a/src/sdk/server.ts +++ b/src/sdk/server.ts @@ -9,8 +9,8 @@ import { KERNEL_PUBLIC_KEY } from "./constants"; import { Context } from "./context"; import { customOctokit } from "./octokit"; import { verifySignature } from "./signature"; -import { sanitizeMetadata } from "./util"; import { env as honoEnv } from "hono/adapter"; +import { postComment } from "./comment"; interface Options { kernelPublicKey?: string; @@ -109,16 +109,3 @@ export async function createPlugin`, - }); - } else { - context.logger.info("Cannot post comment because issue is not found in the payload"); - } -} From 1d3ee4c5ccb547c326eabea9d17a71a533073d36 Mon Sep 17 00:00:00 2001 From: Mentlegen <9807008+gentlementlegen@users.noreply.github.com> Date: Mon, 28 Oct 2024 12:02:54 +0900 Subject: [PATCH 09/15] chore: add carriage returns to serialized metadata Ensure proper formatting by adding carriage returns around serialized metadata. --- src/sdk/comment.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sdk/comment.ts b/src/sdk/comment.ts index d7dadd4..7a1397d 100644 --- a/src/sdk/comment.ts +++ b/src/sdk/comment.ts @@ -43,5 +43,6 @@ function createStructuredMetadata(className: string | undefined, logReturn: LogR metadataSerialized = metadataSerializedHidden; } - return metadataSerialized; + // Add carriage returns to avoid any formatting issue + return `\n${metadataSerialized}\n`; } From 37ca024c55cef96fa0624723e8c4f31891873518 Mon Sep 17 00:00:00 2001 From: Mentlegen <9807008+gentlementlegen@users.noreply.github.com> Date: Mon, 28 Oct 2024 13:03:02 +0900 Subject: [PATCH 10/15] fix: correct variable used in error logging Change from `payload.settings` to `inputs.settings` for accuracy in error logs. --- src/sdk/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdk/server.ts b/src/sdk/server.ts index 941c1c5..0cba802 100644 --- a/src/sdk/server.ts +++ b/src/sdk/server.ts @@ -66,7 +66,7 @@ export function createPlugin Date: Mon, 28 Oct 2024 13:15:24 +0900 Subject: [PATCH 11/15] fix: update comment body to use diff instead of raw log Changed the comment body in `comment.ts` to use `message.logMessage.diff`. --- src/sdk/comment.ts | 2 +- tests/sdk.test.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/sdk/comment.ts b/src/sdk/comment.ts index 7a1397d..cf87399 100644 --- a/src/sdk/comment.ts +++ b/src/sdk/comment.ts @@ -14,7 +14,7 @@ export async function postComment(context: Context, message: LogReturn) { owner: context.payload.repository.owner.login, repo: context.payload.repository.name, issue_number: context.payload.issue.number, - body: [message.logMessage.raw, metadata].join("\n"), + body: [message.logMessage.diff, metadata].join("\n"), }); } else { context.logger.info("Cannot post comment because issue is not found in the payload"); diff --git a/tests/sdk.test.ts b/tests/sdk.test.ts index 6657231..43e7357 100644 --- a/tests/sdk.test.ts +++ b/tests/sdk.test.ts @@ -146,11 +146,13 @@ describe("SDK worker tests", () => { body: `\`\`\`diff ! test error \`\`\` -`, +--> +`, }); }); it("Should accept correct request", async () => { From 2cbf1ed5eb053040c634adc80affe545b96c73fb Mon Sep 17 00:00:00 2001 From: gentlementlegen Date: Tue, 29 Oct 2024 13:00:07 +0900 Subject: [PATCH 12/15] chore(config): allow additional properties in plugin configuration Deleted revert-pr-108.txt and modified plugin-configuration.ts to permit additional properties. --- revert-pr-108.txt | 1 - src/github/types/plugin-configuration.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 revert-pr-108.txt diff --git a/revert-pr-108.txt b/revert-pr-108.txt deleted file mode 100644 index 72e6611..0000000 --- a/revert-pr-108.txt +++ /dev/null @@ -1 +0,0 @@ -This file was created to revert PR #108 \ No newline at end of file diff --git a/src/github/types/plugin-configuration.ts b/src/github/types/plugin-configuration.ts index 02316d7..0bd2b2d 100644 --- a/src/github/types/plugin-configuration.ts +++ b/src/github/types/plugin-configuration.ts @@ -80,7 +80,7 @@ export const configSchema = T.Object( plugins: handlerSchema, }, { - additionalProperties: false, + additionalProperties: true, } ); From 1aa8f0c0ce84ea110b7b00e9be1a536fe147a610 Mon Sep 17 00:00:00 2001 From: gentlementlegen Date: Thu, 31 Oct 2024 17:11:06 +0900 Subject: [PATCH 13/15] chore(validation): add input schema validation for request body Validate input schema and log errors if the body is invalid. --- src/sdk/server.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/sdk/server.ts b/src/sdk/server.ts index 0cba802..a7790a7 100644 --- a/src/sdk/server.ts +++ b/src/sdk/server.ts @@ -55,6 +55,12 @@ export function createPlugin Date: Fri, 1 Nov 2024 16:22:06 +0900 Subject: [PATCH 14/15] refactor: extract honoEnv call to a variable Improve readability by storing honoEnv result to a variable before use. --- src/sdk/server.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sdk/server.ts b/src/sdk/server.ts index a7790a7..cc88733 100644 --- a/src/sdk/server.ts +++ b/src/sdk/server.ts @@ -80,11 +80,12 @@ export function createPlugin Date: Tue, 5 Nov 2024 15:22:33 +0900 Subject: [PATCH 15/15] fix: resolve input decoding issue in server.ts Replaced ctx.req.json() with body in input decoding to ensure valid input handling. --- src/sdk/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdk/server.ts b/src/sdk/server.ts index cc88733..bf069cf 100644 --- a/src/sdk/server.ts +++ b/src/sdk/server.ts @@ -61,7 +61,7 @@ export function createPlugin