mcpField
B
build-test-verify

build-test-verify

github.com/bitwardenテスト・品質9.6k47 回インストール今日更新
リポジトリ

build-test-verify について

Bitwarden Android プロジェクトのビルド、テスト、静的解析を支援する開発スキルです。Gradle コマンドやテストレポート、コード検索、リリース経路を案内します。

主な機能

  1. 01Android ビルドコマンドの案内
  2. 02ユニットテストとレポートの確認
  3. 03detekt と Android Lint
  4. 04コードベース内の要素検索
  5. 05バージョンと公開経路の説明

活用シーン

  1. 01debug または release のビルド
  2. 02モジュールやテストクラス単位の実行
  3. 03ステージ済みファイルの detekt 検査
  4. 04UI コンポーネントや ViewModel の検索

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bitwarden/android --skill build-test-verify

インストール後、Claude Code で/build-test-verifyを入力して読み込まれたか確認します。

詳細

ビルド、テスト、検証

環境設定

変数必須説明
GITHUB_TOKENはい(CI)SDK 用の GitHub Packages 認証(read:packages スコープ)
ビルドフレーバー-standard(Play ストア)、fdroid(Google サービスなし)
ビルドタイプ-debug、beta、release

Bitwarden SDK の解決に失敗する場合は、user.properties または環境変数の GITHUB_TOKEN を確認し、maven.pkg.github.com への接続を確認してください。


ビルド

# Debug builds
./gradlew app:assembleDebug
./gradlew authenticator:assembleDebug

# Release builds (requires signing keys)
./gradlew app:assembleStandardRelease
./gradlew app:bundleStandardRelease

# F-Droid builds
./gradlew app:assembleFdroidRelease

テストの実行

重要:アプリモジュールでは standard フレーバーを使用します。必ず testDebugUnitTest ではなく、testStandardDebugUnitTest を使用してください。

重要:テスト出力は、初回実行で失敗を捕捉できるフィルターに必ず通してください。Gradle はデフォルトで詳細な失敗出力を抑制するため、2 回目の実行なしで成功/失敗の結果とアサーションの詳細を確認するには、2>&1 | grep -E "FAILED|BUILD|expected:|actual:|AssertionError|failures" | head -30 を使用してください。

# App module tests (correct flavor!)
./gradlew app:testStandardDebugUnitTest 2>&1 | grep -E "FAILED|BUILD|expected:|actual:|AssertionError|failures" | head -30

# Run specific test classes
./gradlew app:testStandardDebugUnitTest --tests "com.x8bit.bitwarden.SomeTest" 2>&1 | grep -E "FAILED|BUILD|expected:|actual:|AssertionError|failures" | head -30

# Run all unit tests across all modules
./gradlew test

# Individual shared modules (no flavor needed)
./gradlew :core:test
./gradlew :data:test
./gradlew :network:test
./gradlew :ui:test

# Authenticator module
./gradlew authenticator:testStandardDebugUnitTest
テストレポートの確認

grep で取得できる内容より詳しい失敗の詳細が必要な場合は、HTML テストレポートを確認してください。

# After a test run, open the report at:
# app/build/reports/tests/testStandardDebugUnitTest/index.html
# Or read individual failure XML:
find app/build/test-results -name "*.xml" -exec grep -l "failure" {} \;
テスト構成
app/src/test/                    # App unit tests
app/src/testFixtures/            # App test utilities
core/src/testFixtures/           # Core test utilities (FakeDispatcherManager)
data/src/testFixtures/           # Data test utilities (FakeSharedPreferences)
network/src/testFixtures/        # Network test utilities (BaseServiceTest)
ui/src/testFixtures/             # UI test utilities (BaseViewModelTest, BaseComposeTest)
テストクイックリファレンス
  • ディスパッチャー制御::core:testFixtures の FakeDispatcherManager
  • MockK:mockk<T> { every { } returns }、サスペンド関数には coEvery { }
  • Flow のテスト:BaseViewModelTest の stateEventFlow() ヘルパーを使用した Turbine
  • 時間制御:決定的な時間テストには Clock を注入します

Lint と静的解析

重要:変更したファイルのみを対象に detekt を実行してください。プロジェクト全体のスキャンは時間がかかり、開発中には不要です。このプロジェクトでは、detekt の対象をステージ済みファイルに限定する -Pprecommit=true フラグをサポートしています。

重要:初回実行でエラーを捕捉できるよう、detekt の出力は必ずフィルターに通してください。detekt は違反の詳細を stderr/stdout に出力しますが、Gradle によって見えにくくなることがあります。違反をすぐに確認するには、以下の grep パターンを使用してください。

# Detekt on staged files only (preferred during development)
git add -u && ./gradlew -Pprecommit=true detekt 2>&1 | grep -E "FAILED|BUILD|Line |Rule |Signature|detekt" | head -40

# Detekt on all files (full scan, use sparingly)
./gradlew detekt 2>&1 | grep -E "FAILED|BUILD|Line |Rule |Signature|detekt" | head -40

# Android Lint
./gradlew lint

# Full validation suite (detekt + lint + tests + coverage)
./fastlane check
-Pprecommit=true の仕組み

ルートの build.gradle.kts では、このプロパティが設定されていると、detekt タスクが git diff --name-only --cached を使用してステージ済みファイルのみを解析するように設定されています。これは、プロジェクトの pre-commit フックで使用されるものと同じ仕組みです。実行前に git add で変更をステージしてください。


コードベースの調査

# Find existing Bitwarden UI components
find ui/src/main/kotlin/com/bitwarden/ui/platform/components/ -name "Bitwarden*.kt" | sort

# Find all ViewModels
grep -rl "BaseViewModel<" app/src/main/kotlin/ --include="*.kt"

# Find all Navigation files with @Serializable routes
find app/src/main/kotlin/ -name "*Navigation.kt" | sort

# Find all Hilt modules
find app/src/main/kotlin/ -name "*Module.kt" -path "*/di/*" | sort

# Find all repository interfaces
find app/src/main/kotlin/ -name "*Repository.kt" -not -name "*Impl.kt" -path "*/repository/*" | sort

# Find encrypted disk source examples
grep -rl "EncryptedPreferences" app/src/main/kotlin/ --include="*.kt"

# Find Clock injection usage
grep -rl "private val clock: Clock" app/src/main/kotlin/ --include="*.kt"

# Search existing strings before adding new ones
grep -n "search_term" ui/src/main/res/values/strings.xml

デプロイとバージョン管理

バージョンの場所:gradle/libs.versions.toml

appVersionCode = "1"
appVersionName = "2025.11.1"

パターン:YEAR.MONTH.PATCH

公開チャネル:

  • Play ストア:署名済み AAB を使用する GitHub Actions ワークフロー
  • F-Droid:F-Droid 署名キーを使用する専用ワークフロー
  • Firebase App Distribution:ベータテスト

コメント