⚙️
GitHub Actions で XCTest を実行する
GitHub Actions で XCTest を実行してみる
GitHub Actions に対応しているシミュレータ
以下の表から確認できます。
記事を書いている現在 iOS14.4 までなので、もしテスト実行のターゲット OS を 14.5 以降に設定していると GitHub Actions 実行時にシミュレータが存在しないため、テストが実行されずにワークフローがパスしたことになるので注意が必要です。
GitHub Actions 上では、以下の警告が表示され Continuing with testing
と出力され、テストを続行し、ワークフローが失敗してくれないのでうまくいっているものと勘違いしやすいです。
warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 14.5, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'XCTestExampleTests' from project 'XCTestExample')
2021-08-19 02:43:16.651 xcodebuild[1100:8110] IDETestOperationsObserverDebug: Writing diagnostic log for test session to:
/Users/runner/Library/Developer/Xcode/DerivedData/XCTestExample-ggawoeumschpccclqsuwuwavcwys/Logs/Test/Test-XCTestExample-2021.08.19_02-41-08-+0000.xcresult/Staging/1_Test/Diagnostics/XCTestExampleUITests-CC04D5F9-ADE8-4E5A-AAAE-3B8AD7342816/XCTestExampleUITests-D35706D8-F92D-4EA4-8C5B-09EFA34FD696/Session-XCTestExampleUITests-2021-08-19_024316-Aefwk0.log
2021-08-19 02:43:16.651 xcodebuild[1100:7908] [MT] IDETestOperationsObserverDebug: (667C8420-783E-4D3A-A7DC-1E9B75CF9790) Beginning test session XCTestExampleUITests-667C8420-783E-4D3A-A7DC-1E9B75CF9790 at 2021-08-19 02:43:16.651 with Xcode 12D4e on target <DVTiPhoneSimulator: 0x7fc42cf576a0> {
SimDevice: iPhone 8 (EA2D3EF4-6484-468E-9F25-9CBC20BADC60, iOS 14.4, Shutdown)
} (14.4 (18D46))
2021-08-19 02:43:34.082 xcodebuild[1100:7908] [MT] IDETestOperationsObserverDebug: (667C8420-783E-4D3A-A7DC-1E9B75CF9790) Finished requesting crash reports. Continuing with testing.
ブランチを保護する
ワークフローが成功しないとマージできないように Branch Protection Rule から設定できます。
Status checks that are required.
の部分は GitHub Actions YAML の job 名の部分を設定することでこのジョブがパスしないとマージできないようにできます。
ステータスをREADMEに表示する
README によく貼ってある「CI passing」のバッジは Actions からマークダウンを取得可能なので、これをコピーして README にペーストすれば表示されるようになります。
Example
これらの動きを以下のリポジトリで検証しました。
GitHub Actions
ワークフローを動かすための設定ファイルは以下の部分です。
わざとテストを失敗させる
ワークフローが失敗し、この状態ではマージできないことを確認できました。
一応、この状態でも管理者権限であればマージすることは可能です。
わざとビルドを失敗させる
テストだけでなく、ビルドエラーの場合も同様に検知可能です。
ちゃんとテストを成功させる
ワークフロー実行中はマージできないようになっています。
ワークフローが成功するとマージできるようになります。
GitHubで編集を提案
Discussion
ちょうど GitHub Actions で Xcode12.5 が動くようになりました。
macOS 11 が利用できるようになるので、 iOS 15 も動かせそうです。
GitHub Actions で xcresulttool を併用するとテスト結果が見やすくなります。