はじめに
まずは、あけましておめでとうございます。
去年は新卒でいろいろとヨイショしていただいたので今年はもっと自走できる用にしたいと思います。
本稿はiOSプロジェクトでDanger
とSwiftFormat
によるプルリクの検査をGithub Actions
で行おうとしたときのメモです。
Github Actionsについては本稿では詳しく述べません(できない)のであしからず…
workflow file
とりあえず結論から。2020/1/2 時点で使用しているのは以下のworkflow fileです
※2020/1/2 修正: cacheを使うようにしました。参考
name: Danger
on: [pull_request]
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- name: Setup ruby
uses: actions/setup-ruby@v1
with:
ruby-version: '2.6.3'
- name: Cache bundle
uses: actions/cache@v1
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gem-
- name: Bundle install
run: |
gem install bundler
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Cache CocoaPods
uses: actions/cache@v1
with:
path: Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Pod install
run: bundle exec pod install
- name: Run danger
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: bundle exec danger
コードで大体わかると思いますが、以下のことを行っています。
- プルリク(関連のイベント)をトリガーに
- ブランチのチェックアウト
- Rubyのインストール
- Bundleのキャッシュ
- BundlerのインストールとGemfileのライブラリをインストール
- CococaPodsのキャッシュ
- Podfileのライブラリをインストール
- Dangerを実行
ライブラリ構成
SwiftFormat込みでこのworkflowを動かすには、
Bundler
├ Danger
├ danger-swiftformat
└ CococaPods
└ SwiftFormat/CLI
の構成でのライブラリの管理が最低限必要になります。
Gemfile
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem "cocoapods", "1.8.4"
gem "danger", "6.1.0"
gem "danger-swiftformat", "0.6.0"
Podfile
target 'HOGE' do
pod 'SwiftFormat/CLI', :git => 'https://github.com/nicklockwood/SwiftFormat', :tag => '0.40.14', :configurations => ['Debug']
end
Dangerfile
swiftformat.binary_path = "Pods/SwiftFormat/CommandLineTool/swiftformat"
swiftformat.check_format(fail_on_error: true)
はまったところ
Github Actionsは元々dangerサポート?
Github ActionsでDangerやりたいなーと調べていたとき、
Github Actionsは元々dangerサポートしているので run: danger でおk
みたいな記事を参考にしてやってたのですが、no such command
でどっちやねんってなってました。
結局Bundlerでインストールしてbundle exec danger
でうまくいきました。
Invalid `Dangerfile` file: No such file or directory - swiftformat
これは単純にSwiftFormatのバイナリファイル(実行するファイル)を指定していなかったためでした。
swiftformat.binary_path = "Pods/SwiftFormat/CommandLineTool/swiftformat"
で明示的に指定して解決しました。
Invalid `Dangerfile` file: Error running SwiftFormat: Error: Pods/SwiftFormat/CommandLineTool/swiftformat: 12: Pods/SwiftFormat/CommandLineTool/swiftformat: Syntax error: "(" unexpected
これは結構悩みました… エラー文言に惑わされて、パスの文字列に変な文字でも入ってるかな?と最初疑いましたが関係ありませんでした。
結論から言うと、実行環境をubuntu-latest
からmacos-latest
にしたことで解決しました。
ちゃんと検証していないので確定ではないですが… 僕のMacのローカル環境でのSwiftFormatのバイナリのパスはPods/SwiftFormat/CommandLineTool/swiftformat
だったのですが、Ubuntuでは違うものになるのかなと推測しています。
最後に
Github Actions
便利ですね!
はじめはBitriseで同じことをしようと思っていましたが、明らかにスマートに実装できています。
新年1日目から投稿できた!