「github actions on schedule cron "複数" 指定」でググっても、複数指定の方法がドンピシャで出てこなかったので自分のググラビリティとして。
TL; DR (今北産業)
-
cron
の設定ごとに- cron:
を定義する。複数のcronジョブをon.schedule.cronに定義する例on: schedule: - cron: '0 18 * * SUN' - cron: '0 2 * * MON'
-
cron
は UTC なので日本時間(JST)に合わせたい場合は 9 時間引いた時間を指定する。 -
POSIX 準拠の crontab シンタックス(構文)。それ以外は使えない。例えば
@weekly
などは使えない。
関連資料
- schedule | Events that trigger workflows | Reference @ docs.github.com
- crontab guru オンライン crontab ジェネレーター
- crontab サンプル集 | よくある crontab 設定
TS; DR (ドキュメント嫁に叱られる)
リストや配列にするとシンタックス(構文)エラーが出ます。
on:
schedule:
- cron: |
'0 18 * * SUN'
'0 2 * * MON'
公式ドキュメントから確認
確認すべきは公式ドキュメントからということで、ドキュメントと漁るとドンピシャの記述がありました。
A single workflow can be triggered by multiple
schedule
events. You can access the schedule event that triggered the workflow through thegithub.event.schedule
context. This example triggers the workflow to run at 5:30 UTC every Monday-Thursday, but skips theNot on Monday or Wednesday
step on Monday and Wednesday.【筆者訳】
1 つのワークフローは、複数の "schedule
" イベントでトリガー(発火)させることができます。どのschedule
イベントがワークフローを発火させたかは、"github.event.schedule
" コンテキストで確認できます。以下の例では、ワークフローは月曜日から木曜日の 5:30 UTC にトリガーされるものの、「Not on Monday or Wednesday
」ステップはif
文により月曜もしくは水曜にスキップしています。on: schedule: # 筆者注: 以下は cron: '30 5 * * 1,2,3,4' と同等 - cron: '30 5 * * 1,3' - cron: '30 5 * * 2,4' jobs: test_schedule: runs-on: ubuntu-latest steps: - name: Not on Monday or Wednesday if: github.event.schedule != '30 5 * * 1,3' run: echo "This step will be skipped on Monday and Wednesday" - name: Every time run: echo "This step will always run"
JSON スキーマから確認
公式ドキュメントで複数指定できることはわかったものの、余計な情報(if
文による分岐)も多く、cron
に関しての情報がほとんどありません。
schemastore.org の GitHub Workflow の JSON スキーマの定義を見ると、cron
の型は string
でした。つまり、配列型で指定すると当然エラーが出るということです。
そして、親要素の schedule
を見ると type
が配列(array
)になっているので、cron
を 1 アイテムとして配列にすればいいと言うことでした。とほほ。
"on": {
"schedule": {
"$comment": "...",
"description": "...",
"type": "array", // <- shcedule は array
"items": {
"properties": {
"cron": {
"$comment": "...",
"type": "string", // <- cron は string
"pattern": "^(((\\d+,)+\\d+|((\\d+|\\*)\\/\\d+|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|(\\d+-\\d+)|\\d+|\\*|MON|TUE|WED|THU|FRI|SAT|SUN) ?){5,7}$"
}
}
}
}
}
- (github-workflow.json | @ schemastore.org より)