2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Github ActionsでDanger+SwiftFormat

Last updated at Posted at 2020-01-01

はじめに

まずは、あけましておめでとうございます。
去年は新卒でいろいろとヨイショしていただいたので今年はもっと自走できる用にしたいと思います。

本稿はiOSプロジェクトでDangerSwiftFormatによるプルリクの検査を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

コードで大体わかると思いますが、以下のことを行っています。

  1. プルリク(関連のイベント)をトリガーに
  2. ブランチのチェックアウト
  3. Rubyのインストール
  4. Bundleのキャッシュ
  5. BundlerのインストールとGemfileのライブラリをインストール
  6. CococaPodsのキャッシュ
  7. Podfileのライブラリをインストール
  8. 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日目から投稿できた!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?