CarthageやCocoaPodsの最新バージョン情報をSlackへ通知するfastlaneプラグインを作成しました


 二番煎じ、もしくは車輪の再発明かも知れないですが、自分の(狭い)観測範囲で見当たらなかったのと、ちょっとしたツール作成にちょうど良さそうな規模感だったので作ってみました。

 機能としてはCocoaPodsCarthageでインストールしているライブラリの最新バージョンのリリース状況を取得して、必要なら結果をSlackへ通知するものです。

 プロジェクトで利用しているライブラリのアップデートはリグレッションテスト(回帰テスト)が必要となったりとなかなか腰が重い作業ですが、とりあえず新しいバージョンがリリースされていることだけでも気付けるようにして、多少プレッシャーを与えられるような状況を作れればいいかなと思いました。
 JenkinsなどのCIツールに設定して定期的にSlackへ通知するだけでもいいかなと、そんなゆるふわな使い方を想定しています。

 また、実行した最新バージョンの結果を出力変数にセットしているので、他のアクションで利用することも可能です。
 例えばこちらの記事のように、GitHubのissueやPRを作るCIフローでも利用できるかなと思います。

 cocoapods_outdatedアクションの方はlane_context[SharedValues::COCOAPODS_OUTDATED_LIST]

[{:name=>"SDWebImage", :current=>"4.4.5", :available=>"4.4.6", :latest=>"5.0.0-beta6"}, {:name=>"SVProgressHUD", :current=>"2.2.4", :available=>"2.2.4", :latest=>"2.2.5"}]

この様な感じで値がセットされており、carthage_outdatedアクションの方にもlane_context[SharedValues::CARTHAGE_OUTDATED_LIST]にこれと同じ構造で値がセットされています。

注意点

 現状はまだ作成したばかりであるのと、他のソースコードを調べながら実装していて、利用できそうなロジックをパクって参考にした部分も多く、実際に挙動を確認できていない箇所が多いです。特にSlackのオプション周り。
 

Actions

  • cocoapods_outdated

    CocoaPodsの最新バージョンのリリース状況を取得して、必要ならSlackへ通知する。
    内部的にはpod outdatedを実行しているだけ。

  • carthage_outdated

    Carthageの最新バージョンのリリース状況を取得して、必要ならSlackへ通知
    内部的にはcarthage outdatedを実行しているだけ。

  • dependency_manager_outdated

    上記2つを実行

Slackへの通知

インストール

$ fastlane add_plugin dependency_manager_outdated

アクションの実行

$ bundle exec fastlane run cocoapods_outdated
$ bundle exec fastlane run carthage_outdated

Fastlaneへの組み込み

lane :test_cocoapods do |options|
  cocoapods_outdated(
    no_repo_update: true,
    slack_url: "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX",
  )
end
lane :test_carthage do |options|
  carthage_outdated(
    project_directory: "path/to/xcode/project",
  )
end

プラグインのヘルプ

+-----------------------------------------+---------+------------------------------+
|                                   Used plugins                                   |
+-----------------------------------------+---------+------------------------------+
| Plugin                                  | Version | Action                       |
+-----------------------------------------+---------+------------------------------+
| fastlane-plugin-dependency_manager_out  | 0.2.1   | cocoapods_outdated           |
| dated                                   |         | dependency_manager_outdated  |
|                                         |         | carthage_outdated            |
+-----------------------------------------+---------+------------------------------+

+-----------------------------------------+-----------------------------------------+------------------+
|                                      Available fastlane actions                                      |
+-----------------------------------------+-----------------------------------------+------------------+
| Action                                  | Description                             | Author           |
+-----------------------------------------+-----------------------------------------+------------------+
|                                            ...                                                       |
| carthage_outdated                       | Check outdated Carthage dependencies    | matsuda          |
|                                            ...                                                       |
| cocoapods_outdated                      | Check outdated CocoaPods dependencies   | matsuda          |
|                                            ...                                                       |
+-----------------------------------------+-----------------------------------------+------------------+

cocoapods_outdatedアクション

$ bundle exec fastlane action cocoapods_outdated

############################ 省略 ##############################

+-------------------+------------------------------+------------------------------+------------------------------+
|                                           cocoapods_outdated Options                                           |
+-------------------+------------------------------+------------------------------+------------------------------+
| Key               | Description                  | Env Var                      | Default                      |
+-------------------+------------------------------+------------------------------+------------------------------+
| project_directory | The path to the root of the  | DEPENDENCY_MANAGER_PROJECT_  |                              |
|                   | project directory            | DIRECTORY                    |                              |
| use_bundle_exec   | Use bundle exec when there   | DEPENDENCY_MANAGER_COCOAPOD  | true                         |
|                   | is a Gemfile presented       | S_USE_BUNDLE_EXEC            |                              |
| no_repo_update    | Skip running `pod repo       | COCOAPODS_OUTDATED_REPO_UPD  |                              |
|                   | update` before install       | ATE                          |                              |
| slack_url         | Create an Incoming WebHook   | DEPENDENCY_MANAGER_SLACK_UR  |                              |
|                   | for your Slack group to      | L                            |                              |
|                   | post results there           |                              |                              |
| slack_channel     | #channel or @username        | DEPENDENCY_MANAGER_SLACK_CH  |                              |
|                   |                              | ANNEL                        |                              |
| slack_username    | Overrides the webhook's      | DEPENDENCY_MANAGER_SLACK_US  | fastlane                     |
|                   | username property if         | ERNAME                       |                              |
|                   | slack_use_webhook_configure  |                              |                              |
|                   | d_username_and_icon is       |                              |                              |
|                   | false                        |                              |                              |
| slack_icon_url    | Overrides the webhook's      | DEPENDENCY_MANAGER_SLACK_IC  | https://s3-eu-west-1.amazon  |
|                   | image property if            | ON_URL                       | aws.com/fastlane.tools/fast  |
|                   | slack_use_webhook_configure  |                              | lane.png                     |
|                   | d_username_and_icon is       |                              |                              |
|                   | false                        |                              |                              |
| skip_slack        | Don't publish to slack,      | DEPENDENCY_MANAGER_SKIP_SLA  | false                        |
|                   | even when an URL is given    | CK                           |                              |
+-------------------+------------------------------+------------------------------+------------------------------+
* = default value is dependent on the user's system

+-------------------------+-------------------------------------------------------+
|                       cocoapods_outdated Output Variables                       |
+-------------------------+-------------------------------------------------------+
| Key                     | Description                                           |
+-------------------------+-------------------------------------------------------+
| COCOAPODS_OUTDATED_LIST | List of the outdated pods in the current Podfile.lock |
+-------------------------+-------------------------------------------------------+

############################ 省略 ##############################

carthage_outdatedアクション

$ bundle exec fastlane action carthage_outdated

############################ 省略 ##############################

+-------------------+------------------------------+------------------------------+------------------------------+
|                                           carthage_outdated Options                                            |
+-------------------+------------------------------+------------------------------+------------------------------+
| Key               | Description                  | Env Var                      | Default                      |
+-------------------+------------------------------+------------------------------+------------------------------+
| project_directory | The path to the root of the  | DEPENDENCY_MANAGER_PROJECT_  |                              |
|                   | project directory            | DIRECTORY                    |                              |
| use_ssh           | Use SSH for downloading      | DEPENDENCY_MANAGER_CARTHAGE  |                              |
|                   | GitHub repositories          | _USE_SSH                     |                              |
| slack_url         | Create an Incoming WebHook   | DEPENDENCY_MANAGER_SLACK_UR  |                              |
|                   | for your Slack group to      | L                            |                              |
|                   | post results there           |                              |                              |
| slack_channel     | #channel or @username        | DEPENDENCY_MANAGER_SLACK_CH  |                              |
|                   |                              | ANNEL                        |                              |
| slack_username    | Overrides the webhook's      | DEPENDENCY_MANAGER_SLACK_US  | fastlane                     |
|                   | username property if         | ERNAME                       |                              |
|                   | slack_use_webhook_configure  |                              |                              |
|                   | d_username_and_icon is       |                              |                              |
|                   | false                        |                              |                              |
| slack_icon_url    | Overrides the webhook's      | DEPENDENCY_MANAGER_SLACK_IC  | https://s3-eu-west-1.amazon  |
|                   | image property if            | ON_URL                       | aws.com/fastlane.tools/fast  |
|                   | slack_use_webhook_configure  |                              | lane.png                     |
|                   | d_username_and_icon is       |                              |                              |
|                   | false                        |                              |                              |
| skip_slack        | Don't publish to slack,      | DEPENDENCY_MANAGER_SKIP_SLA  | false                        |
|                   | even when an URL is given    | CK                           |                              |
+-------------------+------------------------------+------------------------------+------------------------------+
* = default value is dependent on the user's system

+--------------------------+-------------------------------------------------------+
|                        carthage_outdated Output Variables                        |
+--------------------------+-------------------------------------------------------+
| Key                      | Description                                           |
+--------------------------+-------------------------------------------------------+
| CARTHAGE_OUTDATED_LIST   | List of the outdated dependencies in the current      |
|                          | Cartfile.resolved                                     |
| CARTHAGE_REPOSITORY_LIST | List of dependencies in the current Cartfile.resolved |
+--------------------------+-------------------------------------------------------+

############################ 省略 ##############################

dependency_manager_outdated

省略