feat: enhance evobgp with new command-line tools for bundle management, including pull, verify, and apply functionalities. Update go.mod to include necessary dependencies and complete todos in architecture plan for improved observability and deployment practices.
CI / changes (push) Successful in 4s
CI / go (push) Failing after 6s
CI / bird2 (push) Has been skipped
CI / openapi (push) Has been skipped

This commit is contained in:
Denozordec
2026-04-05 14:07:45 +07:00
parent 272542b92a
commit bf52b21150
131 changed files with 9222 additions and 17 deletions
@@ -0,0 +1,38 @@
<script lang="ts" module>
import { type VariantProps, tv } from 'tailwind-variants';
export const badgeVariants = tv({
base: 'focus:ring-ring inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-offset-2 focus:outline-none',
variants: {
variant: {
default: 'bg-primary text-primary-foreground border-transparent shadow hover:bg-primary/80',
secondary: 'bg-secondary text-secondary-foreground border-transparent hover:bg-secondary/80',
destructive:
'bg-destructive text-destructive-foreground border-transparent shadow hover:bg-destructive/80',
outline: 'text-foreground'
}
},
defaultVariants: {
variant: 'default'
}
});
export type BadgeVariant = VariantProps<typeof badgeVariants>['variant'];
</script>
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
variant = 'default',
children,
...rest
}: HTMLAttributes<HTMLSpanElement> & {
variant?: BadgeVariant;
children?: import('svelte').Snippet;
} = $props();
</script>
<span class={cn(badgeVariants({ variant }), className)} {...rest}>{@render children?.()}</span>
+2
View File
@@ -0,0 +1,2 @@
import Root, { badgeVariants, type BadgeVariant } from './badge.svelte';
export { Root, Root as Badge, badgeVariants, type BadgeVariant };
@@ -0,0 +1,54 @@
<script lang="ts" module>
import { type VariantProps, tv } from 'tailwind-variants';
export const buttonVariants = tv({
base: 'focus-visible:border-ring focus-visible:ring-ring/50 inline-flex shrink-0 cursor-pointer select-none items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium outline-none transition-all focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*="size-"])]:size-4',
variants: {
variant: {
default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',
destructive:
'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
outline:
'border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:hover:bg-input/50',
secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',
ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
link: 'text-primary underline-offset-4 hover:underline'
},
size: {
default: 'h-9 px-4 py-2 has-[>svg]:px-3',
sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',
lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
icon: 'size-9'
}
},
defaultVariants: {
variant: 'default',
size: 'default'
}
});
export type ButtonVariant = VariantProps<typeof buttonVariants>['variant'];
export type ButtonSize = VariantProps<typeof buttonVariants>['size'];
</script>
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLButtonAttributes } from 'svelte/elements';
let {
class: className,
variant = 'default',
size = 'default',
type = 'button',
children,
...rest
}: HTMLButtonAttributes & {
variant?: ButtonVariant;
size?: ButtonSize;
children?: import('svelte').Snippet;
} = $props();
</script>
<button class={cn(buttonVariants({ variant, size }), className)} {type} {...rest}
>{@render children?.()}</button
>
@@ -0,0 +1,8 @@
import Root, { buttonVariants, type ButtonSize, type ButtonVariant } from './button.svelte';
export {
Root,
Root as Button,
buttonVariants,
type ButtonSize,
type ButtonVariant
};
@@ -0,0 +1,12 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLDivElement> & { children?: import('svelte').Snippet } = $props();
</script>
<div class={cn('p-6 pt-0', className)} {...rest}>{@render children?.()}</div>
@@ -0,0 +1,12 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLParagraphElement> & { children?: import('svelte').Snippet } = $props();
</script>
<p class={cn('text-muted-foreground text-sm', className)} {...rest}>{@render children?.()}</p>
@@ -0,0 +1,12 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLDivElement> & { children?: import('svelte').Snippet } = $props();
</script>
<div class={cn('flex flex-col gap-1.5 p-6', className)} {...rest}>{@render children?.()}</div>
@@ -0,0 +1,14 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLHeadingElement> & { children?: import('svelte').Snippet } = $props();
</script>
<h3 class={cn('leading-none font-semibold tracking-tight', className)} {...rest}>
{@render children?.()}
</h3>
@@ -0,0 +1,17 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLDivElement> & { children?: import('svelte').Snippet } = $props();
</script>
<div
class={cn('bg-card text-card-foreground rounded-xl border shadow-sm', className)}
{...rest}
>
{@render children?.()}
</div>
+14
View File
@@ -0,0 +1,14 @@
import Root from './card.svelte';
import Header from './card-header.svelte';
import Title from './card-title.svelte';
import Description from './card-description.svelte';
import Content from './card-content.svelte';
export {
Root,
Root as Card,
Header as CardHeader,
Title as CardTitle,
Description as CardDescription,
Content as CardContent
};
+2
View File
@@ -0,0 +1,2 @@
import Root from './input.svelte';
export { Root, Root as Input };
@@ -0,0 +1,19 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLInputAttributes } from 'svelte/elements';
let {
class: className,
value = $bindable(),
...rest
}: HTMLInputAttributes = $props();
</script>
<input
class={cn(
'border-input bg-background ring-offset-background placeholder:text-muted-foreground focus-visible:ring-ring flex h-9 w-full rounded-md border px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-[3px] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
className
)}
bind:value
{...rest}
/>
+2
View File
@@ -0,0 +1,2 @@
import Root from './label.svelte';
export { Root, Root as Label };
@@ -0,0 +1,15 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLLabelAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLLabelAttributes & { children?: import('svelte').Snippet } = $props();
</script>
<label
class={cn('text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70', className)}
{...rest}>{@render children?.()}</label
>
@@ -0,0 +1,2 @@
import Root from './scroll-area.svelte';
export { Root, Root as ScrollArea };
@@ -0,0 +1,12 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLDivElement> & { children?: import('svelte').Snippet } = $props();
</script>
<div class={cn('relative overflow-auto', className)} {...rest}>{@render children?.()}</div>
@@ -0,0 +1,2 @@
import Root from './separator.svelte';
export { Root, Root as Separator };
@@ -0,0 +1,20 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
orientation = 'horizontal',
...rest
}: HTMLAttributes<HTMLDivElement> & { orientation?: 'horizontal' | 'vertical' } = $props();
</script>
<div
role="separator"
class={cn(
'bg-border shrink-0',
orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',
className
)}
{...rest}
></div>
+16
View File
@@ -0,0 +1,16 @@
import Root from './table.svelte';
import Header from './table-header.svelte';
import Body from './table-body.svelte';
import Row from './table-row.svelte';
import Head from './table-head.svelte';
import Cell from './table-cell.svelte';
export {
Root,
Root as Table,
Header as TableHeader,
Body as TableBody,
Row as TableRow,
Head as TableHead,
Cell as TableCell
};
@@ -0,0 +1,12 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLTableSectionElement> & { children?: import('svelte').Snippet } = $props();
</script>
<tbody class={cn('[&_tr:last-child]:border-0', className)} {...rest}>{@render children?.()}</tbody>
@@ -0,0 +1,23 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
colspan,
rowspan,
children,
...rest
}: HTMLAttributes<HTMLTableCellElement> & {
colspan?: number;
rowspan?: number;
children?: import('svelte').Snippet;
} = $props();
</script>
<td
class={cn('p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', className)}
{colspan}
{rowspan}
{...rest}>{@render children?.()}</td
>
@@ -0,0 +1,18 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLTableCellElement> & { children?: import('svelte').Snippet } = $props();
</script>
<th
class={cn(
'text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',
className
)}
{...rest}>{@render children?.()}</th
>
@@ -0,0 +1,12 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLTableSectionElement> & { children?: import('svelte').Snippet } = $props();
</script>
<thead class={cn('[&_tr]:border-b', className)} {...rest}>{@render children?.()}</thead>
@@ -0,0 +1,15 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLTableRowElement> & { children?: import('svelte').Snippet } = $props();
</script>
<tr
class={cn('hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors', className)}
{...rest}>{@render children?.()}</tr
>
@@ -0,0 +1,14 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
let {
class: className,
children,
...rest
}: HTMLAttributes<HTMLTableElement> & { children?: import('svelte').Snippet } = $props();
</script>
<div class="relative w-full overflow-auto">
<table class={cn('w-full caption-bottom text-sm', className)} {...rest}>{@render children?.()}</table>
</div>