Skip to content

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/ewe repository.
  • Scheduled workflows only fire on the main branch. Changes to schedules must be merged to main before 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

  1. Copy the closest existing scheduled workflow file. For a production-style stack, copy numera_load_scheduled_prod.yml; for a test stack, copy numera_load_scheduled_test.yml.

  2. Rename the file to numera_load_scheduled_<stack>.yml.

  3. Update the name: and run-name: fields to reference the new stack.

  4. Update the concurrency.group to a unique value, e.g. '${{vars.NUMERA_CUSTOMER}} | <stack> | load'. This prevents overlapping runs for the same stack.

  5. Set the schedule (see Change the firing time below).

  6. Update the numera_stack: input in each job to the new stack name.

  7. 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:

on:
  schedule:
    - cron: '0 6 * * 1-5'
      timezone: "Europe/Berlin"

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.

  1. Go to the workflow in the GitHub Actions tab.
  2. Click Run workflow.
  3. Set Confirm manual load to true.
  4. 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.