今までtarget branchにmergeされた時点でUnit Testを行いArchiveしてFabric配布していたのだが、そもそも開発フロー的にUnit Testが成功していることが前提でtarget branchにmergeされるべきなのでなんとかしたい、と同僚からごもっともなご意見があったので、Pull Request作成時点およびsource branchにpushされたらUnit Testを行うようにしてみた。
設定箇所のYAML
Unit Testだけ行う単純なworkflowの追加。
...
workflows:
unit_test:
steps:
- activate-ssh-key@3.1.1:
run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
- git-clone@3.5.2: {}
- cache-pull@1.0.0: {}
- certificate-and-profile-installer@1.8.8: {}
- cocoapods-install@1.7.1: {}
- carthage@3.1.3:
inputs:
- carthage_options: "--platform iOS --cache-builds"
- set-xcode-build-number@1.0.5:
inputs:
- plist_path: "$BITRISE_INFO_PLIST_PATH"
- build_version: "$BITRISE_BUNDLE_VERSION"
- xcode-test@1.18.10:
inputs:
- project_path: <WORKSPACE_NAME>.xcworkspace
- scheme: "$BITRISE_SCHEME"
...
develop ブランチがターゲットのプルリクをフックしてunit_test workflowを実行する。
...
trigger_map:
- pull_request_source_branch: "*"
pull_request_target_branch: develop
workflow: unit_test
...
作業
Webhook追加
まずはGitHub 側にPull Request and PushのWebhookを用意する。
GitHubプロジェクト > Settingsタブ > Webhooks
既に https://hooks.bitrise.io
から始まるURLでpull_request and push
のフックがあればスキップ。
無い場合は以前書いた記事の 1-1 を行い追加してください。
Workflow追加
BitriseにUnit Testだけ行うworkflowを作る。
既存の配布workflowをベースにして作ると楽。
不要なステップを削除して最後にUnit Testを行うようにする。
Trigger追加
Bitriseの Workflow Editor > Triggers > Pull Request
に追加する。
SOURCE BRANCH
は * にしておく。
workflowは上で作成したものを指定する。
配布用のworkflowからUnit Testを外しておく
target branchにmergeされた後に発動する配布workflowがある場合、もうそこではUnit Test不要なのでステップを外しておく。これで少し早くなる。
Pull Request
プルリクしてみるとGitHubにもこのような形で表示される。
workflowの実行が終わるまで待つ。
感想
Bitriseの稼働が若干増えるが、プルリクした時やそれに変更を加えるごとにテスト実行してくれるようになったのでかなり安心。
mergeされてから「Unit Test通らないんですけどー」とかなくなるので、少なくともUnit Testだけ修正しないとならないチケットはもう作らなくて済むし、それを防ぐために毎回レビュー時にテスト実行しなくても良くなるのですごく楽になる!!はず!
あと配布時のビルドも数分早くなるので嬉しい。
ありがとう同僚!
MMMMMMMMMMMM
MMMMddddNMMM
MMMM mMMM
MMMMssssNMMM
MMMMMMMMMMMM
sMMMMd
yMMMMd
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdMMMM
MMMM MMMM
MMMM MMMM
MMMMM MMMMMM
MMMMMMMM MMMMMMMM
MMM' MMMM .yy. .yy. MMM 'MMM
MMMh MMMM .MMMMMMl. .lMMMMMMM. MMM hMMM
MMM MMMM .MMMMMmNMMMl. .MMMMNmMMMM. MMM MMM
MMMs MMMM .hhhh yhhh. .hhhh hhh+ MMM sMMM
MMM. MMMM MMM .MMM
MMMNMMMM MMMMNMMM
MMMMMM MMMMMM
MMMM MMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMM MMMM
MMMM MMMM
MMMM MMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM