🕒
YouTrack のワークフローで隔週実行したいんじゃ
結論 3 行
- 「JavaScriptエディタ」で新規ワークフローを作成
- 「スケジュール時」モジュールで毎週実行する cron を設定
- guard に隔週判定ロジックを追加
guard: () => {
return Math.floor(Date.now() / 1000 / 60 / 60 / 24 / 7) % 2 === 0;
}
ことの始まり
「隔週木曜に YouTrack に Issue を追加したい」という要望がでた。
すでに毎週実行のワークフローあるし、それに倣って設定をチョチョイと変えれば終わると思い快諾。
いざワークフローを作成し設定を開いたところ
な ん と シ ン プ ル !!!
複雑な設定はカスタムに閉じ込めるというお手本のような UI に感動し「カスタム」を開いたところ
C r o n 式 の 設 定 !!!
余計な UI はつくらないという強い意志に感動し、ふと思う cron って隔週設定できたっけ?
こうして長い旅が始まった。
隔週設定のしかた
- 「新規ワークフロー」の作成時に「JavaScriptエディタ」を選ぶ
- 「スケジュール時」モジュールを追加し、毎週実行されるように cron を設定
例) 毎週木曜の 8:30 に実行したい場合はcron: '0 30 8 ? * THU *'
- モジュールの guard に隔週判定のロジックを追加
guard に boolean を返すメソッドを設定することで、true の場合のみ action が実行されるようになる。
例)Math.floor(Date.now() / 1000 / 60 / 60 / 24 / 7) % 2 === 0
隔週判定ロジック
UNIX 時間的に第何週かを求め、それが 2 で割り切れるかどうかで判定する。
Math.floor(Date.now() / 1000 / 60 / 60 / 24 / 7) % 2 === 0
Math.floor(Date.now() / 1000 / 60 / 60 / 24 / 7)
で UNIX 時間的に、現在が第何週かが求められる。
2023/3/31 時点では 2778 週となる。
2778 % 2 === 0
で、求めた第何週が 2 で割り切れるかを判断。
3 週毎に実行したい場合は 2 の部分を 3 にすればよい。
感想
JavaScript エディタで作ることで他にも色々と設定できそうなので、自動化できるものはどんどん自動化していきたいと思いました。
参考
Discussion