Swift プロジェクトの テスト CI を Travis CI から GitHub Actions へ移行
Travis CI を使って GitHub のプロジェクトに push した時に、自動でテストが実行されるようになったいたのを GitHub Actions に変えてみた。
GitHub actions の yaml の書き方や、Travis CI からの移行については以下のドキュメントが参考になる。
実施した手順のメモ。
1. プロジェクトのルートに .github
フォルダを作成
2. .github
フォルダ内に workflows
フォルダを作成
3. workflows
に yml ファイルを作成し、そこにテストの内容を記述していく。
たとえば、こんな感じ。
name: ci on: push: branches: - master pull_request: branches: - '*' jobs: testing_macos: runs-on: macos-11 steps: - uses: actions/checkout@v1 - name: "Xcode13 iOS" run: xcodebuild clean test -project Test.xcodeproj -scheme Test-iOS -sdk iphonesimulator -destination "platform=iOS Simulator,OS=15.0,name=iPhone 8" -configuration Debug
4. ブランチを新たに作り、今までの作業内容をコミットして、プルリクエストする。
on: push: branches: - master pull_request: branches: - '*'
この部分の記述で pull request した時も GitHub アクションが実施されるようにしているので、このプルリクエストのタイミングで実際にテストが開始されるのを確認できる。
5.プルリクエストのテストが成功したら、main ブランチにマージする。
GitHub のページから UI でワークフロー・GitHub アクションも作れるのだけど、上のような感じで UI を介さずに、作ることもできる。
実際 Travis CI と GitHub Actions だとどう yaml が変わったというと、、、
Travis CI の時(macOS 上で iOS, macOS, tvOS のテスト+Linux 上のテスト)
branches: only: - master matrix: include: - os: osx language: swift osx_image: xcode12 script: # iOS - xcodebuild clean -project "MurmurHash.xcodeproj" - xcodebuild test -project "MurmurHash.xcodeproj" -scheme "MurmurHash-iOS" -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 11 Pro Max" -configuration Debug # macOS - xcodebuild clean -project "MurmurHash.xcodeproj" - xcodebuild test -project "MurmurHash.xcodeproj" -scheme "MurmurHash-macOS" -destination "platform=OS X" -configuration Debug # tvOS - xcodebuild clean -project "MurmurHash.xcodeproj" - xcodebuild test -project "MurmurHash.xcodeproj" -scheme "MurmurHash-tvOS" -sdk appletvsimulator -destination "OS=12.2,name=Apple TV 4K" -configuration Debug - os: linux language: generic dist: xenial sudo: false addons: apt: packages: - wget # Ubuntu needs following packages to build Swift. # # Reference: # https://github.com/apple/swift#System-Requirements - git - cmake - ninja-build - clang - python - uuid-dev - libicu-dev - icu-devtools - libbsd-dev - libedit-dev - libxml2-dev - libsqlite3-dev - swig - libpython-dev - libncurses5-dev - pkg-config - libblocksruntime-dev - libcurl4-openssl-dev - systemtap-sdt-dev - tzdata - rsync script: - wget https://swift.org/builds/swift-5.3-release/ubuntu1604/swift-5.3-RELEASE/swift-5.3-RELEASE-ubuntu16.04.tar.gz - tar xvfz swift-5.3-RELEASE-ubuntu16.04.tar.gz - export PATH=$(pwd)/swift-5.3-RELEASE-ubuntu16.04/usr/bin:"${PATH}" - swift build - swift test
GitHub Actions の時(テストの内容は、Travis CI と同じ。Xcode や OS のバージョンは上げている)
name: ci on: push: branches: - master pull_request: branches: - '*' jobs: testing_macos: runs-on: macos-11 steps: - uses: actions/checkout@v1 - name: "Xcode13 iOS" run: xcodebuild clean test -project MurmurHash.xcodeproj -scheme MurmurHash-iOS -sdk iphonesimulator -destination "platform=iOS Simulator,OS=15.0,name=iPhone 8" -configuration Debug env: DEVELOPER_DIR: /Applications/Xcode_13.0.app/Contents/Developer - name: "Xcode13 macOS" run: xcodebuild clean test -project MurmurHash.xcodeproj -scheme MurmurHash-macOS -destination "platform=OS X" -configuration Debug env: DEVELOPER_DIR: /Applications/Xcode_13.0.app/Contents/Developer - name: "Xcode13 tvOS" run: xcodebuild clean test -project MurmurHash.xcodeproj -scheme MurmurHash-tvOS -sdk appletvsimulator -destination "platform=tvOS Simulator,OS=15.0,name=Apple TV" -configuration Debug env: DEVELOPER_DIR: /Applications/Xcode_13.0.app/Contents/Developer testing_linux: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v1 - name: "Linux" run: swift test
となった。
まあ、そこまで変わらない感じでかけた。(使っていないけど、GitHub actions でも matrix を書けるらしい)
あと、Travis CI の時は、Linux で Swift 実行環境を作るためにパッケージインストールをしていたのが、GitHub だと最初から入っているので、楽。
GitHub で使える OS 環境は以下を見た。
ちなみに GitHub アクションでも、ビルドステータスのバッチがつけれます。