diff --git a/lib/workers/branch/schedule.js b/lib/workers/branch/schedule.js index 9eba89007bf506ae107a41ff7574d6bac6b12fa3..a03a69deffc9debc0d6166325235b60d5c68022d 100644 --- a/lib/workers/branch/schedule.js +++ b/lib/workers/branch/schedule.js @@ -8,6 +8,11 @@ module.exports = { isScheduledNow, }; +const scheduleMappings = { + 'every month': 'before 3am on the first day of the month', + monthly: 'before 3am on the first day of the month', +}; + function fixShortHours(input) { return input.replace(/( \d?\d)((a|p)m)/g, '$1:00$2'); } @@ -30,7 +35,9 @@ function hasValidSchedule(schedule) { } // check if any of the schedules fail to parse const hasFailedSchedules = schedule.some(scheduleText => { - const massagedText = fixShortHours(scheduleText); + const massagedText = fixShortHours( + scheduleMappings[scheduleText] || scheduleText + ); const parsedSchedule = later.parse.text(massagedText); if (parsedSchedule.error !== -1) { message = `Failed to parse schedule "${scheduleText}"`; @@ -108,7 +115,8 @@ function isScheduledNow(config) { logger.debug(`Checking ${configSchedule.length} schedule(s)`); // We run if any schedule matches const isWithinSchedule = configSchedule.some(scheduleText => { - const parsedSchedule = later.parse.text(fixShortHours(scheduleText)); + const massagedText = scheduleMappings[scheduleText] || scheduleText; + const parsedSchedule = later.parse.text(fixShortHours(massagedText)); logger.debug({ parsedSchedule }, `Checking schedule "${scheduleText}"`); // Later library returns array of schedules return parsedSchedule.schedules.some(schedule => { diff --git a/test/workers/branch/schedule.spec.js b/test/workers/branch/schedule.spec.js index 9c510f9dfb6625f438e1825ce398f7937be96149..602c29fbb7e80c002bb4dd212d5637e2522c48be 100644 --- a/test/workers/branch/schedule.spec.js +++ b/test/workers/branch/schedule.spec.js @@ -75,6 +75,14 @@ describe('workers/branch/schedule', () => { ])[0] ).toBe(true); }); + it('massages schedules', () => { + expect( + schedule.hasValidSchedule([ + 'before 3am on the first day of the month', + ])[0] + ).toBe(true); + expect(schedule.hasValidSchedule(['every month'])[0]).toBe(true); + }); it('supports hours shorthand', () => { const [res] = schedule.hasValidSchedule([ 'after 11pm and before 6am every weekend',