Hourly scheduled builds via a ??:MM slot

`atTimes: ["??:05"]` runs a build five past every hour. The pattern expands
to its 24 concrete slots before the due-slot match, so each hour is its own
slot in the trigger state and fires once — the existing per-slot semantics
carry over unchanged, including that only the latest due slot of a day
triggers and that a slot whose pool is still building is retried until it
starts.

Only the hour may be a wildcard; anything else is skipped with a warning.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-29 07:52:22 +02:00
co-authored by Claude Opus 5
parent 08a8a0bbb4
commit 939d8eeb9c
5 changed files with 55 additions and 6 deletions
@@ -16,7 +16,11 @@ import java.time.Instant
data class BuildDefinition(
/** Build every new commit of the selected branches. */
val onPush: Boolean = false,
/** Daily UTC times `HH:MM`; each slot rebuilds the selected branches' heads once per day. */
/**
* Daily UTC times `HH:MM`; each slot rebuilds the selected branches' heads once per day.
* `??:MM` is the hourly form — it stands for that minute of every hour, so each of its
* 24 slots triggers separately.
*/
val atTimes: List<String> = emptyList(),
/**
* Branch names or glob patterns (`*` matches any characters, also across `/`);