diff --git a/src/types/plugin-input.ts b/src/types/plugin-input.ts index 341b2db..0810608 100644 --- a/src/types/plugin-input.ts +++ b/src/types/plugin-input.ts @@ -13,14 +13,21 @@ export enum Role { COLLABORATOR = "COLLABORATOR", } -const rolesWithReviewAuthority = T.Array(T.Enum(Role), - { +const rolesWithReviewAuthority = T.Array(T.Enum(Role), + { default: [Role.OWNER, Role.ADMIN, Role.MEMBER, Role.COLLABORATOR], uniqueItems: true, - description: "When considering a user for a task: which roles should be considered as having review authority? All others are ignored." -}); + description: "When considering a user for a task: which roles should be considered as having review authority? All others are ignored.", + examples: [[Role.OWNER, Role.ADMIN], [Role.MEMBER, Role.COLLABORATOR]] + }); -const maxConcurrentTasks = T.Transform(T.Record(T.String(), T.Integer(), { default: { member: 10, contributor: 2 }, description: "The maximum number of tasks a user can have assigned to them at once, based on their role." })) +const maxConcurrentTasks = T.Transform(T.Record(T.String(), T.Integer(), + { + default: { member: 10, contributor: 2 }, + description: "The maximum number of tasks a user can have assigned to them at once, based on their role.", + examples: [{ member: 5, contributor: 1 }] + } +)) .Decode((obj) => { // normalize the role keys to lowercase obj = Object.keys(obj).reduce( @@ -42,16 +49,27 @@ const maxConcurrentTasks = T.Transform(T.Record(T.String(), T.Integer(), { defau export const pluginSettingsSchema = T.Object( { - reviewDelayTolerance: T.String({ default: "1 Day", description: "When considering a user for a task: if they have existing PRs with no reviews, how long should we wait before 'increasing' their assignable task limit?" }), - taskStaleTimeoutDuration: T.String({ default: "30 Days", description: "When displaying the '/start' response, how long should we wait before considering a task 'stale' and provide a warning?" }), + reviewDelayTolerance: T.String({ default: "1 Day", examples: ["1 Day", "5 Days"], description: "When considering a user for a task: if they have existing PRs with no reviews, how long should we wait before 'increasing' their assignable task limit?" }), + taskStaleTimeoutDuration: T.String({ default: "30 Days", examples: ["1 Day", "5 Days"], description: "When displaying the '/start' response, how long should we wait before considering a task 'stale' and provide a warning?" }), startRequiresWallet: T.Boolean({ default: true, description: "If true, users must set their wallet address with the /wallet command before they can start tasks." }), maxConcurrentTasks: maxConcurrentTasks, - assignedIssueScope: T.Enum(AssignedIssueScope, { default: AssignedIssueScope.ORG, description: "When considering a user for a task: should we consider their assigned issues at the org, repo, or network level?" }), + assignedIssueScope: T.Enum(AssignedIssueScope, + { + default: AssignedIssueScope.ORG, + description: "When considering a user for a task: should we consider their assigned issues at the org, repo, or network level?", + examples: [AssignedIssueScope.ORG, AssignedIssueScope.REPO, AssignedIssueScope.NETWORK] + } + ), emptyWalletText: T.String({ default: "Please set your wallet address with the /wallet command first and try again.", description: "a message to display when a user tries to start a task without setting their wallet address." }), rolesWithReviewAuthority: T.Transform(rolesWithReviewAuthority) .Decode((value) => value.map((role) => role.toUpperCase())) - .Encode((value) => value.map((role) => role.toUpperCase())), - requiredLabelsToStart: T.Array(T.String(), { default: [], description: "If set, a task must have at least one of these labels to be started." }), + .Encode((value) => value.map((role) => Role[role as keyof typeof Role])), + requiredLabelsToStart: T.Array(T.String(), + { + default: [], + description: "If set, a task must have at least one of these labels to be started.", + examples: [["Priority: 5 (Emergency)"], ["Good First Issue"]] + }), }, { default: {},