はじめに
今回は、Slackへの投稿処理をレーンごとに設定することをやめたい(すっきりさせたい)というモチベーションのもと、調べたり試したことを記録に残します。
環境
・macOS Catalina 10.15.7
・Xcode 12.2
・bash 3.2.57
・bundler 2.1.4
・fastlane 2.170.0
・Visual Studio Code 1.50.1
本題
例えば、以下のようにテスト用のレーンとリリース用のレーンがあるとする。
default_platform(:ios) platform :ios do before_all do ENV["SLACK_URL"] = "{Webhook URL}" end lane :test do run_tests(device: "iPhone 12 Pro", scheme: "FastlaneTest", slack_message: "test has suceeded") end lane :release do sync_code_signing(type: "appstore") increment_version_number increment_build_number build_app( scheme: "FastlaneTest", configuration: "Release", silent: true, clean: true ) upload_to_app_store( skip_screenshots: true, skip_metadata: false, force: true ) slack(message: "Successfully uploaded a new App Store build") end error do |lane, exception| slack( message: exception.message, success: false ) end end
テスト用のレーンとリリース用のレーンに、それぞれSlackに投稿するメッセージが設定されているが、ひとまとめにできないのだろうか。仮にbeta用のレーンを追加したら、そこにもSlackに関する設定をすることになるし・・・。
ということで、以下のようにレーンの処理が完了した後に実行されるafter_allを使うことにした。これで、各レーンごとにSlackへの投稿設定をしなくてよくなった。
after_all do |lane| slack(message: "#{lane} has suceeded!") end
変更後のFastfileは以下のようになる。
default_platform(:ios) platform :ios do before_all do ENV["SLACK_URL"] = "{Webhook URL}" end lane :test do run_tests(device: "iPhone 12 Pro", scheme: "FastlaneTest", skip_slack: true) end lane :release do sync_code_signing(type: "appstore") increment_version_number increment_build_number build_app( scheme: "FastlaneTest", configuration: "Release", silent: true, clean: true ) upload_to_app_store( skip_screenshots: true, skip_metadata: false, force: true ) end after_all do |lane| slack(message: "#{lane} has suceeded!") end error do |lane, exception| slack( message: exception.message, success: false ) end end
※skip_slackに関して
run_testsでは、デフォルト設定のままだとWebhook URLが設定されていればSlackへ投稿するため、skip_slackをtrueする。(デフォルトのままだとrun_testsによって1回、after_allによって1回の計2回投稿が飛んでしまう。)
レーンごとにメッセージを変更したい場合は以下のように設定すればよい。
after_all do |lane| if lane == :test slack(message:"{testレーン成功時のメッセージ}") elsif lane == :release slack(message:"{releaseレーン成功時のメッセージ}") end end
おわりに
今回のような、「ちょっとした学び」系の内容がまだまだあるので記事にしていきます・・・!