Convert AWS EventBridge cron to GitHub Actions
AWS EventBridge writes cron(min hour dom mon dow year); GitHub Actions writes min hour dom mon dow. Paste an expression to convert it. Anything that does not map exactly is flagged with the reason and a workaround.
day of month: GitHub Actions has no “last day of the month”. Months end on the 28th to the 31st, so no single day matches.
WorkaroundRun on days 28-31 and exit unless tomorrow is the 1st. Needs GNU date; in crontab, % is escaped as \%.
Not equivalent on its own: it needs a check inside the job.0 0 28-31 * * # job: [ "$(date -d tomorrow +%d)" = "01" ] || exit 0
Same schedule on other platforms
day of month: crontab has no “last day of the month”. Months end on the 28th to the 31st, so no single day matches.
WorkaroundRun on days 28-31 and exit unless tomorrow is the 1st. Needs GNU date; in crontab, % is escaped as \%.
Not equivalent on its own: it needs a check inside the job.0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && /path/to/job
day of month: Kubernetes has no “last day of the month”. Months end on the 28th to the 31st, so no single day matches.
WorkaroundRun on days 28-31 and exit unless tomorrow is the 1st. Needs GNU date; in crontab, % is escaped as \%.
Not equivalent on its own: it needs a check inside the job.0 0 28-31 * * # job: [ "$(date -d tomorrow +%d)" = "01" ] || exit 0
0 0 0 L * *0 0 0 L * ?Next 10 runs
computed in your browser- Calculating…
AWS EventBridge vs GitHub Actions
| AWS EventBridge | GitHub Actions | |
|---|---|---|
| Fields | cron(min hour dom mon dow year) | min hour dom mon dow |
| Sunday | 1 (SUN=1 … SAT=7) | 0 |
| Day and weekday both set | one of them must be ? | either matches |
| Special characters | L W # (one #) | none |
| Shortcuts | none; rate() for intervals | none |
| Time zone | IANA zone in Scheduler, UTC by default | UTC, or timezone: per entry |
| Shortest interval | 1 minute | 5 minutes, best effort |
Common schedules, converted
| AWS EventBridge | GitHub Actions | |
|---|---|---|
| Every 5 minutes | cron(0/5 * * * ? *) | */5 * * * * |
| Every hour | cron(0 * * * ? *) | 0 * * * * |
| Every minute | cron(* * * * ? *) | Can’t convert |
| Every 10 minutes | cron(0/10 * * * ? *) | */10 * * * * |
| Every 15 minutes | cron(0/15 * * * ? *) | */15 * * * * |
| Every 30 minutes | cron(0/30 * * * ? *) | */30 * * * * |
| Daily at midnight | cron(0 0 * * ? *) | 0 0 * * * |
| Daily at 9 am | cron(0 9 * * ? *) | 0 9 * * * |
| Weekdays at 9 am | cron(0 9 ? * 2-6 *) | 0 9 * * 1-5 |
| Every Monday | cron(0 0 ? * 2 *) | 0 0 * * 1 |
| First day of the month | cron(0 0 1 * ? *) | 0 0 1 * * |
| Every 6 hours | cron(0 0/6 * * ? *) | 0 */6 * * * |
| Every Sunday at midnight | cron(0 0 ? * 1 *) | 0 0 * * 0 |
| Every 2 hours | cron(0 0/2 * * ? *) | 0 */2 * * * |
| Every 12 hours | cron(0 0/12 * * ? *) | 0 */12 * * * |
| Daily at noon | cron(0 12 * * ? *) | 0 12 * * * |
| Every Friday | cron(0 0 ? * 6 *) | 0 0 * * 5 |
| Last day of the month | cron(0 0 L * ? *) | Can’t convert |
| Every quarter | cron(0 0 1 1/3 ? *) | 0 0 1 */3 * |
| Every 2 minutes | cron(0/2 * * * ? *) | Can’t convert |
| Every 3 hours | cron(0 0/3 * * ? *) | 0 */3 * * * |
| Daily at 6 am | cron(0 6 * * ? *) | 0 6 * * * |
| Daily at 6 pm | cron(0 18 * * ? *) | 0 18 * * * |
| Twice a day | cron(0 0/12 * * ? *) | 0 */12 * * * |
| Weekdays at 6 pm | cron(0 18 ? * 2-6 *) | 0 18 * * 1-5 |
| Weekends at 10 am | cron(0 10 ? * 1,7 *) | 0 10 * * 0,6 |
| 15th of the month | cron(0 0 15 * ? *) | 0 0 15 * * |
| First Monday of the month | cron(0 9 ? * 2#1 *) | Can’t convert |
| Last Friday of the month | cron(0 17 ? * 6L *) | Can’t convert |
| Once a year | cron(0 0 1 1 ? *) | 0 0 1 1 * |
| Every 3 minutes | cron(0/3 * * * ? *) | Can’t convert |
| Every 20 minutes | cron(0/20 * * * ? *) | */20 * * * * |
| Every 4 hours | cron(0 0/4 * * ? *) | 0 */4 * * * |
| Every 8 hours | cron(0 0/8 * * ? *) | 0 */8 * * * |
| Daily at 1 am | cron(0 1 * * ? *) | 0 1 * * * |
| Daily at 2 am | cron(0 2 * * ? *) | 0 2 * * * |
| Daily at 3 am | cron(0 3 * * ? *) | 0 3 * * * |
| Daily at 8 am | cron(0 8 * * ? *) | 0 8 * * * |
| Every weekday | cron(0 0 ? * 2-6 *) | 0 0 * * 1-5 |
| Every weekend day | cron(0 0 ? * 1,7 *) | 0 0 * * 0,6 |
| Every Tuesday | cron(0 0 ? * 3 *) | 0 0 * * 2 |
| Every Wednesday | cron(0 0 ? * 4 *) | 0 0 * * 3 |
| Every Thursday | cron(0 0 ? * 5 *) | 0 0 * * 4 |
| Every Saturday | cron(0 0 ? * 7 *) | 0 0 * * 6 |
| Every 6 months | cron(0 0 1 1/6 ? *) | 0 0 1 */6 * |
FAQ
Can every AWS EventBridge expression be converted to GitHub Actions?
Not all. Of the 45 common schedules on this page, 39 convert exactly. The rest need a workaround, which the converter shows.
How is Sunday written in AWS EventBridge and GitHub Actions?
AWS EventBridge: 1 (SUN=1 … SAT=7). GitHub Actions: 0.
Does the time zone carry over?
The expression has no time zone. AWS EventBridge: IANA zone in Scheduler, UTC by default. GitHub Actions: UTC, or timezone: per entry.