Files
kandev/apps/web/components/settings/kubernetes-validation.ts
T
2026-09-02 13:50:03 +00:00

55 lines
2.0 KiB
TypeScript

import {
getKubernetesProfileValidationError,
type KubernetesExecutorForm,
type KubernetesProfileConfigForm,
type KubernetesProfileValidationError,
} from "./kubernetes-config";
export function kubernetesExecutorInvalidReason(
form: KubernetesExecutorForm,
canManage: boolean,
t: (key: string) => string,
): string | undefined {
if (!canManage) return t("executors:kubernetesAdminSaveOnly");
if (!form.name.trim()) return t("executors:kubernetesExecutorNameRequired");
if (!form.namespace.trim()) return t("executors:kubernetesNamespaceRequired");
if (form.authMode === "kubeconfig" && !form.kubeconfigPath.trim().startsWith("/")) {
return t("executors:kubernetesKubeconfigPathRequired");
}
const timeout = Number(form.requestTimeoutSeconds);
return /^(?:[1-9]|[1-9][0-9]|[12][0-9]{2}|300)$/.test(form.requestTimeoutSeconds) &&
timeout >= 1 &&
timeout <= 300
? undefined
: t("executors:kubernetesTimeoutInvalid");
}
const PROFILE_ERROR_KEYS: Record<KubernetesProfileValidationError, string> = {
main_container_required: "executors:kubernetesMainContainerRequired",
main_container_invalid: "executors:kubernetesMainContainerInvalid",
pod_template_required: "executors:kubernetesPodTemplateRequired",
pod_template_too_large: "executors:kubernetesPodTemplateTooLarge",
workspace_size_required: "executors:kubernetesWorkspaceSizeRequired",
access_mode_required: "executors:kubernetesAccessModeRequired",
access_mode_invalid: "executors:kubernetesAccessModeInvalid",
claim_name_required: "executors:kubernetesClaimNameRequired",
};
export function kubernetesProfileInvalidReason(
form: KubernetesProfileConfigForm,
t: (key: string) => string,
): string | undefined {
const error = getKubernetesProfileValidationError(form);
return error ? t(PROFILE_ERROR_KEYS[error]) : undefined;
}
export function getKubernetesCreateContributorState(
canManage: boolean,
invalidReason?: string,
): { isDirty: boolean; canSave: boolean } {
return {
isDirty: canManage,
canSave: canManage && !invalidReason,
};
}