mirror of
https://github.com/hanzoai/dataroom.git
synced 2026-10-30 18:41:07 +00:00
hanzo-build-linux-amd64 is the only ARC runner pool installed on hanzo-k8s today (arm64 pool is paused until DigitalOcean ships arm64 droplets, per ~/work/hanzo/.github/RUNNERS.md). The arm64 job was waiting on spark-hanzoai-arm64 — not provisioned in this cluster — so every build sat in queue forever and the amd64 leg got cancelled. Set platforms: linux/amd64 on the reusable build call to skip arm64 entirely. Re-add arm64 if/when DO ships arm64 droplets and the spark runner pool comes back online.
104 lines
2.6 KiB
TypeScript
104 lines
2.6 KiB
TypeScript
import { ZodError } from "zod";
|
|
|
|
import {
|
|
type Action,
|
|
ActionSchema,
|
|
type ConditionsConfig,
|
|
ConditionsConfigSchema,
|
|
CreateWorkflowRequestSchema,
|
|
CreateWorkflowStepRequestSchema,
|
|
ReorderStepsRequestSchema,
|
|
UpdateWorkflowRequestSchema,
|
|
UpdateWorkflowStepRequestSchema,
|
|
type WorkflowStepDefinition,
|
|
WorkflowStepDefinitionSchema,
|
|
} from "./types";
|
|
|
|
export {
|
|
CreateWorkflowRequestSchema,
|
|
UpdateWorkflowRequestSchema,
|
|
CreateWorkflowStepRequestSchema,
|
|
UpdateWorkflowStepRequestSchema,
|
|
ReorderStepsRequestSchema,
|
|
};
|
|
|
|
/**
|
|
* Validates workflow step conditions JSON against the schema
|
|
*/
|
|
export function validateConditions(
|
|
conditions: unknown,
|
|
): { valid: true; data: ConditionsConfig } | { valid: false; error: string } {
|
|
try {
|
|
const data = ConditionsConfigSchema.parse(conditions);
|
|
return { valid: true, data };
|
|
} catch (error) {
|
|
if (error instanceof ZodError) {
|
|
return {
|
|
valid: false,
|
|
error: error.errors
|
|
.map((e) => `${e.path.join(".")}: ${e.message}`)
|
|
.join(", "),
|
|
};
|
|
}
|
|
return { valid: false, error: "Invalid conditions format" };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validates workflow step actions JSON against the schema
|
|
*/
|
|
export function validateActions(
|
|
actions: unknown,
|
|
): { valid: true; data: Action[] } | { valid: false; error: string } {
|
|
try {
|
|
if (!Array.isArray(actions)) {
|
|
return { valid: false, error: "Actions must be an array" };
|
|
}
|
|
const data = actions.map((action) => ActionSchema.parse(action));
|
|
return { valid: true, data };
|
|
} catch (error) {
|
|
if (error instanceof ZodError) {
|
|
return {
|
|
valid: false,
|
|
error: error.errors
|
|
.map((e) => `${e.path.join(".")}: ${e.message}`)
|
|
.join(", "),
|
|
};
|
|
}
|
|
return { valid: false, error: "Invalid actions format" };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validates complete workflow step definition
|
|
*/
|
|
export function validateWorkflowStep(
|
|
step: unknown,
|
|
):
|
|
| { valid: true; data: WorkflowStepDefinition }
|
|
| { valid: false; error: string } {
|
|
try {
|
|
const data = WorkflowStepDefinitionSchema.parse(step);
|
|
return { valid: true, data };
|
|
} catch (error) {
|
|
if (error instanceof ZodError) {
|
|
return {
|
|
valid: false,
|
|
error: error.errors
|
|
.map((e) => `${e.path.join(".")}: ${e.message}`)
|
|
.join(", "),
|
|
};
|
|
}
|
|
return { valid: false, error: "Invalid workflow step format" };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper to format Zod validation errors for API responses
|
|
*/
|
|
export function formatZodError(error: ZodError): string {
|
|
return error.errors
|
|
.map((e) => `${e.path.join(".")}: ${e.message}`)
|
|
.join(", ");
|
|
}
|