🐈
GitHub Actions を月初の日本時間0〜9時に実行したい
GitHub Actions の cron はタイムゾーンの指定ができない(UTC)
ちょっとした月次処理のスクリプトを書いてみました。
これを毎月1日と28日の日本時間午前0時から9時の間に実行したい。
これはちょっと困るやつです。
タイムゾーンで日本を指定できるなら、
'15 3 1,28 * *' # 毎月1,28日の3:15に実行
とかでいいんですが、UTCなので前日を指定しないといけない。
1日の前日(つまり前月の末日)は月によって違うし、うるう年も考えないといけないし。
しょうがないから毎日実行して日本時間での日付を確認する
-
時間は同じでいいので、9時間引いた値を設定しておく。
on: schedule: - cron: '15 18 * * *' # 毎日 3:15(JST) に実行
-
次のステップの if に使えるよう、環境変数に日本時間の日(1-31)をセットする。
タイムゾーンを Asia/Tokyo に設定した状態で、 date コマンドで日を取り出して GITHUB_ENV にセット。- name: Set current day of month as env variable env: TZ: 'Asia/Tokyo' # タイムゾーン指定 run: echo "CURRENT_DAY_OF_MONTH=$(date +'%-d')" >> $GITHUB_ENV
あとは if の条件で env.CURRENT_DAY_OF_MONTH の値をチェックすればいいはず。
お試し workflow の全体像
日本時間が反映されているかの確認と、ステップの実行を1日かそうでないかで制御しています。
./github/workflows/current-date-timezone.yml
name: Check Date
on:
schedule:
- cron: '15 18 * * *' # 毎日 3:15(JST) に実行
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out
uses: actions/checkout@v3
- name: Set current day of month as env variable
env:
TZ: 'Asia/Tokyo' # タイムゾーン指定
run: |
echo "CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV
echo "CURRENT_DAY_OF_MONTH=$(date +'%-d')" >> $GITHUB_ENV
- name: Show current date
run: echo ${{ env.CURRENT_DATETIME }} # 現在日時(JST) が表示される
- name: Show day of month
run: echo ${{ env.CURRENT_DAY_OF_MONTH }} # 日(1-31) が表示される
- name: Is the first day of the month
if: ${{ env.CURRENT_DAY_OF_MONTH == 1 }} # 1日の場合に実行
run: echo "Today is the first day of the month!"
- name: Is NOT the first day of the month
if: ${{ env.CURRENT_DAY_OF_MONTH != 1 }} # 1日ではない場合に実行
run: echo "Today is NOT the first day of the month."
時差の計算面倒だし、タイムゾーン指定できるようになるといいなー。
Discussion