モチベーション
先日の登壇時のQandAタイムで頂いたコメントに整理がついたのでまとめておく。
頂いたコメント
ここはRerunさせなくてもワークフロー内のジョブの requires
句に指定すれば1回の実行で済んでRerunさせる必要はなくなりそう?つまり以下の感じ。
workflows: ios-workflow: jobs: - ios-test-job - workflow-status-check-job: requires: - ios-test-job
コメントを受けて
頂いたコメントは間違いない。ただ、自分のコードは思想が紛れていて上記のように修正しても期待した結果は得られない。以下の思想のパターンがあると思っていて自分は後者であることが分かった。その場合スライドの手法が上手くいく。
前者の方が対応関係が明確。後者は対応関係が非直感的だがより安全にマージするためにワークフロー単位でグリーンorレッドを判断する。
思想
"GitHub ステータスはCircleCIのジョブが対象。けどジョブの上位存在であるワークフローが成功したかどうかをGitHub ステータスとして機能させたい" というのが個人の思想。例えば、GitHub ステータスのRequiredに指定したジョブ自体は成功でも、前後のジョブで失敗したら果たしてそれは安全にマージできる状態なのか?もっとも、マージ前にグリーンでありたいワークフローのジョブすべてにRequiredをつけるのも案だとは思うが冗長な気がする。対応策として、Requiredに指定したジョブを含むワークフロー自体がグリーンになったら状態確認用ジョブ(スライド中の workflow-status-check-job
)をグリーンにする。
どこに関心があるか
自分はワークフロー単位でGitHub ステータスのRequiredを指定したい。なぜならジョブ単体の実行結果にさほど興味はなく(差はあれど)、ジョブの集合体であるワークフローの実行結果にのみ関心があるからだ。Requiredに指定したテストの後処理で失敗してたら気になるのでマージしたくない、みたいな気持ち。