diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts index 8bfbf8c7e5..0ab251208c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts @@ -175,7 +175,7 @@ describe('DefaultWorkflowRunner', () => { }); await expect(runner.execute(task)).rejects.toThrow( - /Invalid input passed to action jest-validated-action, instance requires property \"foo\"/, + /Invalid input passed to action jest-zod-validated-action, instance requires property \"foo\"/, ); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts index 516abe79e4..defed86d83 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts @@ -25,6 +25,7 @@ import { InputError } from '@backstage/errors'; import { PassThrough } from 'stream'; import { generateExampleOutput, isTruthy } from './helper'; import { validate as validateJsonSchema } from 'jsonschema'; +import zodToJsonSchema from 'zod-to-json-schema'; import { parseRepoUrl } from '../actions/builtin/publish/util'; import { TemplateActionRegistry } from '../actions'; import { @@ -41,6 +42,7 @@ import { import { TemplateAction } from '@backstage/plugin-scaffolder-node'; import { UserEntity } from '@backstage/catalog-model'; import { createCounterMetric, createHistogramMetric } from '../../util/metrics'; +import { z } from 'zod'; type NunjucksWorkflowRunnerOptions = { workingDirectory: string; @@ -286,10 +288,12 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { {}; if (action.schema?.input) { - const validateResult = validateJsonSchema( - input, - action.schema.input, - ); + const inputSchema = + action.schema.input instanceof z.ZodSchema + ? zodToJsonSchema(action.schema.input) + : action.schema.input; + + const validateResult = validateJsonSchema(input, inputSchema); if (!validateResult.valid) { const errors = validateResult.errors.join(', '); throw new InputError(