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
+3 -1
View File
@@ -118,7 +118,7 @@ builds:
# Example of a named build definition; all keys except its name are optional:
# pitest:
# onPush: false # trigger: build every new commit (default: false)
# atTimes: ["01:00"] # trigger: daily UTC times HH:MM (default: none)
# atTimes: ["01:00"] # trigger: daily UTC times HH:MM, "??:05" = hourly at :05
# branches: ["master", "release/*"] # selector: names or glob patterns (default: all)
# activeWithin: 24h # selector: only branches with commits in the last 24h
# buildCommand: ./gradlew piTestFull # overrides; unset keys fall back to the
@@ -265,6 +265,8 @@ Every key of the `builds` section names a build definition (a job) over the bran
A build definition has triggers, a branch selector, and build-setting overrides.
Triggers: `onPush: true` builds every new commit of the selected branches; `atTimes: ["HH:MM", …]` rebuilds their heads once per day and slot (UTC).
A slot may also be written as `??:MM` — that minute of every hour, expanded to its 24 slots, so the build runs hourly.
Only the latest due slot of a day triggers, so slots missed while the server was down are skipped instead of piling up, and a slot whose pool is still building is retried on the next poll cycle until it succeeds.
A definition may have both; one with neither never triggers automatically.
Selector: `branches` lists branch names or glob patterns (`*` matches any characters, also across `/`); empty selects all origin branches.