😎
GitHub ActionsのM1 Runnerでスナップショットテストを動かす
前提
- 個人で開発しているアプリにスナップショットテストを導入したい
- pointfreeco/swift-snapshot-testing
- 正確にはすでに導入されているが、ローカルでしか動かせていないので、CI環境に乗せてPRごとにテストが動くようにしたい
- ローカルの開発環境はApple Siliconマシンである
- すでにユニットテストはXcode Cloudで動いているが、Xcode CloudはIntel環境なのでシミュレータの描画に微妙に差があるため完全一致のスナップショットテストができない
- 2023年10月にGitHub ActionsにM1プロセッサのmacOS Runnerが導入された
GitHub Actionsのジョブ設定
name: Snapshot test
on:
pull_request:
branches: [ "main" ]
jobs:
build:
name: Run snapshot test
runs-on: macos-latest-xlarge
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 15.1
- name: Set IDESkipPackagePluginFingerprintValidatation
run: defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
- name: Run Xcodebuild Test
run: set -o pipefail && xcodebuild test -workspace App.xcworkspace -scheme AppSnapshotTests -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' -resultBundlePath TestResults.xcresult | xcpretty
env:
SNAPSHOT_REFERENCE_DIR: ${GITHUB_WORKSPACE}/AppSnapshotTests/__Snapshots__
- name: Upload xcresult
uses: actions/upload-artifact@v4
if: success() || failure()
with:
name: "TestResults.xcresult"
path: "TestResults.xcresult"
compression-level: 1
ちなみにM1 Runnerは無料枠ないです
Discussion