Stabilize CI runtime for updated deps and unblock Dependabot auto-format flow (#185)

* chore: apply ci and dependabot remediation changes

* chore: auto-fix linting and formatting issues

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
This commit is contained in:
Copilot authored and GitHub committed 2026-08-01 10:58:33 +08:00
1 parent 95b51f0209
commit 04fbddb979
59 files changed
+627 -516

No files matched your search

+29 -32
View File
@@ -102,22 +102,22 @@ export const AlertRuleCard: React.FC<AlertRuleCardProps> = ({ data, mutate }) =>
resolver: zodResolver(alertRuleFormSchema),
defaultValues: data
? {
...data,
rules_raw: JSON.stringify(data.rules),
fail_trigger_tasks_raw: conv.arrToStr(data.fail_trigger_tasks),
recover_trigger_tasks_raw: conv.arrToStr(data.recover_trigger_tasks),
}
...data,
rules_raw: JSON.stringify(data.rules),
fail_trigger_tasks_raw: conv.arrToStr(data.fail_trigger_tasks),
recover_trigger_tasks_raw: conv.arrToStr(data.recover_trigger_tasks),
}
: {
name: "",
rules_raw: "",
rules: [],
fail_trigger_tasks: [],
fail_trigger_tasks_raw: "",
recover_trigger_tasks: [],
recover_trigger_tasks_raw: "",
notification_group_id: 0,
trigger_mode: 0,
},
name: "",
rules_raw: "",
rules: [],
fail_trigger_tasks: [],
fail_trigger_tasks_raw: "",
recover_trigger_tasks: [],
recover_trigger_tasks_raw: "",
notification_group_id: 0,
trigger_mode: 0,
},
resetOptions: {
keepDefaultValues: false,
},
@@ -195,10 +195,7 @@ export const AlertRuleCard: React.FC<AlertRuleCardProps> = ({ data, mutate }) =>
<DialogDescription />
</DialogHeader>
<Form {...form}>
<form
onSubmit={form.handleSubmit(onSubmit)}
className="space-y-2 my-2"
>
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-2 my-2">
<FormField
control={form.control}
name="name"
@@ -369,9 +366,9 @@ export const AlertRuleCard: React.FC<AlertRuleCardProps> = ({ data, mutate }) =>
...next[idx],
min: e.target.value
? Number(
e.target
.value,
)
e.target
.value,
)
: undefined,
}
setRulesUI(next)
@@ -392,9 +389,9 @@ export const AlertRuleCard: React.FC<AlertRuleCardProps> = ({ data, mutate }) =>
...next[idx],
max: e.target.value
? Number(
e.target
.value,
)
e.target
.value,
)
: undefined,
}
setRulesUI(next)
@@ -456,8 +453,8 @@ export const AlertRuleCard: React.FC<AlertRuleCardProps> = ({ data, mutate }) =>
try {
return r.ignore
? JSON.stringify(
r.ignore,
)
r.ignore,
)
: ""
} catch {
return ""
@@ -468,8 +465,8 @@ export const AlertRuleCard: React.FC<AlertRuleCardProps> = ({ data, mutate }) =>
try {
const obj = e.target.value
? JSON.parse(
e.target.value,
)
e.target.value,
)
: undefined
next[idx] = {
...next[idx],
@@ -523,9 +520,9 @@ export const AlertRuleCard: React.FC<AlertRuleCardProps> = ({ data, mutate }) =>
cycle_interval: e.target
.value
? Number(
e.target
.value,
)
e.target
.value,
)
: undefined,
}
setRulesUI(next)
+18 -18
View File
@@ -72,25 +72,25 @@ export const CronCard: React.FC<CronCardProps> = ({ data, mutate }) => {
resolver: zodResolver(cronFormSchema),
defaultValues: data
? {
task_type: data.task_type ?? 0,
name: data.name ?? "",
scheduler: data.scheduler ?? "",
command: data.command ?? "",
servers: data.servers ?? [],
cover: data.cover ?? 0,
push_successful: data.push_successful ?? false,
notification_group_id: data.notification_group_id ?? 0,
}
task_type: data.task_type ?? 0,
name: data.name ?? "",
scheduler: data.scheduler ?? "",
command: data.command ?? "",
servers: data.servers ?? [],
cover: data.cover ?? 0,
push_successful: data.push_successful ?? false,
notification_group_id: data.notification_group_id ?? 0,
}
: {
task_type: 0,
name: "",
scheduler: "",
command: "",
servers: [],
cover: 0,
push_successful: false,
notification_group_id: 0,
},
task_type: 0,
name: "",
scheduler: "",
command: "",
servers: [],
cover: 0,
push_successful: false,
notification_group_id: 0,
},
resetOptions: {
keepDefaultValues: false,
},
+30 -30
View File
@@ -76,37 +76,37 @@ export const DDNSCard: React.FC<DDNSCardProps> = ({ data, providers, mutate }) =
resolver: zodResolver(ddnsFormSchema),
defaultValues: data
? {
max_retries: data.max_retries ?? 3,
enable_ipv4: data.enable_ipv4 ?? false,
enable_ipv6: data.enable_ipv6 ?? false,
name: data.name ?? "",
provider: data.provider ?? "dummy",
domains: data.domains ?? [],
domains_raw: conv.arrToStr(data.domains ?? []),
access_id: data.access_id ?? "",
access_secret: data.access_secret ?? "",
webhook_url: data.webhook_url ?? "",
webhook_method: data.webhook_method,
webhook_request_type: data.webhook_request_type,
webhook_request_body: data.webhook_request_body ?? "",
webhook_headers: data.webhook_headers ?? "",
}
max_retries: data.max_retries ?? 3,
enable_ipv4: data.enable_ipv4 ?? false,
enable_ipv6: data.enable_ipv6 ?? false,
name: data.name ?? "",
provider: data.provider ?? "dummy",
domains: data.domains ?? [],
domains_raw: conv.arrToStr(data.domains ?? []),
access_id: data.access_id ?? "",
access_secret: data.access_secret ?? "",
webhook_url: data.webhook_url ?? "",
webhook_method: data.webhook_method,
webhook_request_type: data.webhook_request_type,
webhook_request_body: data.webhook_request_body ?? "",
webhook_headers: data.webhook_headers ?? "",
}
: {
max_retries: 3,
enable_ipv4: false,
enable_ipv6: false,
name: "",
provider: "dummy",
domains: [],
domains_raw: "",
access_id: "",
access_secret: "",
webhook_url: "",
webhook_method: undefined,
webhook_request_type: undefined,
webhook_request_body: "",
webhook_headers: "",
},
max_retries: 3,
enable_ipv4: false,
enable_ipv6: false,
name: "",
provider: "dummy",
domains: [],
domains_raw: "",
access_id: "",
access_secret: "",
webhook_url: "",
webhook_method: undefined,
webhook_request_type: undefined,
webhook_request_body: "",
webhook_headers: "",
},
resetOptions: {
keepDefaultValues: false,
},
+30 -24
View File
@@ -71,7 +71,10 @@ const arraysEqual = (a: Uint8Array, b: Uint8Array) => {
return true
}
export const FMComponent: React.FC<FMProps & JSX.IntrinsicElements["div"]> = ({ wsUrl, ...props }) => {
export const FMComponent: React.FC<FMProps & JSX.IntrinsicElements["div"]> = ({
wsUrl,
...props
}) => {
const { t } = useTranslation()
const fmRef = useRef<HTMLDivElement>(null)
const wsRef = useRef<WebSocket | null>(null)
@@ -162,30 +165,30 @@ export const FMComponent: React.FC<FMProps & JSX.IntrinsicElements["div"]> = ({
useEffect(() => {
worker.onmessage = async (event: MessageEvent<FMWorkerData>) => {
switch (event.data.type) {
case FMWorkerOpcode.Error: {
console.error("Error from worker", event.data.error)
break
}
case FMWorkerOpcode.Progress: {
handleReady.current = true
break
}
case FMWorkerOpcode.Result: {
handleReady.current = false
if (event.data.blob && event.data.fileName) {
const url = URL.createObjectURL(event.data.blob)
const anchor = document.createElement("a")
anchor.href = url
anchor.download = event.data.fileName
anchor.click()
URL.revokeObjectURL(url)
case FMWorkerOpcode.Error: {
console.error("Error from worker", event.data.error)
break
}
case FMWorkerOpcode.Progress: {
handleReady.current = true
break
}
case FMWorkerOpcode.Result: {
handleReady.current = false
firstChunk.current = true
if (dOpen) setdOpen(false)
break
}
if (event.data.blob && event.data.fileName) {
const url = URL.createObjectURL(event.data.blob)
const anchor = document.createElement("a")
anchor.href = url
anchor.download = event.data.fileName
anchor.click()
URL.revokeObjectURL(url)
}
firstChunk.current = true
if (dOpen) setdOpen(false)
break
}
}
}
@@ -342,7 +345,10 @@ export const FMComponent: React.FC<FMProps & JSX.IntrinsicElements["div"]> = ({
try {
await copyToClipboard(formatPath(currentPath))
} catch (error) {
const description = error instanceof Error ? error.message : t("Results.UnExpectedError")
const description =
error instanceof Error
? error.message
: t("Results.UnExpectedError")
toast("FM" + " " + t("Error"), {
description,
})
+10 -10
View File
@@ -154,15 +154,15 @@ const generateCommand = (
const env_win = envWinParts.join("")
switch (type) {
case OSTypes.Linux:
case OSTypes.macOS: {
return `curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/agent/install.sh -o agent.sh && chmod +x agent.sh && env ${env} ./agent.sh`
}
case OSTypes.Windows: {
return `${env_win} [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12;set-ExecutionPolicy RemoteSigned;Invoke-WebRequest https://raw.githubusercontent.com/nezhahq/scripts/main/agent/install.ps1 -OutFile C:\\install.ps1;powershell.exe C:\\install.ps1`
}
default: {
throw new Error(`Unknown OS: ${type}`)
}
case OSTypes.Linux:
case OSTypes.macOS: {
return `curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/agent/install.sh -o agent.sh && chmod +x agent.sh && env ${env} ./agent.sh`
}
case OSTypes.Windows: {
return `${env_win} [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12;set-ExecutionPolicy RemoteSigned;Invoke-WebRequest https://raw.githubusercontent.com/nezhahq/scripts/main/agent/install.ps1 -OutFile C:\\install.ps1;powershell.exe C:\\install.ps1`
}
default: {
throw new Error(`Unknown OS: ${type}`)
}
}
}
+12 -12
View File
@@ -55,19 +55,19 @@ export const NATCard: React.FC<NATCardProps> = ({ data, mutate }) => {
resolver: zodResolver(natFormSchema),
defaultValues: data
? {
name: data.name ?? "",
enabled: data.enabled ?? false,
server_id: data.server_id ?? 0,
host: data.host ?? "",
domain: data.domain ?? "",
}
name: data.name ?? "",
enabled: data.enabled ?? false,
server_id: data.server_id ?? 0,
host: data.host ?? "",
domain: data.domain ?? "",
}
: {
name: "",
enabled: false,
server_id: 0,
host: "",
domain: "",
},
name: "",
enabled: false,
server_id: 0,
host: "",
domain: "",
},
resetOptions: {
keepDefaultValues: false,
},
+6 -6
View File
@@ -48,13 +48,13 @@ export const NotificationGroupCard: React.FC<NotificationGroupCardProps> = ({ da
resolver: zodResolver(notificationGroupFormSchema),
defaultValues: data
? {
name: data.group.name,
notifications: data.notifications,
}
name: data.group.name,
notifications: data.notifications,
}
: {
name: "",
notifications: [],
},
name: "",
notifications: [],
},
resetOptions: {
keepDefaultValues: false,
},
+23 -25
View File
@@ -64,34 +64,35 @@ export const NotifierCard: React.FC<NotifierCardProps> = ({ data, mutate }) => {
const { t } = useTranslation()
type NotificationFormInput = z.input<typeof notificationFormSchema>
type NotificationFormData = z.output<typeof notificationFormSchema>
type NotificationDefaults = ModelNotification & Partial<Pick<NotificationFormData, "skip_check">>
type NotificationDefaults = ModelNotification &
Partial<Pick<NotificationFormData, "skip_check">>
const notificationDefaults: NotificationDefaults | undefined = data
const form = useForm<NotificationFormInput, unknown, NotificationFormData>({
resolver: zodResolver(notificationFormSchema),
defaultValues: data
? {
name: data.name ?? "",
url: data.url ?? "",
request_method: data.request_method ?? 1,
request_type: data.request_type ?? 1,
request_header: data.request_header ?? "",
request_body: data.request_body ?? "",
verify_tls: data.verify_tls ?? false,
skip_check: notificationDefaults?.skip_check ?? false,
format_metric_units: data.format_metric_units ?? false,
}
name: data.name ?? "",
url: data.url ?? "",
request_method: data.request_method ?? 1,
request_type: data.request_type ?? 1,
request_header: data.request_header ?? "",
request_body: data.request_body ?? "",
verify_tls: data.verify_tls ?? false,
skip_check: notificationDefaults?.skip_check ?? false,
format_metric_units: data.format_metric_units ?? false,
}
: {
name: "",
url: "",
request_method: 1,
request_type: 1,
request_header: "",
request_body: "",
verify_tls: false,
skip_check: false,
format_metric_units: false,
},
name: "",
url: "",
request_method: 1,
request_type: 1,
request_header: "",
request_body: "",
verify_tls: false,
skip_check: false,
format_metric_units: false,
},
resetOptions: {
keepDefaultValues: false,
},
@@ -133,10 +134,7 @@ export const NotifierCard: React.FC<NotifierCardProps> = ({ data, mutate }) => {
<DialogDescription />
</DialogHeader>
<Form {...form}>
<form
onSubmit={form.handleSubmit(onSubmit)}
className="space-y-2 my-2"
>
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-2 my-2">
<FormField
control={form.control}
name="name"
+6 -6
View File
@@ -48,13 +48,13 @@ export const ServerGroupCard: React.FC<ServerGroupCardProps> = ({ data, mutate }
resolver: zodResolver(serverGroupFormSchema),
defaultValues: data
? {
name: data.group.name,
servers: data.servers,
}
name: data.group.name,
servers: data.servers,
}
: {
name: "",
servers: [],
},
name: "",
servers: [],
},
resetOptions: {
keepDefaultValues: false,
},
+14 -10
View File
@@ -467,8 +467,10 @@ export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
{publicNoteObj.billingDataMod
?.startDate
? new Date(
publicNoteObj.billingDataMod!.startDate!,
).toLocaleDateString()
publicNoteObj
.billingDataMod!
.startDate!,
).toLocaleDateString()
: "YYYY-MM-DD"}
</Button>
</PopoverTrigger>
@@ -492,8 +494,10 @@ export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
.billingDataMod
?.startDate
? new Date(
publicNoteObj.billingDataMod!.startDate!,
)
publicNoteObj
.billingDataMod!
.startDate!,
)
: undefined
}
onSelect={(d) => {
@@ -560,17 +564,17 @@ export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
{publicNoteObj.billingDataMod
?.endDate
? publicNoteObj
.billingDataMod
?.endDate ===
.billingDataMod
?.endDate ===
"0000-00-00T23:59:59+08:00"
? t(
"PublicNote.NoExpiry",
)
"PublicNote.NoExpiry",
)
: new Date(
publicNoteObj
.billingDataMod
?.endDate as string,
).toLocaleDateString()
).toLocaleDateString()
: "YYYY-MM-DD"}
</Button>
</PopoverTrigger>
@@ -601,7 +605,7 @@ export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
publicNoteObj
.billingDataMod
?.endDate as string,
)
)
: undefined
}
onSelect={(d) => {
+21 -21
View File
@@ -80,28 +80,28 @@ export const ServiceCard: React.FC<ServiceCardProps> = ({ data, mutate }) => {
resolver: zodResolver(serviceFormSchema) as any,
defaultValues: data
? {
...data,
fail_trigger_tasks_raw: conv.arrToStr(data.fail_trigger_tasks),
recover_trigger_tasks_raw: conv.arrToStr(data.recover_trigger_tasks),
skip_servers_raw: conv.recordToStrArr(data.skip_servers ? data.skip_servers : {}),
}
...data,
fail_trigger_tasks_raw: conv.arrToStr(data.fail_trigger_tasks),
recover_trigger_tasks_raw: conv.arrToStr(data.recover_trigger_tasks),
skip_servers_raw: conv.recordToStrArr(data.skip_servers ? data.skip_servers : {}),
}
: {
type: 1,
cover: 0,
display_index: 0,
name: "",
target: "",
max_latency: 0.0,
min_latency: 0.0,
duration: 30,
notification_group_id: 0,
fail_trigger_tasks: [],
fail_trigger_tasks_raw: "",
recover_trigger_tasks: [],
recover_trigger_tasks_raw: "",
skip_servers: {},
skip_servers_raw: [],
},
type: 1,
cover: 0,
display_index: 0,
name: "",
target: "",
max_latency: 0.0,
min_latency: 0.0,
duration: 30,
notification_group_id: 0,
fail_trigger_tasks: [],
fail_trigger_tasks_raw: "",
recover_trigger_tasks: [],
recover_trigger_tasks_raw: "",
skip_servers: {},
skip_servers_raw: [],
},
resetOptions: {
keepDefaultValues: false,
},
+1 -2
View File
@@ -23,8 +23,7 @@ const badgeVariants = cva(
)
export interface BadgeProps
extends HTMLAttributes<HTMLDivElement>,
VariantProps<typeof badgeVariants> {}
extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}
function Badge({ className, variant, ...props }: BadgeProps) {
return <div className={cn(badgeVariants({ variant }), className)} {...props} />
+1 -2
View File
@@ -31,8 +31,7 @@ const buttonVariants = cva(
)
export interface ButtonProps
extends ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {
extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
asChild?: boolean
}
+2 -2
View File
@@ -35,8 +35,8 @@ const FormField = <
TFieldValues extends FieldValues = FieldValues,
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
>({
...props
}: ControllerProps<TFieldValues, TName>) => {
...props
}: ControllerProps<TFieldValues, TName>) => {
return (
<FormFieldContext.Provider value={{ name: props.name }}>
<Controller {...props} />
+5 -4
View File
@@ -1,9 +1,7 @@
import { useEffect, useState } from "react"
type SVGProps = React.ComponentPropsWithoutRef<"svg">
type IconMarkupState =
| { status: "ready"; icon: ParsedIconMarkup }
| { status: "missing" }
type IconMarkupState = { status: "ready"; icon: ParsedIconMarkup } | { status: "missing" }
type ParsedIconMarkup = {
title?: string
@@ -26,7 +24,10 @@ const iconLoadersBySlug = Object.fromEntries(
const iconMarkupCache = new Map<string, IconMarkupState>()
function toProviderSlug(provider: string) {
return provider.trim().replace(/[^a-z0-9]+/gi, "").toLowerCase()
return provider
.trim()
.replace(/[^a-z0-9]+/gi, "")
.toLowerCase()
}
function loadProviderIconMarkup(provider: string) {
+54 -54
View File
@@ -53,60 +53,60 @@ export const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>((props,
>
{(() => {
switch (props.icon) {
case "clipboard": {
return <Clipboard />
}
case "check": {
return <Check />
}
case "edit": {
return <Edit2 />
}
case "trash": {
return <Trash2 />
}
case "plus": {
return <Plus />
}
case "terminal": {
return <Terminal />
}
case "update": {
return <CircleArrowUp />
}
case "folder-closed": {
return <FolderClosed />
}
case "play": {
return <Play />
}
case "download": {
return <Download />
}
case "upload": {
return <Upload />
}
case "menu": {
return <Menu />
}
case "ban": {
return <BanIcon />
}
case "expand": {
return <Expand />
}
case "cog": {
return <CogIcon />
}
case "minus": {
return <Minus />
}
case "user-pen": {
return <UserPen />
}
case "more": {
return <MoreHorizontal />
}
case "clipboard": {
return <Clipboard />
}
case "check": {
return <Check />
}
case "edit": {
return <Edit2 />
}
case "trash": {
return <Trash2 />
}
case "plus": {
return <Plus />
}
case "terminal": {
return <Terminal />
}
case "update": {
return <CircleArrowUp />
}
case "folder-closed": {
return <FolderClosed />
}
case "play": {
return <Play />
}
case "download": {
return <Download />
}
case "upload": {
return <Upload />
}
case "menu": {
return <Menu />
}
case "ban": {
return <BanIcon />
}
case "expand": {
return <Expand />
}
case "cog": {
return <CogIcon />
}
case "minus": {
return <Minus />
}
case "user-pen": {
return <UserPen />
}
case "more": {
return <MoreHorizontal />
}
}
})()}
</Button>
+2 -1
View File
@@ -67,7 +67,8 @@ const multiSelectVariants = cva(
* Props for MultiSelect component
*/
interface MultiSelectProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
extends
React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof multiSelectVariants> {
/**
* An array of option objects to be displayed in the multi-select component.
+2 -1
View File
@@ -37,7 +37,8 @@ const sheetVariants = cva(
)
interface SheetContentProps
extends ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,
extends
ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,
VariantProps<typeof sheetVariants> {
setOpen: Dispatch<SetStateAction<boolean>>
}
+3 -3
View File
@@ -158,9 +158,9 @@ export function DataTable<TData, TValue>({
{...{
style: header.column.getCanSort()
? {
cursor: "pointer",
userSelect: "none",
}
cursor: "pointer",
userSelect: "none",
}
: {},
onClick:
header.column.getToggleSortingHandler(),