🕒

YouTrack のワークフローで隔週実行したいんじゃ

2023/03/31に公開

結論 3 行

  1. 「JavaScriptエディタ」で新規ワークフローを作成
  2. 「スケジュール時」モジュールで毎週実行する cron を設定
  3.    guard に隔週判定ロジックを追加
  guard: () => {
    return Math.floor(Date.now() / 1000 / 60 / 60 / 24 / 7) % 2 === 0;
  }

ことの始まり

「隔週木曜に YouTrack に Issue を追加したい」という要望がでた。
すでに毎週実行のワークフローあるし、それに倣って設定をチョチョイと変えれば終わると思い快諾。
いざワークフローを作成し設定を開いたところ

な ん と シ ン プ ル !!!

複雑な設定はカスタムに閉じ込めるというお手本のような UI に感動し「カスタム」を開いたところ

C r o n 式 の 設 定 !!!

余計な UI はつくらないという強い意志に感動し、ふと思う cron って隔週設定できたっけ?
こうして長い旅が始まった。

隔週設定のしかた

  1. 「新規ワークフロー」の作成時に「JavaScriptエディタ」を選ぶ
  2. 「スケジュール時」モジュールを追加し、毎週実行されるように cron を設定
    例) 毎週木曜の 8:30 に実行したい場合は cron: '0 30 8 ? * THU *'
  3. モジュールの 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 エディタで作ることで他にも色々と設定できそうなので、自動化できるものはどんどん自動化していきたいと思いました。

参考

https://pleiades.io/help/youtrack/server/Web-based-Workflow-Editor.html

Discussion