Add days schedule trigger (#10800)

<img width="1470" alt="image"
src="https://github.com/user-attachments/assets/660d79ba-60c7-4874-aa82-80a7575366ba"
/>
This commit is contained in:
martmull
2025-03-12 16:25:07 +01:00
committed by GitHub
parent bfc542290b
commit 1b0413bf8b
10 changed files with 244 additions and 5 deletions

View File

@ -39,6 +39,10 @@ export type WorkflowManualTrigger = BaseTrigger & {
export type WorkflowCronTrigger = BaseTrigger & {
type: WorkflowTriggerType.CRON;
settings: (
| {
type: 'DAYS';
schedule: { day: number; hour: number; minute: number };
}
| {
type: 'HOURS';
schedule: { hour: number; minute: number };

View File

@ -39,6 +39,20 @@ describe('computeCronPatternFromSchedule', () => {
);
});
it('should return the correct cron pattern for DAYS type', () => {
const trigger: WorkflowCronTrigger = {
name: '',
type: WorkflowTriggerType.CRON,
settings: {
type: 'DAYS',
schedule: { day: 31, hour: 10, minute: 30 },
outputSchema: {},
},
};
expect(computeCronPatternFromSchedule(trigger)).toBe('30 10 */31 * *');
});
it('should return the correct cron pattern for HOURS type', () => {
const trigger: WorkflowCronTrigger = {
name: '',

View File

@ -100,6 +100,35 @@ function assertCronTriggerSettingsAreValid(settings: any) {
return;
}
case 'DAYS': {
if (!settings.schedule) {
throw new WorkflowTriggerException(
'No schedule provided in cron trigger',
WorkflowTriggerExceptionCode.INVALID_WORKFLOW_TRIGGER,
);
}
if (settings.schedule.day <= 0) {
throw new WorkflowTriggerException(
'Invalid day value. Should be integer greater than 1',
WorkflowTriggerExceptionCode.INVALID_WORKFLOW_TRIGGER,
);
}
if (settings.schedule.hour < 0 || settings.schedule.hour > 23) {
throw new WorkflowTriggerException(
'Invalid hour value. Should be integer between 0 and 23',
WorkflowTriggerExceptionCode.INVALID_WORKFLOW_TRIGGER,
);
}
if (settings.schedule.minute < 0 || settings.schedule.minute > 59) {
throw new WorkflowTriggerException(
'Invalid minute value. Should be integer between 0 and 59',
WorkflowTriggerExceptionCode.INVALID_WORKFLOW_TRIGGER,
);
}
return;
}
case 'HOURS': {
if (!settings.schedule) {
throw new WorkflowTriggerException(

View File

@ -26,6 +26,13 @@ export const computeCronPatternFromSchedule = (
return trigger.settings.pattern;
}
case 'DAYS': {
const pattern = `${trigger.settings.schedule.minute} ${trigger.settings.schedule.hour} */${trigger.settings.schedule.day} * *`;
validatePattern(pattern);
return pattern;
}
case 'HOURS': {
const pattern = `${trigger.settings.schedule.minute} */${trigger.settings.schedule.hour} * * *`;