概要
BitriseでiOSアプリのCI/CD環境を構築すると簡単にSwiftLintのチェックを導入する事ができます。Bitriseの機能を使用しておりFastlaneやDangerを使用してません。
前提
本記事は以下の前提で作ってます。
- Bitriseでアプリのビルドを完了している事。
- SwiftLintをSwiftPMで導入している事。
-
BuildTools
ディレクトリにPackage.swift
を置いている事。 -
.swiftlint.yml
がプロジェクトルートにある事。
-
Bitriseのステップ構成
1. Activate SSH key (RSA private key)
ステップ
- 役割
- Bitrise->GitリポジトリのSSH接続が有効にする。
- 必要な設定
- 特に設定する必要はありません。
2. Git Clone Repository
ステップ
- 役割
- Gitリポジトリからソースコードを取得する。
- 必要な設定
- 特に設定する必要はありません。
3. Script
ステップ
- 役割
- SwiftLintのソースコードを取得する。
- SwiftLintをビルドして実行バイナリを作成する。
- 必要な設定
- [SwiftLintのソースコード取得とビルド]のbashコードを[Script content]に設定します。
4. SwiftLint
ステップ
- 役割
-
swiftlint
バイナリを実行する。(swiftlint lint --config .swiftlint.yml
) - BitriseのArtifactsにレポートファイルを作成する。
-
- 必要な設定
- 2023/11現在では
0.X.X
と1.X.X
の2つ存在しますが、1.X.X
の方を選択します。 - [Select the path where Swiftlint should lint]
-
$BITRISE_SOURCE_DIR/BuildTools/.build/release/
を設定する。
-
- [Linting configuration file]
-
$BITRISE_SOURCE_DIR/.swiftlint.yml
を設定する。
-
- [Select the reporter type]
-
html
を設定する。
-
- 2023/11現在では
5. Deploy to Bitrise.io - Build Artifacts, Test Reports, and Pipeline intermediate files
ステップ
- 役割
- レポートファイルをBitriseのArtifactsにデプロイする。
- 必要な設定
- 特に設定する必要はありません。
6. Script
ステップ
- 役割
- ArtifactsにあるレポートファイルのダウンロードURLを取得する。
- 必要な設定
- [レポートファイルのダウンロードURL取得]のbashコードを[Script content]に設定します。
7. Send Microsoft Teams message
ステップ
- 役割
- MS Teamsに結果を通知する。
- 必要な設定
- [Microsoft Teams Webhook URL]
- TeamsのWebhook URLを設定する。
- [A list of buttons attached to the message as link buttons]
-
Install Page|${BITRISE_PUBLIC_INSTALL_PAGE_URL}
を追加する。
-
- [Microsoft Teams Webhook URL]
SwiftLintのソースコード取得とビルド
#!/usr/bin/env bash
xcrun --sdk macosx swift build -c release --package-path $BITRISE_SOURCE_DIR/BuildTools --product swiftlint
レポートファイルのダウンロードURL取得
#!/usr/bin/env bash
# Fetch report file name
REPORT_FILE_NAME=`basename $SWIFTLINT_REPORT_PATH`
# Fetch report url
SWIFTLINT_REPORT_URL=$(echo $BITRISE_PERMANENT_DOWNLOAD_URL_MAP | tr "|" "\n" | grep -F $REPORT_FILE_NAME | sed 's/.*=>\(.*\)/\1/')
# Add environment value
envman add --key SWIFTLINT_REPORT_URL --value "$SWIFTLINT_REPORT_URL"
BITRISE_PERMANENT_DOWNLOAD_URL_MAP
にファイル名=>URL|ファイル名=>URL
の形式でSwiftLintのレポートファイルのURLが格納されるため、そこからhtmlファイルのファイル名をgrepしてURLを取得します。
所感
Bitriseの機能を使用する事で簡単にSwiftLintのチェックをCI/CD環境に取り込める事ができました。GitLab環境でdanger-gitlabがうまく動作しなかったので、私の場合はこの方法がフィットしました。
MS Teams通知のステップはSend a Slack message
ステップやComment on GitHub Pull Request
ステップに置き換えることでSlack通知やGithubのPRへコメントする事もできそうです。
また、この方法だとダウンロードリンクのURLが取得されるのですが、Bitrise APIを使用する事で直接レポートファイルのURLを取得できそうです。