How to schedule a Numera load¶
This guide explains how to add, change, or remove a scheduled Numera load for a stack, and how to trigger a one-off load manually.
Before you start¶
- You need write access to the
BGK-Analytics/ewerepository. - Scheduled workflows only fire on the
mainbranch. Changes to schedules must be merged tomainbefore they take effect. - All times in schedule expressions are in Europe/Berlin local time (CET in winter, CEST in summer). Do not use raw UTC values — GitHub Actions handles DST conversion automatically. See How cron scheduling works for background.
Add a scheduled load for a new stack¶
-
Copy the closest existing scheduled workflow file. For a production-style stack, copy
numera_load_scheduled_prod.yml; for a test stack, copynumera_load_scheduled_test.yml. -
Rename the file to
numera_load_scheduled_<stack>.yml. -
Update the
name:andrun-name:fields to reference the new stack. -
Update the
concurrency.groupto a unique value, e.g.'${{vars.NUMERA_CUSTOMER}} | <stack> | load'. This prevents overlapping runs for the same stack. -
Set the schedule (see Change the firing time below).
-
Update the
numera_stack:input in each job to the new stack name. -
Merge to
main.
Change the firing time¶
Find the on: schedule: block in the workflow file. Every cron: entry must be accompanied by a timezone: "Europe/Berlin" line:
The time 0 6 above means 06:00 Europe/Berlin local time, Monday–Friday. GitHub converts this to UTC internally and re-evaluates the offset at each DST boundary.
Never write raw UTC values
Schedules written in UTC drift by an hour relative to business hours when DST transitions occur. Always express times in Europe/Berlin local time.
Change the frequency¶
Common patterns — all expressed in Europe/Berlin local time with timezone: "Europe/Berlin":
| Intent | cron expression |
|---|---|
| Once daily, every day | '0 2 * * *' |
| Once daily, weekdays only | '0 6 * * 1-5' |
| Hourly from 07:00 to 13:00, weekdays | '0 7-13 * * 1-5' |
| Every 3 hours from 07:00 to 16:00, weekdays | '0 7-16/3 * * 1-5' |
| Every 15 minutes from 07:00 to 12:45, weekdays | '0,15,30,45 7-12 * * 1-5' |
| Weekend run at 12:45 | '45 12 * * 0,6' |
Trigger a one-off manual run¶
Every scheduled workflow also exposes a workflow_dispatch trigger with a confirm boolean input.
- Go to the workflow in the GitHub Actions tab.
- Click Run workflow.
- Set Confirm manual load to
true. - Click Run workflow.
The run uses the same jobs and secrets as a scheduled run.
Concurrency and queuing¶
Each workflow has a concurrency group with cancel-in-progress: false. This means:
- If a run is already in progress when a new trigger fires, the new run waits — it does not cancel the current one.
- Do not schedule multiple runs for the same stack at nearly the same time. Runs that arrive while the queue is occupied may be delayed significantly.
Remove a schedule¶
To stop a scheduled load entirely, either delete the workflow file or remove its schedule: block (leaving only the workflow_dispatch: trigger if you want to keep manual runs possible). Merge to main.