kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at cd7cada2f86b4e866a15b4323bb8d6d7ab5bba8b 75 lines 2.0 kB view raw
1import * as v from "valibot"; 2import { branchPatterns } from "../github/config"; 3 4export { branchPatterns }; 5 6export const giteaConfigSchema = v.object({ 7 baseUrl: v.pipe(v.string(), v.url()), 8 accessToken: v.pipe(v.string(), v.trim(), v.nonEmpty()), 9 repositoryOwner: v.pipe(v.string(), v.trim(), v.nonEmpty()), 10 repositoryName: v.pipe(v.string(), v.trim(), v.nonEmpty()), 11 webhookSecret: v.optional(v.string()), 12 branchPattern: v.optional(v.string()), 13 customBranchRegex: v.optional(v.string()), 14 commentTaskLinkOnGiteaIssue: v.optional(v.boolean()), 15 statusTransitions: v.optional( 16 v.object({ 17 onBranchPush: v.optional(v.string()), 18 onPROpen: v.optional(v.string()), 19 onPRMerge: v.optional(v.string()), 20 }), 21 ), 22}); 23 24export type GiteaConfig = v.InferOutput<typeof giteaConfigSchema>; 25 26export async function validateGiteaConfig( 27 config: unknown, 28): Promise<{ valid: boolean; errors?: string[] }> { 29 try { 30 v.parse(giteaConfigSchema, config); 31 return { valid: true }; 32 } catch (error) { 33 if (error instanceof v.ValiError) { 34 return { 35 valid: false, 36 errors: error.issues.map((issue) => issue.message), 37 }; 38 } 39 return { 40 valid: false, 41 errors: [error instanceof Error ? error.message : "Invalid config"], 42 }; 43 } 44} 45 46export const defaultGiteaConfig: Partial<GiteaConfig> = { 47 branchPattern: "{slug}-{number}", 48 commentTaskLinkOnGiteaIssue: true, 49 statusTransitions: { 50 onBranchPush: "in-progress", 51 onPROpen: "in-review", 52 onPRMerge: "done", 53 }, 54}; 55 56export function normalizeGiteaBaseUrl(url: string): string { 57 return url.trim().replace(/\/+$/, ""); 58} 59 60export function getDefaultGiteaConfig( 61 baseUrl: string, 62 accessToken: string, 63 repositoryOwner: string, 64 repositoryName: string, 65 webhookSecret: string, 66): GiteaConfig { 67 return { 68 baseUrl: normalizeGiteaBaseUrl(baseUrl), 69 accessToken, 70 repositoryOwner, 71 repositoryName, 72 webhookSecret, 73 ...defaultGiteaConfig, 74 }; 75}