From 77c2fbded4b8358406e83cf55a424199a2382819 Mon Sep 17 00:00:00 2001 From: gentlementlegen Date: Mon, 6 May 2024 16:01:01 +0900 Subject: [PATCH] feat!: removed unused parts of the old configuration --- .github/.ubiquibot-config.yml | 67 --------- src/types/configuration-types.ts | 68 --------- src/types/configuration/comment-types.ts | 38 ----- .../common-incentive-config-type.ts | 10 -- .../configuration/content-evaluator-config.ts | 10 -- src/types/configuration/data-purge-config.ts | 10 -- .../formatting-evaluator-config.ts | 27 ---- .../configuration/github-comment-config.ts | 18 --- src/types/configuration/index.ts | 8 -- .../permit-generation-configuration.ts | 10 -- .../configuration/user-extractor-config.ts | 14 -- src/types/index.ts | 1 - src/utils/generate-configuration.ts | 34 +---- tests/__mocks__/test-default-conf-obj.ts | 95 ------------ tests/__mocks__/test-valid-conf-obj.ts | 136 ------------------ tests/configuration.test.ts | 24 ++-- 16 files changed, 17 insertions(+), 553 deletions(-) delete mode 100644 src/types/configuration/comment-types.ts delete mode 100644 src/types/configuration/common-incentive-config-type.ts delete mode 100644 src/types/configuration/content-evaluator-config.ts delete mode 100644 src/types/configuration/data-purge-config.ts delete mode 100644 src/types/configuration/formatting-evaluator-config.ts delete mode 100644 src/types/configuration/github-comment-config.ts delete mode 100644 src/types/configuration/index.ts delete mode 100644 src/types/configuration/permit-generation-configuration.ts delete mode 100644 src/types/configuration/user-extractor-config.ts diff --git a/.github/.ubiquibot-config.yml b/.github/.ubiquibot-config.yml index 1655776..d009955 100644 --- a/.github/.ubiquibot-config.yml +++ b/.github/.ubiquibot-config.yml @@ -1,70 +1,3 @@ -incentives: - enabled: true - contentEvaluator: - enabled: true - userExtractor: - enabled: true - redeemTask: true - dataPurge: - enabled: true - formattingEvaluator: - enabled: true - scores: - br: 0 - code: 1 - p: 1 - em: 0 - img: 0 - strong: 0 - blockquote: 0 - h1: 1 - h2: 1 - h3: 1 - h4: 1 - h5: 1 - h6: 1 - a: 1 - li: 1 - td: 1 - hr: 0 - multipliers: - - type: [ ISSUE, ISSUER, SPECIFICATION ] - formattingMultiplier: 1 - wordValue: 0.1 - - type: [ ISSUE, ISSUER, COMMENTED ] - formattingMultiplier: 1 - wordValue: 0.2 - - type: [ ISSUE, ASSIGNEE, COMMENTED ] - formattingMultiplier: 0 - wordValue: 0 - - type: [ ISSUE, COLLABORATOR, COMMENTED ] - formattingMultiplier: 1 - wordValue: 0.1 - - type: [ ISSUE, CONTRIBUTOR, COMMENTED ] - formattingMultiplier: 0.25 - wordValue: 0.1 - - type: [ REVIEW, ISSUER, TASK ] - formattingMultiplier: 0 - wordValue: 0 - - type: [ REVIEW, ISSUER, COMMENTED ] - formattingMultiplier: 2 - wordValue: 0.2 - - type: [ REVIEW, ASSIGNEE, COMMENTED ] - formattingMultiplier: 1 - wordValue: 0.1 - - type: [ REVIEW, COLLABORATOR, COMMENTED ] - formattingMultiplier: 1 - wordValue: 0.1 - - type: [ REVIEW, CONTRIBUTOR, COMMENTED ] - formattingMultiplier: 0.25 - wordValue: 0.1 - permitGeneration: - enabled: true - githubComment: - enabled: true - post: true - debug: false - plugins: 'issues.closed': - skipBotEvents: true diff --git a/src/types/configuration-types.ts b/src/types/configuration-types.ts index 9c80fb3..47881f3 100644 --- a/src/types/configuration-types.ts +++ b/src/types/configuration-types.ts @@ -1,18 +1,7 @@ import { ObjectOptions, Static, StaticDecode, StringOptions, TProperties, Type as T } from "@sinclair/typebox"; import ms from "ms"; import { StandardValidator } from "typebox-validators"; -import { contentEvaluatorConfigurationType } from "./configuration/content-evaluator-config"; -import { dataPurgeConfigurationType } from "./configuration/data-purge-config"; -import { formattingEvaluatorConfigurationType } from "./configuration/formatting-evaluator-config"; -import { githubCommentConfigurationType } from "./configuration/github-comment-config"; -import { permitGenerationConfigurationType } from "./configuration/permit-generation-configuration"; import { pluginConfigurationSchema } from "./configuration/plugin-configuration"; -import { userExtractorConfigurationType } from "./configuration/user-extractor-config"; - -const promotionComment = - "###### If you enjoy the DevPool experience, please follow [Ubiquity on GitHub](https://github.com/ubiquity) and star [this repo](https://github.com/ubiquity/devpool-directory) to show your support. It helps a lot!"; -const defaultGreetingHeader = - "Thank you for contributing! Please be sure to set your wallet address before completing your first task so that you can collect your reward."; export enum LogLevel { FATAL = "fatal", @@ -22,12 +11,6 @@ export enum LogLevel { DEBUG = "debug", } -const allCommands = ["start", "stop", "help", "query", "ask", "multiplier", "labels", "authorize", "wallet"] as const; - -const defaultTimeLabels = ["Time: <1 Hour", "Time: <2 Hours", "Time: <4 Hours", "Time: <1 Day", "Time: <1 Week"]; - -const defaultPriorityLabels = ["Priority: 1 (Normal)", "Priority: 2 (Medium)", "Priority: 3 (High)", "Priority: 4 (Urgent)", "Priority: 5 (Emergency)"]; - function strictObject(obj: T, options?: ObjectOptions) { return T.Object(obj, { additionalProperties: false, default: {}, ...options }); } @@ -64,57 +47,6 @@ export type EnvConfigType = Static; export const botConfigSchema = strictObject( { - keys: strictObject({ - evmPrivateEncrypted: T.Optional(T.String()), - openAi: T.Optional(T.String()), - }), - features: strictObject({ - assistivePricing: T.Boolean({ default: false }), - defaultLabels: T.Array(T.String(), { default: [] }), - newContributorGreeting: strictObject({ - enabled: T.Boolean({ default: false }), - header: T.String({ default: defaultGreetingHeader }), - displayHelpMenu: T.Boolean({ default: true }), - footer: T.String({ default: promotionComment }), - }), - publicAccessControl: strictObject({ - setLabel: T.Boolean({ default: true }), - fundExternalClosedIssue: T.Boolean({ default: true }), - }), - isNftRewardEnabled: T.Boolean({ default: false }), - }), - timers: strictObject({ - reviewDelayTolerance: stringDuration({ default: "1 day" }), - taskStaleTimeoutDuration: stringDuration({ default: "4 weeks" }), - taskFollowUpDuration: stringDuration({ default: "0.5 weeks" }), - taskDisqualifyDuration: stringDuration({ default: "1 week" }), - }), - payments: strictObject({ - maxPermitPrice: T.Number({ default: Number.MAX_SAFE_INTEGER }), - evmNetworkId: T.Number({ default: 1 }), - basePriceMultiplier: T.Number({ default: 1 }), - issueCreatorMultiplier: T.Number({ default: 1 }), - }), - disabledCommands: T.Array(T.String(), { default: allCommands }), - incentives: strictObject({ - enabled: T.Boolean({ default: true }), - contentEvaluator: contentEvaluatorConfigurationType, - userExtractor: userExtractorConfigurationType, - dataPurge: dataPurgeConfigurationType, - formattingEvaluator: formattingEvaluatorConfigurationType, - permitGeneration: permitGenerationConfigurationType, - githubComment: githubCommentConfigurationType, - }), - labels: strictObject({ - time: T.Array(T.String(), { default: defaultTimeLabels }), - priority: T.Array(T.String(), { default: defaultPriorityLabels }), - }), - miscellaneous: strictObject({ - maxConcurrentTasks: T.Number({ default: Number.MAX_SAFE_INTEGER }), - promotionComment: T.String({ default: promotionComment }), - registerWalletWithVerification: T.Boolean({ default: false }), - openAiTokenLimit: T.Number({ default: 100000 }), - }), plugins: pluginConfigurationSchema, }, { default: undefined } // top level object can't have default! diff --git a/src/types/configuration/comment-types.ts b/src/types/configuration/comment-types.ts deleted file mode 100644 index 912575f..0000000 --- a/src/types/configuration/comment-types.ts +++ /dev/null @@ -1,38 +0,0 @@ -export enum CommentType { - /** - * Review related item - */ - REVIEW = 0b1, - /** - * Issue related item - */ - ISSUE = 0b10, - /** - * User assigned to the {@link CommentType.ISSUE} or {@link CommentType.REVIEW} - */ - ASSIGNEE = 0b100, - /** - * The author of the {@link CommentType.ISSUE} or {@link CommentType.REVIEW} - */ - ISSUER = 0b1000, - /** - * A user that is part of the organization or owner of the repo - */ - COLLABORATOR = 0b10000, - /** - * A user that is NOT part of the organization nor owner of the repo - */ - CONTRIBUTOR = 0b100000, - /** - * A user comment action on a {@link CommentType.ISSUE} or {@link CommentType.REVIEW} - */ - COMMENTED = 0b1000000, - /** - * Pull request opening item - */ - TASK = 0b10000000, - /** - * Issue opening item - */ - SPECIFICATION = 0b100000000, -} diff --git a/src/types/configuration/common-incentive-config-type.ts b/src/types/configuration/common-incentive-config-type.ts deleted file mode 100644 index eed1eb8..0000000 --- a/src/types/configuration/common-incentive-config-type.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Type, Static } from "@sinclair/typebox"; - -export const baseIncentiveConfiguration = Type.Object({ - /** - * Enables or disabled this module - */ - enabled: Type.Boolean({ default: true }), -}); - -export type BaseConfiguration = Static; diff --git a/src/types/configuration/content-evaluator-config.ts b/src/types/configuration/content-evaluator-config.ts deleted file mode 100644 index 4b5c41d..0000000 --- a/src/types/configuration/content-evaluator-config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Static, Type } from "@sinclair/typebox"; - -export const contentEvaluatorConfigurationType = Type.Object({ - /** - * Enables or disabled this module - */ - enabled: Type.Boolean(), -}); - -export type ContentEvaluatorConfiguration = Static; diff --git a/src/types/configuration/data-purge-config.ts b/src/types/configuration/data-purge-config.ts deleted file mode 100644 index 5fafca9..0000000 --- a/src/types/configuration/data-purge-config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Type, Static } from "@sinclair/typebox"; - -export const dataPurgeConfigurationType = Type.Object({ - /** - * Enables or disabled this module - */ - enabled: Type.Boolean({ default: true }), -}); - -export type DataPurgeConfiguration = Static; diff --git a/src/types/configuration/formatting-evaluator-config.ts b/src/types/configuration/formatting-evaluator-config.ts deleted file mode 100644 index 4c5f44f..0000000 --- a/src/types/configuration/formatting-evaluator-config.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Static, Type } from "@sinclair/typebox"; -import { CommentType } from "./comment-types"; - -const type = Type.Union([...Object.keys(CommentType).map((key) => Type.Literal(key as keyof typeof CommentType))]); - -export const formattingEvaluatorConfigurationType = Type.Object({ - /** - * Enables or disabled this module - */ - enabled: Type.Boolean({ default: true }), - /** - * Multipliers applied to different parts of the comment body content - */ - multipliers: Type.Array( - Type.Object({ - type: Type.Array(type), - formattingMultiplier: Type.Number(), - wordValue: Type.Number(), - }) - ), - /** - * Attributed score per HTML entity - */ - scores: Type.Record(Type.String(), Type.Number()), -}); - -export type FormattingEvaluatorConfiguration = Static; diff --git a/src/types/configuration/github-comment-config.ts b/src/types/configuration/github-comment-config.ts deleted file mode 100644 index 30c1622..0000000 --- a/src/types/configuration/github-comment-config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Static, Type } from "@sinclair/typebox"; - -export const githubCommentConfigurationType = Type.Object({ - /** - * Enables or disabled this module - */ - enabled: Type.Boolean({ default: true }), - /** - * Enables posting to the related GitHub Issue - */ - post: Type.Boolean({ default: true }), - /** - * Enables debug by creating a local html file of the rendered comment - */ - debug: Type.Boolean({ default: false }), -}); - -export type GithubCommentConfiguration = Static; diff --git a/src/types/configuration/index.ts b/src/types/configuration/index.ts deleted file mode 100644 index 37707e9..0000000 --- a/src/types/configuration/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from "./comment-types"; -export * from "./content-evaluator-config"; -export * from "./data-purge-config"; -export * from "./common-incentive-config-type"; -export * from "./github-comment-config"; -export * from "./formatting-evaluator-config"; -export * from "./permit-generation-configuration"; -export * from "./user-extractor-config"; diff --git a/src/types/configuration/permit-generation-configuration.ts b/src/types/configuration/permit-generation-configuration.ts deleted file mode 100644 index e755f2f..0000000 --- a/src/types/configuration/permit-generation-configuration.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Static, Type } from "@sinclair/typebox"; - -export const permitGenerationConfigurationType = Type.Object({ - /** - * Enables or disabled this module - */ - enabled: Type.Boolean(), -}); - -export type PermitGenerationConfiguration = Static; diff --git a/src/types/configuration/user-extractor-config.ts b/src/types/configuration/user-extractor-config.ts deleted file mode 100644 index 4cb2bf7..0000000 --- a/src/types/configuration/user-extractor-config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Static, Type } from "@sinclair/typebox"; - -export const userExtractorConfigurationType = Type.Object({ - /** - * Enables or disabled this module - */ - enabled: Type.Boolean({ default: true }), - /** - * Is the task redeemable, e.g. can the user collect the bounty? - */ - redeemTask: Type.Boolean({ default: true }), -}); - -export type UserExtractorConfiguration = Static; diff --git a/src/types/index.ts b/src/types/index.ts index d310596..e65c959 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,2 @@ export * from "./configuration-types"; export * from "./valid-html-elements"; -export * from "./configuration"; diff --git a/src/utils/generate-configuration.ts b/src/utils/generate-configuration.ts index 1ed2e0e..d502be6 100644 --- a/src/utils/generate-configuration.ts +++ b/src/utils/generate-configuration.ts @@ -1,9 +1,9 @@ import { Value } from "@sinclair/typebox/value"; import mergeWith from "lodash/merge"; import YAML from "yaml"; -import { BotConfig, botConfigSchema, stringDuration, validateBotConfig } from "../types"; // @ts-expect-error gets transformed by rollup import orgConfig from "../../.github/.ubiquibot-config.yml"; +import { BotConfig, botConfigSchema, validateBotConfig } from "../types"; import { githubPluginType } from "../types/configuration/plugin-configuration"; export function generateConfiguration(repoConfig?: BotConfig): BotConfig { @@ -43,38 +43,6 @@ export function generateConfiguration(repoConfig?: BotConfig): BotConfig { // That's why we have transform every field manually and catch errors export function transformConfig(config: BotConfig) { let errorMsg = ""; - try { - config.timers.reviewDelayTolerance = Value.Decode(stringDuration(), config.timers.reviewDelayTolerance); - } catch (err: unknown) { - const decodeError = err as DecodeError; - if (decodeError.value) { - errorMsg += `Invalid reviewDelayTolerance value: ${decodeError.value}\n`; - } - } - try { - config.timers.taskStaleTimeoutDuration = Value.Decode(stringDuration(), config.timers.taskStaleTimeoutDuration); - } catch (err: unknown) { - const decodeError = err as DecodeError; - if (decodeError.value) { - errorMsg += `Invalid taskStaleTimeoutDuration value: ${decodeError.value}\n`; - } - } - try { - config.timers.taskFollowUpDuration = Value.Decode(stringDuration(), config.timers.taskFollowUpDuration); - } catch (err: unknown) { - const decodeError = err as DecodeError; - if (decodeError.value) { - errorMsg += `Invalid taskFollowUpDuration value: ${decodeError.value}\n`; - } - } - try { - config.timers.taskDisqualifyDuration = Value.Decode(stringDuration(), config.timers.taskDisqualifyDuration); - } catch (err: unknown) { - const decodeError = err as DecodeError; - if (decodeError.value) { - errorMsg += `Invalid taskDisqualifyDuration value: ${decodeError.value}\n`; - } - } errorMsg += transformUseReferences(config); if (errorMsg) throw new Error(errorMsg); } diff --git a/tests/__mocks__/test-default-conf-obj.ts b/tests/__mocks__/test-default-conf-obj.ts index 424c04d..ad83ad8 100644 --- a/tests/__mocks__/test-default-conf-obj.ts +++ b/tests/__mocks__/test-default-conf-obj.ts @@ -1,99 +1,4 @@ const defaultConfig = { - incentives: { - enabled: true, - contentEvaluator: { - enabled: true, - }, - userExtractor: { - enabled: true, - redeemTask: true, - }, - dataPurge: { - enabled: true, - }, - formattingEvaluator: { - enabled: true, - scores: { - br: 0, - code: 1, - p: 1, - em: 0, - img: 0, - strong: 0, - blockquote: 0, - h1: 1, - h2: 1, - h3: 1, - h4: 1, - h5: 1, - h6: 1, - a: 1, - li: 1, - td: 1, - hr: 0, - }, - multipliers: [ - { - type: ["ISSUE", "ISSUER", "SPECIFICATION"], - formattingMultiplier: 1, - wordValue: 0.1, - }, - { - type: ["ISSUE", "ISSUER", "COMMENTED"], - formattingMultiplier: 1, - wordValue: 0.2, - }, - { - type: ["ISSUE", "ASSIGNEE", "COMMENTED"], - formattingMultiplier: 0, - wordValue: 0, - }, - { - type: ["ISSUE", "COLLABORATOR", "COMMENTED"], - formattingMultiplier: 1, - wordValue: 0.1, - }, - { - type: ["ISSUE", "CONTRIBUTOR", "COMMENTED"], - formattingMultiplier: 0.25, - wordValue: 0.1, - }, - { - type: ["REVIEW", "ISSUER", "TASK"], - formattingMultiplier: 0, - wordValue: 0, - }, - { - type: ["REVIEW", "ISSUER", "COMMENTED"], - formattingMultiplier: 2, - wordValue: 0.2, - }, - { - type: ["REVIEW", "ASSIGNEE", "COMMENTED"], - formattingMultiplier: 1, - wordValue: 0.1, - }, - { - type: ["REVIEW", "COLLABORATOR", "COMMENTED"], - formattingMultiplier: 1, - wordValue: 0.1, - }, - { - type: ["REVIEW", "CONTRIBUTOR", "COMMENTED"], - formattingMultiplier: 0.25, - wordValue: 0.1, - }, - ], - }, - permitGeneration: { - enabled: true, - }, - githubComment: { - enabled: true, - post: true, - debug: false, - }, - }, plugins: { "issues.closed": [ { diff --git a/tests/__mocks__/test-valid-conf-obj.ts b/tests/__mocks__/test-valid-conf-obj.ts index 2180057..2ebcf98 100644 --- a/tests/__mocks__/test-valid-conf-obj.ts +++ b/tests/__mocks__/test-valid-conf-obj.ts @@ -1,140 +1,4 @@ const validConfig = { - keys: {}, - features: { - assistivePricing: false, - defaultLabels: [], - newContributorGreeting: { - enabled: false, - header: "Thank you for contributing! Please be sure to set your wallet address before completing your first task so that you can collect your reward.", - displayHelpMenu: true, - footer: - "###### If you enjoy the DevPool experience, please follow [Ubiquity on GitHub](https://github.com/ubiquity) and star [this repo](https://github.com/ubiquity/devpool-directory) to show your support. It helps a lot!", - }, - publicAccessControl: { - setLabel: true, - fundExternalClosedIssue: true, - }, - isNftRewardEnabled: false, - }, - timers: { - reviewDelayTolerance: 86400000, - taskStaleTimeoutDuration: 2419200000, - taskFollowUpDuration: 302400000, - taskDisqualifyDuration: 604800000, - }, - payments: { - maxPermitPrice: 9007199254740991, - evmNetworkId: 1, - basePriceMultiplier: 1, - issueCreatorMultiplier: 1, - }, - disabledCommands: ["start", "stop", "help", "query", "ask", "multiplier", "labels", "authorize", "wallet"], - incentives: { - enabled: true, - contentEvaluator: { - enabled: true, - }, - userExtractor: { - enabled: true, - redeemTask: true, - }, - dataPurge: { - enabled: true, - }, - formattingEvaluator: { - enabled: true, - scores: { - br: 0, - code: 1, - p: 1, - em: 0, - img: 0, - strong: 0, - blockquote: 0, - h1: 1, - h2: 1, - h3: 1, - h4: 1, - h5: 1, - h6: 1, - a: 1, - li: 1, - td: 1, - hr: 0, - }, - multipliers: [ - { - type: ["ISSUE", "ISSUER", "SPECIFICATION"], - formattingMultiplier: 1, - wordValue: 0.1, - }, - { - type: ["ISSUE", "ISSUER", "COMMENTED"], - formattingMultiplier: 1, - wordValue: 0.2, - }, - { - type: ["ISSUE", "ASSIGNEE", "COMMENTED"], - formattingMultiplier: 0, - wordValue: 0, - }, - { - type: ["ISSUE", "COLLABORATOR", "COMMENTED"], - formattingMultiplier: 1, - wordValue: 0.1, - }, - { - type: ["ISSUE", "CONTRIBUTOR", "COMMENTED"], - formattingMultiplier: 0.25, - wordValue: 0.1, - }, - { - type: ["REVIEW", "ISSUER", "TASK"], - formattingMultiplier: 0, - wordValue: 0, - }, - { - type: ["REVIEW", "ISSUER", "COMMENTED"], - formattingMultiplier: 2, - wordValue: 0.2, - }, - { - type: ["REVIEW", "ASSIGNEE", "COMMENTED"], - formattingMultiplier: 1, - wordValue: 0.1, - }, - { - type: ["REVIEW", "COLLABORATOR", "COMMENTED"], - formattingMultiplier: 1, - wordValue: 0.1, - }, - { - type: ["REVIEW", "CONTRIBUTOR", "COMMENTED"], - formattingMultiplier: 0.25, - wordValue: 0.1, - }, - ], - }, - permitGeneration: { - enabled: true, - }, - githubComment: { - enabled: true, - post: true, - debug: false, - }, - }, - labels: { - time: ["Time: <1 Hour", "Time: <2 Hours", "Time: <4 Hours", "Time: <1 Day", "Time: <1 Week"], - priority: ["Priority: 1 (Normal)", "Priority: 2 (Medium)", "Priority: 3 (High)", "Priority: 4 (Urgent)", "Priority: 5 (Emergency)"], - }, - miscellaneous: { - maxConcurrentTasks: 9007199254740991, - promotionComment: - "###### If you enjoy the DevPool experience, please follow [Ubiquity on GitHub](https://github.com/ubiquity) and star [this repo](https://github.com/ubiquity/devpool-directory) to show your support. It helps a lot!", - registerWalletWithVerification: false, - openAiTokenLimit: 100000, - }, plugins: { "*": [], "issues.closed": [ diff --git a/tests/configuration.test.ts b/tests/configuration.test.ts index db11342..21d427b 100644 --- a/tests/configuration.test.ts +++ b/tests/configuration.test.ts @@ -29,16 +29,24 @@ describe("Configuration generation", () => { test("Transform configuration", async () => { const cfg = generateConfiguration(); - expect(() => { - transformConfig(cfg); - }).toThrow(); const stringCfg = { ...cfg, - timers: { - reviewDelayTolerance: "86400000", - taskStaleTimeoutDuration: "2419200000", - taskFollowUpDuration: "302400000", - taskDisqualifyDuration: "604800000", + plugins: { + ...cfg.plugins, + "issues.closed": [ + { + skipBotEvents: true, + uses: [ + { + plugin: "ubiquibot/conversation-rewards@testing/ubiquibot-v2-testing", + type: "github", + with: { + evmNetworkId: 100, + }, + }, + ], + }, + ], }, } as unknown as BotConfig; transformConfig(stringCfg);